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

* unixutil moved

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

+ 4 - 0
.gitattributes

@@ -4412,6 +4412,10 @@ packages/sqlite/src/sqlitedb.pas svneol=native#text/plain
 packages/sqlite/tests/test.pas svneol=native#text/plain
 packages/sqlite/tests/testapiv3x.README svneol=native#text/plain
 packages/sqlite/tests/testapiv3x.pp svneol=native#text/plain
+packages/unixutil/Makefile svneol=native#text/plain
+packages/unixutil/Makefile.fpc svneol=native#text/plain
+packages/unixutil/fpmake.pp svneol=native#text/plain
+packages/unixutil/src/unixutils.pp svneol=native#text/plain
 packages/unzip/Makefile svneol=native#text/plain
 packages/unzip/Makefile.fpc svneol=native#text/plain
 packages/unzip/fpmake.pp svneol=native#text/plain

+ 47 - 1
packages/Makefile

@@ -241,7 +241,7 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng  libc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng  libc  unixutil
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
@@ -1515,6 +1515,7 @@ TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_GDBINT=1
 TARGET_DIRS_LIBPNG=1
 TARGET_DIRS_LIBC=1
+TARGET_DIRS_UNIXUTIL=1
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 TARGET_DIRS_BASE=1
@@ -4526,6 +4527,51 @@ libc:
 	$(MAKE) -C libc all
 .PHONY: libc_all libc_debug libc_smart libc_release libc_units libc_examples libc_shared libc_install libc_sourceinstall libc_exampleinstall libc_distinstall libc_zipinstall libc_zipsourceinstall libc_zipexampleinstall libc_zipdistinstall libc_clean libc_distclean libc_cleanall libc_info libc_makefiles libc
 endif
+ifdef TARGET_DIRS_UNIXUTIL
+unixutil_all:
+	$(MAKE) -C unixutil all
+unixutil_debug:
+	$(MAKE) -C unixutil debug
+unixutil_smart:
+	$(MAKE) -C unixutil smart
+unixutil_release:
+	$(MAKE) -C unixutil release
+unixutil_units:
+	$(MAKE) -C unixutil units
+unixutil_examples:
+	$(MAKE) -C unixutil examples
+unixutil_shared:
+	$(MAKE) -C unixutil shared
+unixutil_install:
+	$(MAKE) -C unixutil install
+unixutil_sourceinstall:
+	$(MAKE) -C unixutil sourceinstall
+unixutil_exampleinstall:
+	$(MAKE) -C unixutil exampleinstall
+unixutil_distinstall:
+	$(MAKE) -C unixutil distinstall
+unixutil_zipinstall:
+	$(MAKE) -C unixutil zipinstall
+unixutil_zipsourceinstall:
+	$(MAKE) -C unixutil zipsourceinstall
+unixutil_zipexampleinstall:
+	$(MAKE) -C unixutil zipexampleinstall
+unixutil_zipdistinstall:
+	$(MAKE) -C unixutil zipdistinstall
+unixutil_clean:
+	$(MAKE) -C unixutil clean
+unixutil_distclean:
+	$(MAKE) -C unixutil distclean
+unixutil_cleanall:
+	$(MAKE) -C unixutil cleanall
+unixutil_info:
+	$(MAKE) -C unixutil info
+unixutil_makefiles:
+	$(MAKE) -C unixutil makefiles
+unixutil:
+	$(MAKE) -C unixutil all
+.PHONY: unixutil_all unixutil_debug unixutil_smart unixutil_release unixutil_units unixutil_examples unixutil_shared unixutil_install unixutil_sourceinstall unixutil_exampleinstall unixutil_distinstall unixutil_zipinstall unixutil_zipsourceinstall unixutil_zipexampleinstall unixutil_zipdistinstall unixutil_clean unixutil_distclean unixutil_cleanall unixutil_info unixutil_makefiles unixutil
+endif
 ifdef TARGET_DIRS_WINUNITS-BASE
 winunits-base_all:
 	$(MAKE) -C winunits-base all

+ 1 - 1
packages/Makefile.fpc

@@ -4,7 +4,7 @@
 
 [target]
 dirs=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
-dirs_linux_i386=libc  
+dirs_linux_i386=libc  unixutil
 dirs_freebsd=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
                gdbint libpng
 dirs_darwin=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \

+ 1 - 47
packages/extra/Makefile

@@ -241,7 +241,7 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_DIRS+=chm  fftw x11 opengl gtk gtk2 syslog forms svgalib ggi  libgd utmp bfd gdbm  tcl cdrom imlib gnome1 fpgtk newt uuid ldap openal mad oggvorbis a52 modplug dts openssl pcap libcurl cairo aspell unixutil lua sdl graph
+override TARGET_DIRS+=chm  fftw x11 opengl gtk gtk2 syslog forms svgalib ggi  libgd utmp bfd gdbm  tcl cdrom imlib gnome1 fpgtk newt uuid ldap openal mad oggvorbis a52 modplug dts openssl pcap libcurl cairo aspell lua sdl graph
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 override TARGET_DIRS+=chm  graph
@@ -1512,7 +1512,6 @@ TARGET_DIRS_PCAP=1
 TARGET_DIRS_LIBCURL=1
 TARGET_DIRS_CAIRO=1
 TARGET_DIRS_ASPELL=1
-TARGET_DIRS_UNIXUTIL=1
 TARGET_DIRS_LUA=1
 TARGET_DIRS_SDL=1
 TARGET_DIRS_GRAPH=1
@@ -3723,51 +3722,6 @@ aspell:
 	$(MAKE) -C aspell all
 .PHONY: aspell_all aspell_debug aspell_smart aspell_release aspell_units aspell_examples aspell_shared aspell_install aspell_sourceinstall aspell_exampleinstall aspell_distinstall aspell_zipinstall aspell_zipsourceinstall aspell_zipexampleinstall aspell_zipdistinstall aspell_clean aspell_distclean aspell_cleanall aspell_info aspell_makefiles aspell
 endif
-ifdef TARGET_DIRS_UNIXUTIL
-unixutil_all:
-	$(MAKE) -C unixutil all
-unixutil_debug:
-	$(MAKE) -C unixutil debug
-unixutil_smart:
-	$(MAKE) -C unixutil smart
-unixutil_release:
-	$(MAKE) -C unixutil release
-unixutil_units:
-	$(MAKE) -C unixutil units
-unixutil_examples:
-	$(MAKE) -C unixutil examples
-unixutil_shared:
-	$(MAKE) -C unixutil shared
-unixutil_install:
-	$(MAKE) -C unixutil install
-unixutil_sourceinstall:
-	$(MAKE) -C unixutil sourceinstall
-unixutil_exampleinstall:
-	$(MAKE) -C unixutil exampleinstall
-unixutil_distinstall:
-	$(MAKE) -C unixutil distinstall
-unixutil_zipinstall:
-	$(MAKE) -C unixutil zipinstall
-unixutil_zipsourceinstall:
-	$(MAKE) -C unixutil zipsourceinstall
-unixutil_zipexampleinstall:
-	$(MAKE) -C unixutil zipexampleinstall
-unixutil_zipdistinstall:
-	$(MAKE) -C unixutil zipdistinstall
-unixutil_clean:
-	$(MAKE) -C unixutil clean
-unixutil_distclean:
-	$(MAKE) -C unixutil distclean
-unixutil_cleanall:
-	$(MAKE) -C unixutil cleanall
-unixutil_info:
-	$(MAKE) -C unixutil info
-unixutil_makefiles:
-	$(MAKE) -C unixutil makefiles
-unixutil:
-	$(MAKE) -C unixutil all
-.PHONY: unixutil_all unixutil_debug unixutil_smart unixutil_release unixutil_units unixutil_examples unixutil_shared unixutil_install unixutil_sourceinstall unixutil_exampleinstall unixutil_distinstall unixutil_zipinstall unixutil_zipsourceinstall unixutil_zipexampleinstall unixutil_zipdistinstall unixutil_clean unixutil_distclean unixutil_cleanall unixutil_info unixutil_makefiles unixutil
-endif
 ifdef TARGET_DIRS_LUA
 lua_all:
 	$(MAKE) -C lua all

+ 1 - 1
packages/extra/Makefile.fpc

@@ -10,7 +10,7 @@ dirs_linux= fftw \
            imlib gnome1 fpgtk newt uuid \
            ldap openal mad oggvorbis a52 \
            modplug dts openssl pcap libcurl cairo aspell
-dirs_i386_linux=unixutil lua sdl graph
+dirs_i386_linux= lua sdl graph
 dirs_x86_64_linux=sdl graph
 dirs_powerpc_linux=sdl graph
 dirs_powerpc64_linux=graph

+ 2659 - 0
packages/unixutil/Makefile

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

+ 28 - 0
packages/unixutil/Makefile.fpc

@@ -0,0 +1,28 @@
+#
+#   Makefile.fpc for libc binding
+#
+
+[package]
+name=unixutil
+version=2.0.0
+
+[target]
+units=unixutils
+rsts=unixutils
+
+[require]
+libc=y
+packages=libc fcl-base
+
+[compiler]
+includedir=src
+sourcedir=src tests
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../..
+
+[rules]
+.NOTPARALLEL:

+ 32 - 0
packages/unixutil/fpmake.pp

@@ -0,0 +1,32 @@
+{$ifndef ALLPACKAGES}
+{$mode objfpc}{$H+}
+program fpmake;
+
+uses fpmkunit;
+
+Var
+  P : TPackage;
+  T : TTarget;
+begin
+  With Installer do
+    begin
+{$endif ALLPACKAGES}
+
+    P:=AddPackage('unixutil');
+{$ifdef ALLPACKAGES}
+    P.Directory:='unixutil';
+{$endif ALLPACKAGES}
+    P.Version:='2.0.0';
+    P.SourcePath.Add('src');
+
+    T:=P.Targets.AddUnit('unixutils.pp');
+      with T.Dependencies do
+        begin
+          AddUnit('libc');
+        end;
+
+{$ifndef ALLPACKAGES}
+    Run;
+    end;
+end.
+{$endif ALLPACKAGES}

+ 1188 - 0
packages/unixutil/src/unixutils.pp

@@ -0,0 +1,1188 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 1999-2000 by the Free Pascal development team.
+
+    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.
+
+ **********************************************************************}
+{$mode objfpc}
+{$h+}
+
+Unit UnixUtils;
+
+Interface
+
+uses
+  SysUtils,Libc,Classes;
+
+{ ---------------------------------------------------------------------
+    Error handling
+  ---------------------------------------------------------------------}
+
+
+Type
+  EUnixOperationFailed = Class(Exception)
+  Private
+    FErrorCode : Integer;
+  Public
+    Constructor Create (AnErrorCode : Longint);
+    Property ErrorCode: Integer Read FErrorCode;
+  end;
+
+Function  StrError(Error:longint):string;
+Function  CheckUnixError (Error : Integer) : Integer;
+
+{ ---------------------------------------------------------------------
+    File handling
+  ---------------------------------------------------------------------}
+
+
+Const
+  PathSeparator = '/';
+
+Type
+  TUnixFileStream = Class(TFileStream)
+    Procedure GetInfo(Var StatInfo: TStatBuf);
+    Procedure LockRegion(Cmd,LockType,Whence : Integer;
+                         Offset,Len : __off_t);
+    Procedure ReadLock(Whence : Integer;Offset,Len : __off_t; Wait : Boolean);
+    Procedure WriteLock(Whence : Integer;Offset,Len : __off_t; Wait : Boolean);
+    Procedure UnLock(Whence : Integer;Offset,Len : __off_t);
+  end;
+
+
+{ Useful constants and structures }
+
+Const
+  PermissionBits : Array [1..9] of Integer =
+         (S_IRUSR,S_IWUSR,S_IXUSR,
+          S_IRGRP,S_IWGRP,S_IXGRP,
+          S_IROTH,S_IWOTH,S_IXOTH);
+  PermissionChars : Array[1..9] of char =
+          ('r','w','x','r','w','x','r','w','x');
+
+  SuidBits  : array[1..3] of Integer = (S_ISUID,S_ISGID,S_ISVTX);
+  SuidChars : Array[1..3] of char = ('s','s','t') ;
+
+
+{ Utility functions }
+
+Type
+ TPermissionString = String[9];
+
+Type
+  TGlobFlag = (gfErr,gfMark,gfNoSort,gfNoCheck,gfAppend,gfNoEscape,
+               gfPeriod,gfBrace,gfNoMagic,gfTilde,gfOnlyDir,gfTildeCheck);
+  TGlobFlags = Set of TGlobFlag;
+
+  TFnmFlag = (fnmNoEscape,fnmPathName,fnmPeriod,fnmLeadingDir,fnmCaseFold);
+  TFnmFlags = Set of TFnmFlag;
+
+Procedure Stat  (Const FileName : String; Var StatInfo : TStatBuf);
+Procedure LStat  (Const FileName : String; Var StatInfo : TStatBuf);
+Procedure StatFS  (Const FileName : String; Var StatInfo : TStatFS);
+Procedure UnLink(Const FileName: String);
+Procedure Link  (Const FromName, ToName: String);
+Procedure SymLink  (Const FromName, ToName: String);
+Function  ReadLink (Const FileName : String) : String;
+Function  FilePermString (Const Mode : __mode_t) : TPermissionString;
+Function  PermStringToMask (Const Perm : TPermissionstring) : __mode_t;
+Procedure ChMod(Const FileName : String; Mode : __mode_t);
+Procedure ReName(Const OldName,NewName : String);
+Function  Access(Const FileName : String; Mode :Integer) : Boolean;
+Procedure Glob(Const Pattern : String; Flags : TGlobFlags; List : TStrings);
+// Globfree call with correct calling conventions.
+Procedure globfree(__pglob: PGlobData);cdecl;external 'libc.so.6' name 'globfree';
+
+Function  OpenDir(Const Dir : String) : PDirectoryStream;
+Function  FNMatch(Const Pattern,Name : String; Flags : TFnmFlags) : Boolean;
+Procedure GetDirectoryListing(Const Dir : String; List : TStrings);overload;
+Procedure GetDirectoryListing(Const Dir,Pattern : String;
+                              Flags : TFnmFlags; List : TStrings);overload;
+Procedure GetSubdirectories(Const Dir : String; List : TStrings);
+Function  StripTrailingSeparator(Const Dir : String) : String;
+Function  AddTraiLingSeparator(Const Dir : String) : String;
+Function  FileSizeToString(Size: Int64) : String;
+Function  SetMntEnt(FileName,Mode : String) : PIOFile;
+Procedure Mount(Const Device,Directory,FileSystemType : String; Flags : Cardinal; Data: Pointer);
+Procedure Umount(Const FileName);
+Function  FSTypeToString(FSType : Integer) : String;
+Procedure fcntl(Handle: Integer; Command: Integer; Var Lock: TFlock);
+Procedure  Dup2(Stream1,Stream2 : THandleStream);
+Function  Dup(Stream : THandleStream) : THandleStream;
+
+
+{ ---------------------------------------------------------------------
+  Process management routines.
+  ---------------------------------------------------------------------}
+
+function SetUID(UID: __uid_t):Boolean;
+function SetEUID(UID: __uid_t):Boolean;
+function SetGID(GroupID: __gid_t):Boolean;
+function SetEGID(GroupID: __gid_t):Boolean;
+function SetREUID(RUID: __uid_t; EUID: __uid_t):Boolean;
+function SetREGID(RGID: __gid_t; EGID: __gid_t):Boolean;
+Function GetGroups(Var A : Array of __gid_t) : Integer;
+Function Group_member(GroupID : __gid_t) : Boolean;
+Function Fork : __pid_t;
+Function wait(var Status : Integer) : pid_t;
+Function waitpid(PID : pid_t;var Status : Integer;options : Integer) : pid_t;
+Function ConvertStatusToString(Status : Integer) : String;
+Procedure Execve(ProgName : String; Args,Env : TStrings);
+Procedure Execv(ProgName : String; Args : TStrings);
+Procedure Execvp(ProgName : String; Args : TStrings);
+Procedure Execle(ProgName : String; Args : Array of string;Env : TStrings);
+Procedure Execl(ProgName : String; Args : Array of string);
+Procedure Execlp(ProgName : String; Args : Array of string);
+
+{ ---------------------------------------------------------------------
+    User/group management routines
+  ---------------------------------------------------------------------}
+
+Type
+  EUserLookupError = Class(Exception);
+  EGroupLookupError = Class(Exception);
+  EShadowLookupError = Class(Exception);
+
+{ User functions }
+
+Function  getpwnam(Const UserName: String) : PPasswordRecord;
+Procedure GetUserData(Const UserName : String; Var Data : TPasswordRecord); overload;
+Procedure GetUserData(Uid : Integer; Var Data : TPasswordRecord); overload;
+function  GetUserName(UID : Integer) : String;
+function  GetUserId(Const UserName : String) : Integer;
+function  GetUserGid(Const UserName : String) : Integer;
+function  GetUserDir(Const UserName : String): String;
+function  GetUserDescription(Const UserName : String): String;
+Procedure GetUserList(List : Tstrings);overload;
+Procedure GetUserList(List : TStrings; WithIDs : Boolean);overload;
+
+{ Group functions }
+
+Function  getgrnam(Const GroupName: String) : PGroup;
+Procedure GetGroupData(Const GroupName : String; Var Data : TGroup); overload;
+Procedure GetGroupData(Gid : Integer; Var Data : TGroup); overload;
+function  GetGroupName(GID : Integer) : String;
+function  GetGroupId(Const GroupName : String) : Integer;
+Procedure GetGroupList(List : Tstrings);overload;
+Procedure GetGroupList(List : TStrings; WithIDs : Boolean);overload;
+Procedure GetGroupMembers(GID : Integer;List : TStrings);overload;
+Procedure GetGroupMembers(Const GroupName : String;List : TStrings);overload;
+
+{ Shadow password functions }
+
+function getspnam(UserName : String): PPasswordFileEntry;
+function sgetspent(Line : String): PPasswordFileEntry;
+Procedure GetUserShadowData(Const UserName : String; Var Data : TPasswordFileEntry);overload;
+Procedure GetUserShadowData(UID : Integer; Var Data : TPasswordFileEntry);overload;
+
+{ Extra functions }
+
+Function GetUserGroup(Const UserName : String) : String;
+
+
+
+
+Implementation
+
+ResourceString
+  SErrOpeningDir = 'Could not open directory "%s" for reading';
+  SUnknownFileSystemType = 'Unknown filesystem (%x)';
+  SNormalExitWithErrCode = 'Child exited with error code %d';
+  SNormalExit            = 'Child exited normally';
+  SSignalExit            = 'Child exited abnormally due to signal %d';
+  SStopped               = 'Child stopped due to signal %d';
+  SErrUnknowStatusCode   = 'Unknown exit status : %d';
+  EnoSuchUserName = 'Unknown username: "%s"';
+  EnoSuchUserID = 'Unknown user ID: %d';
+  EnoSuchGroupName = 'Unknown groupname: "%s"';
+  EnoSuchGroupID = 'Unknown group ID: %d';
+  ENoShadowEntry = 'No shadow file entry for "%s"';
+  EShadowNotPermitted = 'Not enough permissions to access shadow password file';
+
+{ ---------------------------------------------------------------------
+    Error handling
+  ---------------------------------------------------------------------}
+
+
+Function StrError(Error:longint):string;
+
+begin
+  StrError:=strpas(libc.strerror(Error));
+end;
+
+Constructor EUnixOperationFailed.Create(AnErrorCode : Longint);
+
+begin
+  FErrorCode:=AnErrorCode;
+  Inherited Create(StrError(Abs(AnErrorCode)));
+end;
+
+Function CheckUnixError (Error : Integer) : Integer;
+
+begin
+  If (Error<0) then
+    Raise EUnixOperationFailed.Create(Error);
+  Result:=Error;
+end;
+
+
+Procedure Stat(Const FileName : String; Var StatInfo : TStatBuf);
+
+begin
+  CheckUnixError(Libc.Stat(Pchar(FileName),StatInfo));
+end;
+
+Procedure LStat(Const FileName : String; Var StatInfo : TStatBuf);
+
+begin
+  CheckUnixError(Libc.LStat(Pchar(FileName),StatInfo));
+end;
+
+Procedure StatFS  (Const FileName : String; Var StatInfo : TStatFS);
+
+begin
+  CheckUnixError(Libc.statfs(PChar(FileName),STatinfo));
+end;
+
+Procedure UnLink(const FileName: String);
+
+begin
+  CheckUnixError(Libc.unlink(PChar(FileName)));
+end;
+
+Procedure Link  (Const FromName, ToName: String);
+
+begin
+  CheckUnixError(Libc.Link(PChar(FromName),Pchar(ToName)));
+end;
+
+Procedure SymLink  (Const FromName, ToName: String);
+
+begin
+  CheckUnixError(Libc.SymLink(PChar(FromName),Pchar(ToName)));
+end;
+
+Function  ReadLink (Const FileName : String) : String;
+
+Const
+  NameBufSize = 1024;
+
+begin
+  SetLength(Result,NameBufSize);
+  Try
+    SetLength(Result,CheckUnixError(Libc.readlink(pchar(FileName),PChar(Result),NameBufSize)));
+  except
+    SetLength(Result,0);
+    raise
+  end;
+end;
+
+
+Function  FilePermString (Const Mode : __mode_t) : TPermissionString;
+
+Var
+  i : longint;
+
+    Function ModeToSUIBit (C,RC : Char) : Char;
+
+    begin
+      If C='x' then
+        Result:=RC
+      else
+        Result:=Upcase(RC);
+    end;
+
+begin
+  Result:=StringOfChar('-',9);
+  For I:=1 to 9 do
+    If ((Mode and PermissionBits[i])=PermissionBits[i]) then
+      Result[i]:=PermissionChars[i];
+  For I:=1 to 3 do
+    If ((Mode and SuidBits[i])=SuidBits[i]) then
+      If Result[I*3]='x' then
+        Result[i*3]:=SuidChars[i]
+      else
+        Result[i*3]:=UpCase(SuidChars[i]);
+end;
+
+Function  PermStringToMask (Const Perm : TPermissionstring) : __mode_t;
+
+Var
+  I : integer;
+
+begin
+  Result := 0;
+  For I:=1 to 9 do
+    If Perm[i]=PermissionChars[i] Then
+      Result:=Result or PermissionBits[i]
+    else
+      If (I mod 3)=0 then
+        If Perm[i]=suidchars[i] then
+          Result:=(Result or PermissionBits[I]) or (SuidBits[I div 3])
+        else if (Perm[i]=upcase(SuidChars[I])) then
+          Result:=(Result or SuidBits[I div 3])
+end;
+
+Procedure ChMod(Const FileName : String; Mode : __mode_t);
+
+begin
+  CheckUnixError(Libc.Chmod(PChar(FileName),Mode));
+end;
+
+Procedure ReName(Const OldName,NewName : String);
+
+begin
+  CheckUnixError(Libc.__rename(Pchar(OldName),Pchar(NewName)));
+end;
+
+Function Access(Const FileName : String; Mode :Integer) : Boolean;
+
+begin
+  Result:=Libc.Access(Pchar(FileName),Mode)=0;
+end;
+
+
+
+Procedure Glob(Const Pattern : String; Flags : TGlobFlags; List : TStrings);
+
+Const
+  // Append and offset are masked to 0, since they're useless.
+  GF : Array[TGlobFlag] of Integer
+     = (GLOB_ERR,GLOB_MARK,GLOB_NOSORT,GLOB_NOCHECK,0,
+        GLOB_NOESCAPE,GLOB_PERIOD,GLOB_BRACE,GLOB_NOMAGIC,
+        GLOB_TILDE,GLOB_ONLYDIR, GLOB_TILDE_CHECK);
+
+Type
+  TPCharArray = Array[Word] of PChar;
+  PPCharArray = ^TPcharArray;
+Var
+  gd : TGlobData;
+  i  : TGlobFlag;
+  f  : Integer;
+
+begin
+  FillChar(gd,SizeOf(TGlobData),#0);
+  f:=0;
+  For i:=gfErr to gfTildeCheck do
+    If i in Flags then
+      F:=F or GF[i];
+  Try
+    CheckUnixError(Libc.Glob(Pchar(Pattern),F,Nil,@gd));
+    If Not (gfAppend in Flags) then
+      List.Clear;
+    for f:=0 to gd.gl_pathc-1 do
+      List.add(Strpas(PPCharArray(gd.gl_pathv)^[f]));
+  finally
+    globFree(@gd);
+  end;
+end;
+
+Function OpenDir(Const Dir : String) : PDirectoryStream;
+
+begin
+  Result:=Libc.OpenDir(Pchar(Dir));
+  If (Result=Nil) then
+    Raise EUnixOperationFailed.CreateFmt(SErrOpeningDir,[Dir]);
+end;
+
+
+Procedure GetDirectoryListing(Const Dir : String; List : TStrings);overload;
+
+Var
+  P : PDirent;
+  D : PDirectoryStream;
+
+begin
+  D:=OpenDir(Dir);
+  Try
+    P:=ReadDir(D);
+    List.Clear;
+    While P<>Nil do
+      begin
+      List.Add(StrPas(@p^.d_name[0]));
+      P:=ReadDir(D);
+      end;
+  Finally
+    CloseDir(D);
+  end;
+end;
+
+Function FNtoFNFlags(Flags :TFnmFlags) : Integer;
+
+Const
+  FV : Array[TFnmFlag] of integer =
+       (FNM_NOESCAPE,FNM_PATHNAME,FNM_PERIOD,FNM_LEADING_DIR,FNM_CASEFOLD);
+
+Var i : TFnmFlag;
+
+begin
+  Result:=0;
+  For I:=fnmNoEscape to fnmCaseFold do
+    If i in Flags then
+      Result:=Result or FV[i];
+end;
+
+Function FNMatch(Const Pattern,Name : String; Flags : TFnmFlags) : Boolean;
+
+begin
+  Result:=Libc.FNMatch(PChar(Pattern),PChar(Name),FNtoFNFlags(Flags))=0;
+end;
+
+Procedure GetDirectoryListing(Const Dir,Pattern : String; Flags : TFnmFlags; List : TStrings);overload;
+
+Var
+  P     : PDirent;
+  D     : PDirectoryStream;
+  PP,PF : PChar;
+  F     : Integer;
+
+begin
+  D:=OpenDir(Dir);
+  PP:=PChar(Pattern);
+  F:=FNtoFNFlags(Flags);
+  Try
+    P:=ReadDir(D);
+    List.Clear;
+    While P<>Nil do
+      begin
+      PF:=@p^.d_name[0];
+      If Libc.FNMatch(PP,PF,F)=0 then
+        List.Add(StrPas(PF));
+      P:=ReadDir(D);
+      end;
+  Finally
+    CloseDir(D);
+  end;
+end;
+
+Procedure GetSubdirectories(Const Dir : String; List : TStrings);
+
+Var
+  P : PDirent;
+  D : PDirectoryStream;
+  S : String;
+  StatInfo : TStatBuf;
+
+begin
+  D:=OpenDir(Dir);
+  Try
+    P:=ReadDir(D);
+    List.Clear;
+    While P<>Nil do
+      begin
+      S:=StrPas(@p^.d_name[0]);
+      LStat(Dir+'/'+S,StatInfo);
+      If S_ISDIR(StatInfo.st_mode) then
+        List.Add(S);
+      P:=ReadDir(D);
+      end;
+  Finally
+    CloseDir(D);
+  end;
+end;
+
+Function  StripTrailingSeparator(Const Dir : String) : String;
+
+Var
+  L : Integer;
+
+begin
+  Result:=Dir;
+  L:=Length(result);
+  If (L>1) and (Result[l]=PathSeparator) then
+    SetLength(Result,L-1);
+end;
+
+Function  AddTraiLingSeparator(Const Dir : String) : String;
+
+Var
+  L : Integer;
+
+begin
+  Result:=Dir;
+  L:=Length(Result);
+  If (L>0) and (Result[l]<>PathSeparator) then
+    Result:=Result+PathSeparator;
+end;
+
+Function  FileSizeToString(Size: Int64) : String;
+
+Const
+  Sizes : Array [0..4] of String =
+     ('Bytes','Kb','Mb','Gb','Tb');
+Var
+    F : Double;
+    I : longint;
+
+begin
+  If Size>1024 Then
+    begin
+    F:=Size;
+    I:=0;
+    While (F>1024) and (I<4) do
+      begin
+      F:=F / 1024;
+      Inc(i);
+      end;
+    Result:=Format('%4.2f %s',[F,Sizes[i]]);
+    end
+  else
+    Result:=Format('%d %s',[Size,Sizes[0]]);
+end;
+
+Function  SetMntEnt(FileName,Mode : String) : PIOFile;
+
+begin
+  Result:=Libc.setmntent(PChar(FileName),Pchar(Mode));
+end;
+
+Procedure Mount(Const Device,Directory,FileSystemType : String; Flags : Cardinal; Data: Pointer);
+
+begin
+  If Libc.Mount(PChar(Device),PChar(Directory),PChar(FileSystemType),Flags,Data)<>0 then
+    CheckUnixError(Libc.errno);
+end;
+
+Procedure Umount(Const FileName);
+
+begin
+  If Libc.umount(PChar(FileName))<>0 then
+    CheckUnixError(Libc.Errno);
+end;
+
+Function  FSTypeToString(FSType : Integer) : String;
+
+begin
+  Case LongWord(FStype) of
+    $ADFF : Result:='affs';
+    $137D : Result:='ext';
+    $EF51,$EF53 : Result:='ext2';
+    $F995E849 : Result := 'hpfs';
+    $9660 : Result:='iso9660';
+    $137F,$138F,$2468,$2478 : Result:='minix';
+    $4d44 : Result:='msdos';
+    $564c : Result:='ncp';
+    $6969 : Result:='nfs';
+    $9fa0 : Result:='proc';
+    $517B : Result:='smb';
+    $012FF7B4,$012FFB5,$012FFB6,$012FFB7 : Result:='xenix';
+    $00011954 : Result:='ufs';
+    $012FD16D : Result:='xia';
+    $1CD1 : Result:='devpts';
+    $5346544E : Result:='ntfs';
+  else
+    Result:=Format(SUnknownFileSystemType,[FStype]);
+  end;
+end;
+
+Procedure fcntl(Handle: Integer; Command: Integer; Var Lock: TFlock);
+
+begin
+  CheckUnixError(Libc.fcntl(Handle,Command,Lock));
+end;
+
+Procedure Dup2(Stream1,Stream2 : THandleStream);
+
+begin
+  CheckUnixError(Libc.Dup2(Stream1.Handle,Stream2.Handle));
+end;
+
+Function Dup(Stream : THandleStream) : THandleStream;
+
+begin
+  Result:=ThandleStream.Create(CheckUnixError(Libc.Dup(Stream.Handle)));
+end;
+
+
+{ ---------------------------------------------------------------------
+  TUnixFileStream implementation
+  ---------------------------------------------------------------------}
+
+Procedure TUnixFileStream.GetInfo(Var StatInfo: TStatBuf);
+
+begin
+  CheckUnixError(FStat(Handle,StatInfo));
+end;
+
+procedure TUnixFileStream.LockRegion(Cmd, LockType, Whence: Integer;
+  Offset, Len: __off_t);
+
+Var
+  Lock : TFlock;
+
+begin
+  With Lock do
+    begin
+    L_type:=LockType;
+    L_start:=Offset;
+    L_Len:=Len;
+    L_whence:=Whence;
+    end;
+  fcntl(Handle,cmd,Lock);
+end;
+
+procedure TUnixFileStream.ReadLock(Whence: Integer; Offset, Len: __off_t;
+  Wait: Boolean);
+
+begin
+  If Wait then
+    LockRegion(F_SETLKW,F_RDLCK,whence,offset,len)
+  else
+    LockRegion(F_SETLK,F_RDLCK,whence,offset,len)
+end;
+
+procedure TUnixFileStream.UnLock(Whence: Integer; Offset, Len: __off_t);
+begin
+  LockRegion(F_SETLK,F_UNLCK,whence,offset,len)
+end;
+
+procedure TUnixFileStream.WriteLock(Whence: Integer; Offset, Len: __off_t;
+  Wait: Boolean);
+begin
+  If Wait then
+    LockRegion(F_SETLKW,F_WRLCK,whence,offset,len)
+  else
+    LockRegion(F_SETLK,F_WRLCK,whence,offset,len)
+end;
+
+{ ---------------------------------------------------------------------
+    Process utilities
+  ---------------------------------------------------------------------}
+
+function SetUID(UID: __uid_t):Boolean;
+
+begin
+  Result:=LibC.setuid(UID)=0;
+end;
+
+function SetEUID(UID: __uid_t):Boolean;
+
+begin
+  Result:=LibC.seteuid(UID)=0;
+end;
+
+function SetGID(GroupID: __gid_t):Boolean;
+
+begin
+  Result:=LibC.setgid(GroupID)=0;
+end;
+
+function SetEGID(GroupID: __gid_t):Boolean;
+
+begin
+  Result:=LibC.setegid(GroupID)=0;
+
+end;
+
+function SetREUID(RUID: __uid_t; EUID: __uid_t):Boolean;
+
+begin
+  Result:=LibC.setreuid(RUID,EUID)=0;
+end;
+
+function SetREGID(RGID: __gid_t; EGID: __gid_t):Boolean;
+
+begin
+  Result:=LibC.setregid(RGID,EGID)=0;
+end;
+
+
+
+Function GetGroups(var A : Array of __gid_t) : Integer;
+
+begin
+  Result:=LibC.GetGroups(High(A)+1,A);
+end;
+
+Function Group_member(GroupID : __gid_t) : Boolean;
+
+begin
+  Result:=LibC.group_member(GroupID)<>0;
+end;
+
+Function Fork : __pid_t;
+
+begin
+  Result:=CheckUnixError(LibC.Fork);
+end;
+
+Function wait(var Status : Integer) : pid_t;
+
+begin
+  Result:=Libc.wait(@Status);
+end;
+
+Function waitpid(PID : pid_t;var Status : Integer;options : Integer) : pid_t;
+
+begin
+  Result:=Libc.WaitPid(Pid,@Status,Options);
+end;
+
+Function ConvertStatusToString(Status : Integer) : String;
+
+begin
+  If WIfExited(Status) then
+    If WExitStatus(Status)=0 then
+      Result:=SNormalExit
+    else
+      Result:=Format(SNormalExitWithErrCode,[WExitStatus(Status)])
+  else If WIfSIgnaled(Status) then
+    Result:=Format(SSignalExit,[WTermSig(Status)])
+  else if WIfStopped(Status) then
+    Result:=Format(SStopped,[WStopSig(Status)])
+  else
+    Result:=Format(SErrUnknowStatusCode,[Status])
+end;
+
+
+Type
+  TPCharArray = Array[Word] of pchar;
+  PPCharArray = ^TPcharArray;
+
+
+Function StringsToPCharList(Arg0 : String;List : TStrings) : PPChar;
+
+Var
+  I,Org : Integer;
+  S : String;
+
+begin
+  I:=(List.Count)+1;
+  If Arg0<>'' Then
+    begin
+    Inc(i);
+    Org:=1;
+    end
+  else
+    org:=0;
+  GetMem(Result,I*sizeOf(PChar));
+  PPCharArray(Result)^[List.Count+org]:=Nil;
+  If Arg0<>'' Then
+    PPCharArray(Result)^[0]:=StrNew(PChar(Arg0));
+  For I:=0 to List.Count-1 do
+    begin
+    S:=List[i];
+    PPCharArray(Result)^[i+org]:=StrNew(PChar(S));
+    end;
+end;
+
+Procedure FreePCharList(List : PPChar);
+
+Var
+  I : integer;
+
+begin
+  I:=0;
+  While List[i]<>Nil do
+    begin
+    StrDispose(List[i]);
+    Inc(I);
+    end;
+  FreeMem(List);
+end;
+
+Procedure Execve(ProgName : String; Args,Env : TStrings);
+
+Var
+  ArgP,EnvP : PPChar;
+
+begin
+  ArgP:=StringsToPCharList(ExtractFileName(ProgName),Args);
+  try
+    EnvP:=StringsToPCharList('',Env);
+    try
+      CheckUnixError(Libc.execve(PChar(ProgName),ArgP,EnvP));
+    finally
+      FreePCharList(EnvP);
+    end;
+  finally
+    FreePCharList(ArgP);
+  end;
+end;
+
+
+Procedure Execv(ProgName : String; Args : TStrings);
+
+Var
+  ArgP : PPChar;
+
+begin
+  ArgP:=StringsToPCharList(ExtractFileName(ProgName),Args);
+  try
+    CheckUnixError(Libc.execv(PChar(ProgName),ArgP));
+  finally
+    FreePCharList(ArgP);
+  end;
+end;
+
+Procedure Execvp(ProgName : String; Args : TStrings);
+
+Var
+  ArgP : PPChar;
+
+begin
+  ArgP:=StringsToPCharList(ExtractFileName(ProgName),Args);
+  try
+    CheckUnixError(Libc.execvp(PChar(ProgName),ArgP));
+  finally
+    FreePCharList(ArgP);
+  end;
+end;
+
+Function CommandArgsToPCharList(Arg0 :String;Args : Array of string) : PPChar;
+
+Var
+  I,Org : Integer;
+
+begin
+  I:=High(Args)+2;
+  If Arg0<>'' Then
+    begin
+    Inc(i);
+    Org:=1;
+    end
+  else
+    org:=0;
+  GetMem(Result,I*sizeOf(PChar));
+  PPCharArray(Result)^[i-1]:=Nil;
+  If Arg0<>'' Then
+    PPCharArray(Result)^[0]:=StrNew(PChar(Arg0));
+  For I:=0 to High(Args) do
+    PPCharArray(Result)^[i+org]:=StrNew(PChar(Args[i]));
+end;
+
+Procedure Execle(ProgName : String; Args : Array of string;Env : TStrings);
+
+Var
+  ArgP,EnvP : PPChar;
+
+begin
+  ArgP:=CommandArgsToPCharList(ExtractFileName(ProgName),Args);
+  try
+    EnvP:=StringsToPCharList('',Env);
+    try
+      CheckUnixError(Libc.execve(PChar(ProgName),ArgP,EnvP));
+    finally
+    FreePCharList(EnvP);
+    end;
+  finally
+    FreePCharList(ArgP);
+  end;
+end;
+
+Procedure Execl(ProgName : String; Args : Array of string);
+
+Var
+  ArgP : PPChar;
+
+begin
+  ArgP:=CommandArgsToPCharList(ExtractFileName(ProgName),Args);
+  try
+    CheckUnixError(Libc.execv(PChar(ProgName),ArgP));
+  finally
+    FreePCharList(ArgP);
+  end;
+end;
+
+Procedure Execlp(ProgName : String; Args : Array of string);
+
+Var
+  ArgP : PPChar;
+
+begin
+  ArgP:=CommandArgsToPCharList(ExtractFileName(ProgName),Args);
+  try
+    CheckUnixError(Libc.execvp(PChar(ProgName),ArgP));
+  finally
+    FreePCharList(ArgP);
+  end;
+end;
+
+{ ---------------------------------------------------------------------
+    User/Group management routines.
+  ---------------------------------------------------------------------}
+
+
+Function getpwnam(Const UserName: String) : PPasswordRecord;
+
+begin
+  Result:=libc.getpwnam(Pchar(UserName));
+end;
+
+Procedure GetUserData(Const UserName : String; Var Data : TPasswordRecord);
+
+Var P : PPasswordRecord;
+
+begin
+  P:=Getpwnam(UserName);
+  If P<>Nil then
+    Data:=P^
+  else
+    Raise EUserLookupError.CreateFmt(ENoSuchUserName,[UserName]);
+end;
+
+Procedure GetUserData(Uid : Integer; Var Data : TPasswordRecord);
+
+Var P : PPasswordRecord;
+
+begin
+  P:=Getpwuid(Uid);
+  If P<>Nil then
+    Data:=P^
+  else
+    Raise EUserLookupError.CreateFmt(ENoSuchUserID,[Uid]);
+end;
+
+function GetUserName(UID : Integer) : String;
+
+Var
+  UserData : TPasswordRecord;
+
+begin
+  GetuserData(UID,UserData);
+  Result:=strpas(UserData.pw_Name);
+end;
+
+function  GetUserId(Const UserName : String) : Integer;
+
+Var
+  UserData : TPasswordRecord;
+
+begin
+  GetUserData(UserName,UserData);
+  Result:=UserData.pw_uid;
+end;
+
+function  GetUserGId(Const UserName : String) : Integer;
+
+Var
+  UserData : TPasswordRecord;
+
+begin
+  GetUserData(UserName,UserData);
+  Result:=UserData.pw_gid;
+end;
+
+function GetUserDir(Const UserName : String): String;
+
+Var
+  UserData : TPasswordRecord;
+
+begin
+  GetUserData(UserName,UserData);
+  Result:=strpas(UserData.pw_dir);
+end;
+
+function  GetUserDescription(Const UserName : String): String;
+
+Var
+  UserData : TPasswordRecord;
+
+begin
+  GetUserData(UserName,UserData);
+  Result:=strpas(UserData.pw_gecos);
+end;
+
+Procedure GetUserList(List : Tstrings);
+
+begin
+  GetUserList(List,False);
+end;
+
+Procedure GetUserList(List : TStrings; WithIDs : Boolean);
+
+Var
+  P : PPasswordRecord;
+
+begin
+  List.Clear;
+  setpwent;
+  try
+    Repeat
+      P:=getpwent;
+      If P<>Nil then
+        begin
+        If WithIDs then
+          List.Add(Format('%d=%s',[P^.pw_uid,strpas(p^.pw_name)]))
+        else
+          List.Add(strpas(p^.pw_name));
+        end;
+    until (P=Nil);
+  finally
+    endpwent;
+  end;
+end;
+
+{ ---------------------------------------------------------------------
+    Group Functions
+  ---------------------------------------------------------------------}
+
+
+Function  getgrnam(Const GroupName: String) : PGroup;
+
+begin
+  Result:=libc.getgrnam(Pchar(GroupName));
+end;
+
+Procedure GetGroupData(Const GroupName : String; Var Data : TGroup); overload;
+
+Var P : PGroup;
+
+begin
+  P:=Getgrnam(GroupName);
+  If P<>Nil then
+    Data:=P^
+  else
+    Raise EGroupLookupError.CreateFmt(ENoSuchGroupName,[GroupName]);
+end;
+
+Procedure GetGroupData(Gid : Integer; Var Data : TGroup); overload;
+
+Var P : PGroup;
+
+begin
+  P:=Getgrgid(gid);
+  If P<>Nil then
+    Data:=P^
+  else
+    Raise EGroupLookupError.CreateFmt(ENoSuchGroupID,[Gid]);
+end;
+
+function GetGroupName(GID : Integer) : String;
+
+Var
+  G : TGroup;
+
+begin
+  GetGroupData(Gid,G);
+  Result:=StrPas(G.gr_name);
+end;
+
+function  GetGroupId(Const GroupName : String) : Integer;
+
+Var
+  G : TGroup;
+
+begin
+  GetGroupData(GroupName,G);
+  Result:=G.gr_gid;
+end;
+
+Procedure GetGroupList(List : Tstrings);overload;
+
+begin
+  GetGroupList(List,False);
+end;
+
+Procedure GetGroupList(List : TStrings; WithIDs : Boolean);overload;
+
+Var
+  G : PGroup;
+
+begin
+  List.Clear;
+  setgrent;
+  try
+    Repeat
+      G:=getgrent;
+      If G<>Nil then
+        begin
+        If WithIDs then
+          List.Add(Format('%d=%s',[G^.gr_gid,strpas(G^.gr_name)]))
+        else
+          List.Add(strpas(G^.gr_name));
+        end;
+    until (G=Nil);
+  finally
+    endgrent;
+  end;
+end;
+
+Function PCharListToStrings(P : PPChar; List : TStrings) : Integer;
+
+begin
+  List.Clear;
+  While P^<>Nil do
+    begin
+    List.Add(StrPas(P^));
+    P:=PPChar(PChar(P)+SizeOf(PChar));
+    end;
+  Result:=List.Count;
+end;
+
+
+Procedure GetGroupMembers(GID : Integer;List : TStrings);
+
+Var
+  G : TGroup;
+
+begin
+  GetGroupData(GID,G);
+  PCharListToStrings(G.gr_mem,List);
+end;
+
+Procedure GetGroupMembers(Const GroupName : String;List : TStrings);
+
+Var
+  G : TGroup;
+
+begin
+  GetGroupData(GroupName,G);
+  PCharListToStrings(g.gr_mem,List);
+end;
+
+{ Shadow password functions }
+
+function getspnam(UserName : String): PPasswordFileEntry;
+
+begin
+  result:=Libc.getspnam(Pchar(UserName));
+end;
+
+function sgetspent(Line : String): PPasswordFileEntry;
+
+begin
+  Result:=libc.sgetspent(Pchar(Line));
+end;
+
+Procedure GetUserShadowData(Const UserName : String; Var Data : TPasswordFileEntry);
+
+Var
+  P : PPasswordFileEntry;
+
+begin
+  P:=getspnam(UserName);
+  If P=Nil then
+    If (GetUID<>0) and (GetEUID<>0) then
+      Raise EShadowLookupError.Create(EShadowNotPermitted)
+    else
+      Raise EShadowLookupError.CreateFmt(ENoShadowEntry,[UserName])
+  else
+    Data:=P^;
+end;
+
+Procedure GetUserShadowData(UID : Integer; Var Data : TPasswordFileEntry);
+
+begin
+  GetUserShadowData(GetUserName(UID),Data);
+end;
+
+{ Extra functions }
+
+Function GetUserGroup(Const UserName : String) : String;
+
+begin
+  GetGroupName(GetUserGid(UserName));
+end;
+
+
+
+
+
+end.