Browse Source

Merged revisions 6895 via svnmerge from
svn+ssh://svn.freepascal.org/FPC/svn/fpc/trunk

........
r6895 | michael | 2007-03-16 23:58:42 +0100 (Fri, 16 Mar 2007) | 1 line

* lua headers, donated by Bram Kuijvenhoven. Headers are Modified LGPL
........

git-svn-id: branches/fixes_2_2@6896 -

michael 18 years ago
parent
commit
8bce5a7f63

+ 7 - 0
.gitattributes

@@ -2883,6 +2883,13 @@ packages/extra/libpng/Makefile.fpc svneol=native#text/plain
 packages/extra/libpng/fpmake.inc svneol=native#text/plain
 packages/extra/libpng/fpmake.pp svneol=native#text/plain
 packages/extra/libpng/png.pp svneol=native#text/plain
+packages/extra/lua/Makefile svneol=native#text/plain
+packages/extra/lua/Makefile.fpc svneol=native#text/plain
+packages/extra/lua/fpmake.inc svneol=native#text/plain
+packages/extra/lua/fpmake.pp svneol=native#text/plain
+packages/extra/lua/lauxlib.pas svneol=native#text/plain
+packages/extra/lua/lua.pas svneol=native#text/plain
+packages/extra/lua/lualib.pas svneol=native#text/plain
 packages/extra/mad/Makefile svneol=native#text/plain
 packages/extra/mad/Makefile.fpc svneol=native#text/plain
 packages/extra/mad/mad.pas svneol=native#text/plain

+ 52 - 32
packages/extra/Makefile

@@ -1,8 +1,8 @@
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2007/03/16]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2007/02/27]
 #
 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-win64 x86_64-embedded arm-linux arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded
+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-win64 x86_64-embedded arm-linux arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-embedded
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx
 LIMIT83fs = go32v2 os2 emx watcom
@@ -231,13 +231,13 @@ 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+=unzip zlib fftw x11 opengl gtk gtk2 syslog forms svgalib ggi libpng libgd utmp bfd gdbm ncurses tcl cdrom imlib gnome1 fpgtk newt uuid ldap openal mad oggvorbis a52 modplug dts openssl pcap libcurl cairo sdl unixutil
+override TARGET_DIRS+=unzip zlib fftw x11 opengl gtk gtk2 syslog forms svgalib ggi libpng libgd utmp bfd gdbm ncurses tcl cdrom imlib gnome1 fpgtk newt uuid ldap openal mad oggvorbis a52 modplug dts openssl pcap libcurl cairo sdl unixutil lua
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 override TARGET_DIRS+=unzip
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_DIRS+=unzip opengl gtk gtk2 zlib tcl cdrom fpgtk fftw mad openal oggvorbis a52 libpng openssl pcap sdl
+override TARGET_DIRS+=unzip opengl gtk gtk2 zlib tcl cdrom fpgtk fftw mad openal oggvorbis a52 libpng openssl pcap sdl lua lua
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 override TARGET_DIRS+=os2units rexx unzip zlib x11 gtk libpng tcl imlib fpgtk
@@ -329,9 +329,6 @@ endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
 override TARGET_DIRS+=unzip zlib fftw x11 opengl gtk gtk2 syslog forms svgalib ggi libpng libgd utmp bfd gdbm ncurses tcl cdrom imlib gnome1 fpgtk newt uuid ldap openal mad oggvorbis a52 modplug dts openssl pcap libcurl cairo sdl
 endif
-ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_DIRS+=unzip zlib fftw x11 opengl gtk gtk2 syslog forms libpng libgd utmp bfd gdbm ncurses fpgtk tcl imlib gnome1 openssl libcurl cairo sdl
-endif
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCSUBDIR=packages/extra
 ifdef REQUIRE_UNITSDIR
@@ -1445,6 +1442,7 @@ TARGET_DIRS_LIBCURL=1
 TARGET_DIRS_CAIRO=1
 TARGET_DIRS_SDL=1
 TARGET_DIRS_UNIXUTIL=1
+TARGET_DIRS_LUA=1
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 TARGET_DIRS_UNZIP=1
@@ -1467,6 +1465,8 @@ TARGET_DIRS_LIBPNG=1
 TARGET_DIRS_OPENSSL=1
 TARGET_DIRS_PCAP=1
 TARGET_DIRS_SDL=1
+TARGET_DIRS_LUA=1
+TARGET_DIRS_LUA=1
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 TARGET_DIRS_OS2UNITS=1
@@ -2113,31 +2113,6 @@ TARGET_DIRS_LIBCURL=1
 TARGET_DIRS_CAIRO=1
 TARGET_DIRS_SDL=1
 endif
-ifeq ($(FULL_TARGET),powerpc64-darwin)
-TARGET_DIRS_UNZIP=1
-TARGET_DIRS_ZLIB=1
-TARGET_DIRS_FFTW=1
-TARGET_DIRS_X11=1
-TARGET_DIRS_OPENGL=1
-TARGET_DIRS_GTK=1
-TARGET_DIRS_GTK2=1
-TARGET_DIRS_SYSLOG=1
-TARGET_DIRS_FORMS=1
-TARGET_DIRS_LIBPNG=1
-TARGET_DIRS_LIBGD=1
-TARGET_DIRS_UTMP=1
-TARGET_DIRS_BFD=1
-TARGET_DIRS_GDBM=1
-TARGET_DIRS_NCURSES=1
-TARGET_DIRS_FPGTK=1
-TARGET_DIRS_TCL=1
-TARGET_DIRS_IMLIB=1
-TARGET_DIRS_GNOME1=1
-TARGET_DIRS_OPENSSL=1
-TARGET_DIRS_LIBCURL=1
-TARGET_DIRS_CAIRO=1
-TARGET_DIRS_SDL=1
-endif
 ifdef TARGET_DIRS_UNZIP
 unzip_all:
 	$(MAKE) -C unzip all
@@ -3803,6 +3778,51 @@ 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
+lua_debug:
+	$(MAKE) -C lua debug
+lua_smart:
+	$(MAKE) -C lua smart
+lua_release:
+	$(MAKE) -C lua release
+lua_units:
+	$(MAKE) -C lua units
+lua_examples:
+	$(MAKE) -C lua examples
+lua_shared:
+	$(MAKE) -C lua shared
+lua_install:
+	$(MAKE) -C lua install
+lua_sourceinstall:
+	$(MAKE) -C lua sourceinstall
+lua_exampleinstall:
+	$(MAKE) -C lua exampleinstall
+lua_distinstall:
+	$(MAKE) -C lua distinstall
+lua_zipinstall:
+	$(MAKE) -C lua zipinstall
+lua_zipsourceinstall:
+	$(MAKE) -C lua zipsourceinstall
+lua_zipexampleinstall:
+	$(MAKE) -C lua zipexampleinstall
+lua_zipdistinstall:
+	$(MAKE) -C lua zipdistinstall
+lua_clean:
+	$(MAKE) -C lua clean
+lua_distclean:
+	$(MAKE) -C lua distclean
+lua_cleanall:
+	$(MAKE) -C lua cleanall
+lua_info:
+	$(MAKE) -C lua info
+lua_makefiles:
+	$(MAKE) -C lua makefiles
+lua:
+	$(MAKE) -C lua all
+.PHONY: lua_all lua_debug lua_smart lua_release lua_units lua_examples lua_shared lua_install lua_sourceinstall lua_exampleinstall lua_distinstall lua_zipinstall lua_zipsourceinstall lua_zipexampleinstall lua_zipdistinstall lua_clean lua_distclean lua_cleanall lua_info lua_makefiles lua
+endif
 ifdef TARGET_DIRS_OS2UNITS
 os2units_all:
 	$(MAKE) -C os2units all

+ 3 - 2
packages/extra/Makefile.fpc

@@ -9,7 +9,8 @@ dirs_linux=unzip zlib fftw \
            imlib gnome1 fpgtk newt uuid \
            ldap openal mad oggvorbis a52 \
            modplug dts openssl pcap libcurl cairo sdl
-dirs_i386_linux=unixutil
+dirs_i386_linux=unixutil lua
+dirs_i386_win32=lua
 dirs_netbsd=unzip zlib \
             x11 opengl gtk syslog \
             forms svgalib ggi libpng libgd \
@@ -27,7 +28,7 @@ dirs_openbsd=unzip zlib \
              tcl imlib gnome1 openssl pcap libcurl cairo sdl
 # libcurl should work on Win32 too, but I haven't tested this. Skip it for now. MVC.
 dirs_win32=unzip opengl gtk gtk2 zlib tcl cdrom fpgtk fftw \
-             mad openal oggvorbis a52 libpng openssl pcap sdl
+             mad openal oggvorbis a52 libpng openssl pcap sdl lua
 dirs_win64=unzip opengl gtk gtk2 zlib tcl cdrom fpgtk fftw openssl sdl
 dirs_wince=unzip zlib tcl fftw
 dirs_os2=os2units \

+ 1905 - 0
packages/extra/lua/Makefile

@@ -0,0 +1,1905 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2007/02/27]
+#
+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-win64 x86_64-embedded arm-linux arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-embedded
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx
+LIMIT83fs = go32v2 os2 emx watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override DEFAULT_FPCDIR=../../..
+ifndef FPC
+ifdef PP
+FPC=$(PP)
+endif
+endif
+ifndef FPC
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+FPC:=$(shell $(FPCPROG) -PB)
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=$(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=bfd
+override PACKAGE_VERSION=2.3
+ifeq ($(FULL_TARGET),i386-linux)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override TARGET_UNITS+=lua lualib lauxlib
+endif
+override INSTALL_FPCPACKAGE=y
+override SHARED_BUILD=n
+override SHARED_BUILD=n
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+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 
+ifeq ($(FULL_TARGET),i386-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+REQUIRE_PACKAGES_RTL=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
+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) -Xc
+endif
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-Xr$(RLINKPATH)
+endif
+endif
+ifdef UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
+endif
+ifdef LIBDIR
+override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
+endif
+ifdef OBJDIR
+override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
+endif
+ifdef INCDIR
+override FPCOPT+=$(addprefix -Fi,$(INCDIR))
+endif
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+ifdef DEBUG
+override FPCOPT+=-gl
+override FPCOPTDEF+=DEBUG
+endif
+ifdef RELEASE
+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 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))
+EXECPPAS:=@$(PPAS)
+endif
+endif
+.PHONY: fpc_units
+ifneq ($(TARGET_UNITS),)
+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 %$(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
+	$(ZIPWRAPPER)
+endif
+	$(DEL) $(ZIPWRAPPER)
+else
+	$(ZIPCMD_CDPACK) ; $(ZIPCMD_ZIP) ; $(ZIPCMD_CDBASE)
+endif
+	$(DELTREE) $(PACKDIR)
+fpc_zipsourceinstall:
+	$(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall ZIPSUFFIX=$(ZIPSOURCESUFFIX)
+fpc_zipexampleinstall:
+ifdef HASEXAMPLES
+	$(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall ZIPSUFFIX=$(ZIPEXAMPLESUFFIX)
+endif
+fpc_zipdistinstall:
+	$(MAKE) fpc_zipinstall ZIPTARGET=distinstall
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+endif
+ifdef CLEAN_UNITS
+override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
+endif
+ifdef CLEANPPUFILES
+override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(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:
+lua$(PPUEXT) : lua.pas
+lualib$(PPUEXT) : lualib.pas lua$(PPUEXT)
+lauxlib$(PPUEXT) : lauxlib.pas lua$(PPUEXT)

+ 32 - 0
packages/extra/lua/Makefile.fpc

@@ -0,0 +1,32 @@
+#
+#   Makefile.fpc for BFD library
+#
+
+[package]
+name=bfd
+version=2.3
+
+[target]
+units=lua lualib lauxlib
+examples=
+
+[require]
+package=rtl
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../../..
+
+[shared]
+build=n
+
+[rules]
+.NOTPARALLEL:
+
+lua$(PPUEXT) : lua.pas
+
+lualib$(PPUEXT) : lualib.pas lua$(PPUEXT)
+
+lauxlib$(PPUEXT) : lauxlib.pas lua$(PPUEXT)

+ 14 - 0
packages/extra/lua/fpmake.inc

@@ -0,0 +1,14 @@
+    StartPackage('lua');
+    {$IF defined(ALLPACKAGES)}
+    Directory:='extra/lua';
+    {$ELSEIF defined(EXTRAPACKAGES)}
+    Directory:='lua';
+    {$ENDIF}
+    OS:=[linux,windows];
+    CPU:=[i386];
+    T:=Targets.AddUnit('lua');
+    T:=Targets.AddUnit('lualib');
+    T.Dependencies.Add('lua');
+    T:=Targets.AddUnit('lauxlib');
+    T.Dependencies.Add('lua');
+    EndPackage;

+ 17 - 0
packages/extra/lua/fpmake.pp

@@ -0,0 +1,17 @@
+{$mode objfpc}{$H+}
+program fpmake;
+
+uses fpmkunit;
+
+Var
+  T : TTarget;
+
+begin
+  With Installer do 
+    begin
+    { Base packages }
+    {$i fpmake.inc}
+    Run;
+    end;
+end.
+

+ 380 - 0
packages/extra/lua/lauxlib.pas

@@ -0,0 +1,380 @@
+(******************************************************************************
+ *                                                                            *
+ *  File:        lauxlib.pas                                                  *
+ *  Authors:     TeCGraf           (C headers + actual Lua libraries)         *
+ *               Lavergne Thomas   (original translation to Pascal)           *
+ *               Bram Kuijvenhoven (update to Lua 5.1.1 for FreePascal)       *
+ *  Description: Lua auxiliary library                                        *
+ *                                                                            *
+ ******************************************************************************)
+
+(*
+** $Id: lauxlib.h,v 1.59 2003/03/18 12:25:32 roberto Exp $
+** Auxiliary functions for building Lua libraries
+** See Copyright Notice in lua.h
+*)
+(*
+** Translated to pascal by Lavergne Thomas
+** Notes :
+**    - Pointers type was prefixed with 'P'
+** Bug reports :
+**    - [email protected]
+**   In french or in english
+*)
+
+{$IFDEF FPC}{$MODE OBJFPC}{$H+}{$ENDIF}
+
+unit lauxlib;
+
+interface
+
+uses
+  Lua;
+
+// functions added for Pascal
+procedure lua_pushstring(L: Plua_State; const s: string);
+
+// compatibilty macros
+function luaL_getn(L: Plua_State; n: Integer): Integer; // calls lua_objlen
+procedure luaL_setn(L: Plua_State; t, n: Integer); // does nothing!
+
+type
+  luaL_reg = record
+    name: PChar;
+    func: lua_CFunction;
+  end;
+  PluaL_reg = ^luaL_reg;
+
+procedure luaL_openlib(L: Plua_State; const libname: PChar; const lr: PluaL_reg; nup: Integer); cdecl;
+procedure luaL_register(L: Plua_State; const libname: PChar; const lr: PluaL_reg); cdecl;
+function luaL_getmetafield(L: Plua_State; obj: Integer; const e: PChar): Integer; cdecl;
+function luaL_callmeta(L: Plua_State; obj: Integer; const e: PChar): Integer; cdecl;
+function luaL_typerror(L: Plua_State; narg: Integer; const tname: PChar): Integer; cdecl;
+function luaL_argerror(L: Plua_State; numarg: Integer; const extramsg: PChar): Integer; cdecl;
+function luaL_checklstring(L: Plua_State; numArg: Integer; l_: Psize_t): PChar; cdecl;
+function luaL_optlstring(L: Plua_State; numArg: Integer; const def: PChar; l_: Psize_t): PChar; cdecl;
+function luaL_checknumber(L: Plua_State; numArg: Integer): lua_Number; cdecl;
+function luaL_optnumber(L: Plua_State; nArg: Integer; def: lua_Number): lua_Number; cdecl;
+function luaL_checkinteger(L: Plua_State; numArg: Integer): lua_Integer; cdecl;
+function luaL_optinteger(L: Plua_State; nArg: Integer; def: lua_Integer): lua_Integer; cdecl;
+
+procedure luaL_checkstack(L: Plua_State; sz: Integer; const msg: PChar); cdecl;
+procedure luaL_checktype(L: Plua_State; narg, t: Integer); cdecl;
+procedure luaL_checkany(L: Plua_State; narg: Integer); cdecl;
+
+function luaL_newmetatable(L: Plua_State; const tname: PChar): Integer; cdecl;
+function luaL_checkudata(L: Plua_State; ud: Integer; const tname: PChar): Pointer; cdecl;
+
+procedure luaL_where(L: Plua_State; lvl: Integer); cdecl;
+function luaL_error(L: Plua_State; const fmt: PChar; args: array of const): Integer; cdecl; // note: C's ... to array of const conversion is not portable to Delphi
+
+function luaL_checkoption(L: Plua_State; narg: Integer; def: PChar; lst: PPChar): Integer; cdecl;
+
+function luaL_ref(L: Plua_State; t: Integer): Integer; cdecl;
+procedure luaL_unref(L: Plua_State; t, ref: Integer); cdecl;
+
+function luaL_loadfile(L: Plua_State; const filename: PChar): Integer; cdecl;
+function luaL_loadbuffer(L: Plua_State; const buff: PChar; size: size_t; const name: PChar): Integer; cdecl;
+function luaL_loadstring(L: Plua_State; const s: PChar): Integer; cdecl;
+
+function luaL_newstate: Plua_State; cdecl;
+function lua_open: Plua_State; // compatibility; moved from unit lua to lauxlib because it needs luaL_newstate
+
+function luaL_gsub(L: Plua_State; const s, p, r: PChar): PChar; cdecl;
+function luaL_findtable(L: Plua_State; idx: Integer; const fname: PChar; szhint: Integer): PChar; cdecl;
+
+(*
+** ===============================================================
+** some useful macros
+** ===============================================================
+*)
+
+procedure luaL_argcheck(L: Plua_State; cond: Boolean; numarg: Integer; extramsg: PChar);
+function luaL_checkstring(L: Plua_State; n: Integer): PChar;
+function luaL_optstring(L: Plua_State; n: Integer; d: PChar): PChar;
+function luaL_checkint(L: Plua_State; n: Integer): Integer;
+function luaL_checklong(L: Plua_State; n: Integer): LongInt;
+function luaL_optint(L: Plua_State; n: Integer; d: Double): Integer;
+function luaL_optlong(L: Plua_State; n: Integer; d: Double): LongInt;
+
+function luaL_typename(L: Plua_State; i: Integer): PChar;
+
+function lua_dofile(L: Plua_State; const filename: PChar): Integer;
+function lua_dostring(L: Plua_State; const str: PChar): Integer;
+
+procedure lua_Lgetmetatable(L: Plua_State; tname: PChar);
+
+// not translated:
+// #define luaL_opt(L,f,n,d)	(lua_isnoneornil(L,(n)) ? (d) : f(L,(n)))
+
+
+(*
+** =======================================================
+** Generic Buffer manipulation
+** =======================================================
+*)
+
+const
+  // note: this is just arbitrary, as it related to the BUFSIZ defined in stdio.h ...
+  LUAL_BUFFERSIZE = 4096;
+
+type
+  luaL_Buffer = record
+    p: PChar;       (* current position in buffer *)
+    lvl: Integer;   (* number of strings in the stack (level) *)
+    L: Plua_State;
+    buffer: array [0..LUAL_BUFFERSIZE - 1] of Char; // warning: see note above about LUAL_BUFFERSIZE
+  end;
+  PluaL_Buffer = ^luaL_Buffer;
+
+procedure luaL_addchar(B: PluaL_Buffer; c: Char); // warning: see note above about LUAL_BUFFERSIZE
+
+(* compatibility only (alias for luaL_addchar) *)
+procedure luaL_putchar(B: PluaL_Buffer; c: Char); // warning: see note above about LUAL_BUFFERSIZE
+
+procedure luaL_addsize(B: PluaL_Buffer; n: Integer);
+
+procedure luaL_buffinit(L: Plua_State; B: PluaL_Buffer); cdecl;
+function luaL_prepbuffer(B: PluaL_Buffer): PChar; cdecl;
+procedure luaL_addlstring(B: PluaL_Buffer; const s: PChar; l: size_t); cdecl;
+procedure luaL_addstring(B: PluaL_Buffer; const s: PChar); cdecl;
+procedure luaL_addvalue(B: PluaL_Buffer); cdecl;
+procedure luaL_pushresult(B: PluaL_Buffer); cdecl;
+
+
+(* compatibility with ref system *)
+
+(* pre-defined references *)
+const
+  LUA_NOREF  = -2;
+  LUA_REFNIL = -1;
+  
+procedure lua_unref(L: Plua_State; ref: Integer);
+procedure lua_getref(L: Plua_State; ref: Integer);
+
+(*
+** Compatibility macros and functions
+*)
+
+function luaL_check_lstr(L: Plua_State; numArg: Integer; len: Psize_t): PChar;
+function luaL_opt_lstr(L: Plua_State; numArg: Integer; const def: PChar; len: Psize_t): PChar;
+function luaL_check_number(L: Plua_State; numArg: Integer): lua_Number;
+function luaL_opt_number(L: Plua_State; nArg: Integer; def: lua_Number): lua_Number;
+procedure luaL_arg_check(L: Plua_State; cond: Boolean; numarg: Integer; extramsg: PChar);
+function luaL_check_string(L: Plua_State; n: Integer): PChar;
+function luaL_opt_string(L: Plua_State; n: Integer; d: PChar): PChar;
+function luaL_check_int(L: Plua_State; n: Integer): Integer;
+function luaL_check_long(L: Plua_State; n: Integer): LongInt;
+function luaL_opt_int(L: Plua_State; n: Integer; d: Double): Integer;
+function luaL_opt_long(L: Plua_State; n: Integer; d: Double): LongInt;
+
+implementation
+
+procedure lua_pushstring(L: Plua_State; const s: string);
+begin
+  lua_pushlstring(L, PChar(s), Length(s));
+end;
+
+function luaL_getn(L: Plua_State; n: Integer): Integer;
+begin
+  Result := lua_objlen(L, n);
+end;
+
+procedure luaL_setn(L: Plua_State; t, n: Integer);
+begin
+  // does nothing as this operation is deprecated
+end;
+
+procedure luaL_openlib(L: Plua_State; const libname: PChar; const lr: PluaL_reg; nup: Integer); cdecl; external LUA_LIB_NAME;
+procedure luaL_register(L: Plua_State; const libname: PChar; const lr: PluaL_reg); cdecl; external LUA_LIB_NAME;
+function luaL_getmetafield(L: Plua_State; obj: Integer; const e: PChar): Integer; cdecl; external LUA_LIB_NAME;
+function luaL_callmeta(L: Plua_State; obj: Integer; const e: PChar): Integer; cdecl; external LUA_LIB_NAME;
+function luaL_typerror(L: Plua_State; narg: Integer; const tname: PChar): Integer; cdecl; external LUA_LIB_NAME;
+function luaL_argerror(L: Plua_State; numarg: Integer; const extramsg: PChar): Integer; cdecl; external LUA_LIB_NAME;
+function luaL_checklstring(L: Plua_State; numArg: Integer; l_: Psize_t): PChar; cdecl; external LUA_LIB_NAME;
+function luaL_optlstring(L: Plua_State; numArg: Integer; const def: PChar; l_: Psize_t): PChar; cdecl; external LUA_LIB_NAME;
+function luaL_checknumber(L: Plua_State; numArg: Integer): lua_Number; cdecl; external LUA_LIB_NAME;
+function luaL_optnumber(L: Plua_State; nArg: Integer; def: lua_Number): lua_Number; cdecl; external LUA_LIB_NAME;
+function luaL_checkinteger(L: Plua_State; numArg: Integer): lua_Integer; cdecl; external LUA_LIB_NAME;
+function luaL_optinteger(L: Plua_State; nArg: Integer; def: lua_Integer): lua_Integer; cdecl; external LUA_LIB_NAME;
+
+procedure luaL_checkstack(L: Plua_State; sz: Integer; const msg: PChar); cdecl; external LUA_LIB_NAME;
+procedure luaL_checktype(L: Plua_State; narg, t: Integer); cdecl; external LUA_LIB_NAME;
+procedure luaL_checkany(L: Plua_State; narg: Integer); cdecl; external LUA_LIB_NAME;
+
+function luaL_newmetatable(L: Plua_State; const tname: PChar): Integer; cdecl; external LUA_LIB_NAME;
+function luaL_checkudata(L: Plua_State; ud: Integer; const tname: PChar): Pointer; cdecl; external LUA_LIB_NAME;
+
+procedure luaL_where(L: Plua_State; lvl: Integer); cdecl; external LUA_LIB_NAME;
+function luaL_error(L: Plua_State; const fmt: PChar; args: array of const): Integer; cdecl; external LUA_LIB_NAME;
+
+function luaL_checkoption(L: Plua_State; narg: Integer; def: PChar; lst: PPChar): Integer; cdecl; external LUA_LIB_NAME;
+
+function luaL_ref(L: Plua_State; t: Integer): Integer; cdecl; external LUA_LIB_NAME;
+procedure luaL_unref(L: Plua_State; t, ref: Integer); cdecl; external LUA_LIB_NAME;
+
+function luaL_loadfile(L: Plua_State; const filename: PChar): Integer; cdecl; external LUA_LIB_NAME;
+function luaL_loadbuffer(L: Plua_State; const buff: PChar; size: size_t; const name: PChar): Integer; cdecl; external LUA_LIB_NAME;
+function luaL_loadstring(L: Plua_State; const s: PChar): Integer; cdecl; external LUA_LIB_NAME;
+
+function luaL_newstate: Plua_State; cdecl; external LUA_LIB_NAME;
+
+function lua_open: Plua_State;
+begin
+  Result := luaL_newstate;
+end;
+
+function luaL_gsub(L: Plua_State; const s, p, r: PChar): PChar; cdecl; external LUA_LIB_NAME;
+function luaL_findtable(L: Plua_State; idx: Integer; const fname: PChar; szhint: Integer): PChar; cdecl; external LUA_LIB_NAME;
+
+function luaL_typename(L: Plua_State; i: Integer): PChar;
+begin
+  Result := lua_typename(L, lua_type(L, i));
+end;
+
+function lua_dofile(L: Plua_State; const filename: PChar): Integer;
+begin
+  Result := luaL_loadfile(L, filename);
+  if Result = 0 then
+    Result := lua_pcall(L, 0, LUA_MULTRET, 0);
+end;
+
+function lua_dostring(L: Plua_State; const str: PChar): Integer;
+begin
+  Result := luaL_loadstring(L, str);
+  if Result = 0 then
+    Result := lua_pcall(L, 0, LUA_MULTRET, 0);
+end;
+
+procedure lua_Lgetmetatable(L: Plua_State; tname: PChar);
+begin
+  lua_getfield(L, LUA_REGISTRYINDEX, tname);
+end;
+
+procedure luaL_argcheck(L: Plua_State; cond: Boolean; numarg: Integer; extramsg: PChar);
+begin
+  if not cond then
+    luaL_argerror(L, numarg, extramsg)
+end;
+
+function luaL_checkstring(L: Plua_State; n: Integer): PChar;
+begin
+  Result := luaL_checklstring(L, n, nil)
+end;
+
+function luaL_optstring(L: Plua_State; n: Integer; d: PChar): PChar;
+begin
+  Result := luaL_optlstring(L, n, d, nil)
+end;
+
+function luaL_checkint(L: Plua_State; n: Integer): Integer;
+begin
+  Result := Integer(Trunc(luaL_checknumber(L, n)))
+end;
+
+function luaL_checklong(L: Plua_State; n: Integer): LongInt;
+begin
+  Result := LongInt(Trunc(luaL_checknumber(L, n)))
+end;
+
+function luaL_optint(L: Plua_State; n: Integer; d: Double): Integer;
+begin
+  Result := Integer(Trunc(luaL_optnumber(L, n, d)))
+end;
+
+function luaL_optlong(L: Plua_State; n: Integer; d: Double): LongInt;
+begin
+  Result := LongInt(Trunc(luaL_optnumber(L, n, d)))
+end;
+
+procedure luaL_addchar(B: PluaL_Buffer; c: Char);
+begin
+  if Cardinal(@(B^.p)) < (Cardinal(@(B^.buffer[0])) + LUAL_BUFFERSIZE) then
+    luaL_prepbuffer(B);
+  B^.p[1] := c;
+  B^.p := B^.p + 1;
+end;
+
+procedure luaL_putchar(B: PluaL_Buffer; c: Char);
+begin
+  luaL_addchar(B, c);
+end;
+
+procedure luaL_addsize(B: PluaL_Buffer; n: Integer);
+begin
+  B^.p := B^.p + n;
+end;
+
+procedure luaL_buffinit(L: Plua_State ; B: PluaL_Buffer); cdecl; external LUA_LIB_NAME;
+function luaL_prepbuffer(B: PluaL_Buffer): PChar; cdecl; external LUA_LIB_NAME;
+procedure luaL_addlstring(B: PluaL_Buffer; const s: PChar; l: size_t); cdecl; external LUA_LIB_NAME;
+procedure luaL_addstring(B: PluaL_Buffer; const s: PChar); cdecl; external LUA_LIB_NAME;
+procedure luaL_addvalue(B: PluaL_Buffer); cdecl; external LUA_LIB_NAME;
+procedure luaL_pushresult(B: PluaL_Buffer); cdecl; external LUA_LIB_NAME;
+
+procedure lua_unref(L: Plua_State; ref: Integer);
+begin
+  luaL_unref(L, LUA_REGISTRYINDEX, ref);
+end;
+
+procedure lua_getref(L: Plua_State; ref: Integer);
+begin
+  lua_rawgeti(L, LUA_REGISTRYINDEX, ref);
+end;
+
+function luaL_check_lstr(L: Plua_State; numArg: Integer; len: Psize_t): PChar;
+begin
+  Result := luaL_checklstring(L, numArg, len);
+end;
+
+function luaL_opt_lstr(L: Plua_State; numArg: Integer; const def: PChar; len: Psize_t): PChar;
+begin
+  Result := luaL_optlstring(L, numArg, def, len);
+end;
+
+function luaL_check_number(L: Plua_State; numArg: Integer): lua_Number;
+begin
+  Result := luaL_checknumber(L, numArg);
+end;
+
+function luaL_opt_number(L: Plua_State; nArg: Integer; def: lua_Number): lua_Number;
+begin
+  Result := luaL_optnumber(L, nArg, def);
+end;
+
+procedure luaL_arg_check(L: Plua_State; cond: Boolean; numarg: Integer; extramsg: PChar);
+begin
+  luaL_argcheck(L, cond, numarg, extramsg);
+end;
+
+function luaL_check_string(L: Plua_State; n: Integer): PChar;
+begin
+  Result := luaL_checkstring(L, n);
+end;
+
+function luaL_opt_string(L: Plua_State; n: Integer; d: PChar): PChar;
+begin
+  Result := luaL_optstring(L, n, d);
+end;
+
+function luaL_check_int(L: Plua_State; n: Integer): Integer;
+begin
+  Result := luaL_checkint(L, n);
+end;
+
+function luaL_check_long(L: Plua_State; n: Integer): LongInt;
+begin
+  Result := luaL_checklong(L, n);
+end;
+
+function luaL_opt_int(L: Plua_State; n: Integer; d: Double): Integer;
+begin
+  Result := luaL_optint(L, n, d);
+end;
+
+function luaL_opt_long(L: Plua_State; n: Integer; d: Double): LongInt;
+begin
+  Result := luaL_optlong(L, n, d);
+end;
+
+end.

+ 575 - 0
packages/extra/lua/lua.pas

@@ -0,0 +1,575 @@
+(******************************************************************************
+ *                                                                            *
+ *  File:        lua.pas                                                      *
+ *  Authors:     TeCGraf           (C headers + actual Lua libraries)         *
+ *               Lavergne Thomas   (original translation to Pascal)           *
+ *               Bram Kuijvenhoven (update to Lua 5.1.1 for FreePascal)       *
+ *  Description: Basic Lua library                                            *
+ *                                                                            *
+ ******************************************************************************)
+
+(*
+** $Id: lua.h,v 1.175 2003/03/18 12:31:39 roberto Exp $
+** Lua - An Extensible Extension Language
+** TeCGraf: Computer Graphics Technology Group, PUC-Rio, Brazil
+** http://www.lua.org   mailto:[email protected]
+** See Copyright Notice at the end of this file
+*)
+(*
+** Updated to Lua 5.1.1 by Bram Kuijvenhoven (bram at kuijvenhoven dot net),
+**   Hexis BV (http://www.hexis.nl), the Netherlands
+** Notes:
+**    - Only tested with FPC (FreePascal Compiler)
+**    - Using LuaBinaries styled DLL/SO names, which include version names
+**    - LUA_YIELD was suffixed by '_' for avoiding name collision
+*)
+(*
+** Translated to pascal by Lavergne Thomas
+** Notes :
+**    - Pointers type was prefixed with 'P'
+**    - lua_upvalueindex constant was transformed to function
+**    - Some compatibility function was isolated because with it you must have
+**      lualib.
+**    - LUA_VERSION was suffixed by '_' for avoiding name collision.
+** Bug reports :
+**    - [email protected]
+**   In french or in english
+*)
+
+{$IFDEF FPC}{$MODE OBJFPC}{$H+}{$ENDIF}
+
+unit lua;
+
+interface
+
+const
+{$IFDEF UNIX}
+  LUA_NAME = 'liblua5.1.so';
+  LUA_LIB_NAME = 'liblua5.1.so';
+{$ELSE}
+  LUA_NAME = 'lua5.1.dll';
+  LUA_LIB_NAME = 'lua5.1.dll';
+{$ENDIF}
+
+type
+  size_t = Cardinal;
+  Psize_t = ^size_t;
+
+const
+  LUA_VERSION = 'Lua 5.1';
+  LUA_RELEASE = 'Lua 5.1.1';
+  LUA_VERSION_NUM = 501;
+  LUA_COPYRIGHT = 'Copyright (C) 1994-2006 Lua.org, PUC-Rio';
+  LUA_AUTHORS = 'R. Ierusalimschy, L. H. de Figueiredo & W. Celes';
+
+(* option for multiple returns in `lua_pcall' and `lua_call' *)
+  LUA_MULTRET = -1;
+
+(*
+** pseudo-indices
+*)
+  LUA_REGISTRYINDEX = -10000;
+  LUA_ENVIRONINDEX  = -10001;
+  LUA_GLOBALSINDEX  = -10002;
+
+function lua_upvalueindex(I: Integer): Integer;
+
+const
+(* thread status; 0 is OK *)
+  LUA_YIELD_    = 1;
+  LUA_ERRRUN    = 2;
+  LUA_ERRSYNTAX = 3;
+  LUA_ERRMEM    = 4;
+  LUA_ERRERR    = 5;
+
+type
+  Plua_State = Pointer;
+
+  lua_CFunction = function(L: Plua_State): Integer; cdecl;
+
+(*
+** functions that read/write blocks when loading/dumping Lua chunks
+*)
+type
+  lua_Reader = function(L: Plua_State; ud: Pointer; sz: Psize_t): PChar; cdecl;
+  lua_Writer = function(L: Plua_State; const p: Pointer; sz: size_t; ud: Pointer): Integer; cdecl;
+
+(*
+** prototype for memory-allocation functions
+*)
+  lua_Alloc = procedure(ud, ptr: Pointer; osize, nsize: size_t); cdecl;
+
+(*
+** basic types
+*)
+const
+  LUA_TNONE          = -1;
+
+  LUA_TNIL           = 0;
+  LUA_TBOOLEAN       = 1;
+  LUA_TLIGHTUSERDATA = 2;
+  LUA_TNUMBER        = 3;
+  LUA_TSTRING        = 4;
+  LUA_TTABLE         = 5;
+  LUA_TFUNCTION      = 6;
+  LUA_TUSERDATA      = 7;
+  LUA_TTHREAD        = 8;
+
+(* minimum Lua stack available to a C function *)
+  LUA_MINSTACK = 20;
+
+type
+(* Type of Numbers in Lua *)
+  lua_Number = Double;
+  lua_Integer = PtrInt;
+
+(*
+** state manipulation
+*)
+function lua_newstate(f: lua_Alloc; ud: Pointer): Plua_state; cdecl;
+procedure lua_close(L: Plua_State); cdecl;
+function lua_newthread(L: Plua_State): Plua_State; cdecl;
+
+function lua_atpanic(L: Plua_State; panicf: lua_CFunction): lua_CFunction; cdecl;
+
+(*
+** basic stack manipulation
+*)
+function lua_gettop(L: Plua_State): Integer; cdecl;
+procedure lua_settop(L: Plua_State; idx: Integer); cdecl;
+procedure lua_pushvalue(L: Plua_State; Idx: Integer); cdecl;
+procedure lua_remove(L: Plua_State; idx: Integer); cdecl;
+procedure lua_insert(L: Plua_State; idx: Integer); cdecl;
+procedure lua_replace(L: Plua_State; idx: Integer); cdecl;
+function lua_checkstack(L: Plua_State; sz: Integer): LongBool; cdecl;
+
+procedure lua_xmove(from, to_: Plua_State; n: Integer); cdecl;
+
+(*
+** access functions (stack -> C)
+*)
+function lua_isnumber(L: Plua_State; idx: Integer): LongBool; cdecl;
+function lua_isstring(L: Plua_State; idx: Integer): LongBool; cdecl;
+function lua_iscfunction(L: Plua_State; idx: Integer): LongBool; cdecl;
+function lua_isuserdata(L: Plua_State; idx: Integer): LongBool; cdecl;
+function lua_type(L: Plua_State; idx: Integer): Integer; cdecl;
+function lua_typename(L: Plua_State; tp: Integer): PChar; cdecl;
+
+function lua_equal(L: Plua_State; idx1, idx2: Integer): LongBool; cdecl;
+function lua_rawequal(L: Plua_State; idx1, idx2: Integer): LongBool; cdecl;
+function lua_lessthan(L: Plua_State; idx1, idx2: Integer): LongBool; cdecl;
+
+function lua_tonumber(L: Plua_State; idx: Integer): lua_Number; cdecl;
+function lua_tointeger(L: Plua_State; idx: Integer): lua_Integer; cdecl;
+function lua_toboolean(L: Plua_State; idx: Integer): LongBool; cdecl;
+function lua_tolstring(L: Plua_State; idx: Integer; len: Psize_t): PChar; cdecl;
+function lua_objlen(L: Plua_State; idx: Integer): size_t; cdecl;
+function lua_tocfunction(L: Plua_State; idx: Integer): lua_CFunction; cdecl;
+function lua_touserdata(L: Plua_State; idx: Integer): Pointer; cdecl;
+function lua_tothread(L: Plua_State; idx: Integer): Plua_State; cdecl;
+function lua_topointer(L: Plua_State; idx: Integer): Pointer; cdecl;
+
+(*
+** push functions (C -> stack)
+*)
+procedure lua_pushnil(L: Plua_State); cdecl;
+procedure lua_pushnumber(L: Plua_State; n: lua_Number); cdecl;
+procedure lua_pushinteger(L: Plua_State; n: lua_Integer); cdecl;
+procedure lua_pushlstring(L: Plua_State; const s: PChar; l_: size_t); cdecl;
+procedure lua_pushstring(L: Plua_State; const s: PChar); cdecl;
+function lua_pushvfstring(L: Plua_State; const fmt: PChar; argp: Pointer): PChar; cdecl;
+function lua_pushfstring(L: Plua_State; const fmt: PChar): PChar; cdecl; varargs;
+procedure lua_pushcclosure(L: Plua_State; fn: lua_CFunction; n: Integer); cdecl;
+procedure lua_pushboolean(L: Plua_State; b: LongBool); cdecl;
+procedure lua_pushlightuserdata(L: Plua_State; p: Pointer); cdecl;
+procedure lua_pushthread(L: Plua_State); cdecl;
+
+(*
+** get functions (Lua -> stack)
+*)
+procedure lua_gettable(L: Plua_State; idx: Integer); cdecl;
+procedure lua_getfield(L: Plua_state; idx: Integer; k: PChar); cdecl;
+procedure lua_rawget(L: Plua_State; idx: Integer); cdecl;
+procedure lua_rawgeti(L: Plua_State; idx, n: Integer); cdecl;
+procedure lua_createtable(L: Plua_State; narr, nrec: Integer); cdecl;
+function lua_newuserdata(L: Plua_State; sz: size_t): Pointer; cdecl;
+function lua_getmetatable(L: Plua_State; objindex: Integer): Integer; cdecl;
+procedure lua_getfenv(L: Plua_State; idx: Integer); cdecl;
+
+(*
+** set functions (stack -> Lua)
+*)
+procedure lua_settable(L: Plua_State; idx: Integer); cdecl;
+procedure lua_setfield(L: Plua_State; idx: Integer; k: PChar); cdecl;
+procedure lua_rawset(L: Plua_State; idx: Integer); cdecl;
+procedure lua_rawseti(L: Plua_State; idx, n: Integer); cdecl;
+function lua_setmetatable(L: Plua_State; objindex: Integer): Integer; cdecl;
+function lua_setfenv(L: Plua_State; idx: Integer): Integer; cdecl;
+
+(*
+** `load' and `call' functions (load and run Lua code)
+*)
+procedure lua_call(L: Plua_State; nargs, nresults: Integer); cdecl;
+function lua_pcall(L: Plua_State; nargs, nresults, errf: Integer): Integer; cdecl;
+function lua_cpcall(L: Plua_State; func: lua_CFunction; ud: Pointer): Integer; cdecl;
+function lua_load(L: Plua_State; reader: lua_Reader; dt: Pointer; const chunkname: PChar): Integer; cdecl;
+
+function lua_dump(L: Plua_State; writer: lua_Writer; data: Pointer): Integer; cdecl;
+
+(*
+** coroutine functions
+*)
+function lua_yield(L: Plua_State; nresults: Integer): Integer; cdecl;
+function lua_resume(L: Plua_State; narg: Integer): Integer; cdecl;
+function lua_status(L: Plua_State): Integer; cdecl;
+
+(*
+** Garbage-collection functions and options
+*)
+const
+  LUA_GCSTOP       = 0;
+  LUA_GCRESTART    = 1;
+  LUA_GCCOLLECT    = 2;
+  LUA_GCCOUNT      = 3;
+  LUA_GCCOUNTB     = 4;
+  LUA_GCSTEP       = 5;
+  LUA_GCSETPAUSE   = 6;
+  LUA_GCSETSTEPMUL = 7;
+
+function lua_gc(L: Plua_State; what, data: Integer): Integer; cdecl;
+
+(*
+** miscellaneous functions
+*)
+function lua_error(L: Plua_State): Integer; cdecl;
+
+function lua_next(L: Plua_State; idx: Integer): Integer; cdecl;
+
+procedure lua_concat(L: Plua_State; n: Integer); cdecl;
+
+function lua_getallocf(L: Plua_State; ud: PPointer): lua_Alloc; cdecl;
+procedure lua_setallocf(L: Plua_State; f: lua_Alloc; ud: Pointer); cdecl;
+
+(*
+** ===============================================================
+** some useful macros
+** ===============================================================
+*)
+
+procedure lua_pop(L: Plua_State; n: Integer);
+
+procedure lua_newtable(L: Plua_state);
+
+procedure lua_register(L: Plua_State; const n: PChar; f: lua_CFunction);
+procedure lua_pushcfunction(L: Plua_State; f: lua_CFunction);
+
+function lua_strlen(L: Plua_state; i: Integer): size_t;
+
+function lua_isfunction(L: Plua_State; n: Integer): Boolean;
+function lua_istable(L: Plua_State; n: Integer): Boolean;
+function lua_islightuserdata(L: Plua_State; n: Integer): Boolean;
+function lua_isnil(L: Plua_State; n: Integer): Boolean;
+function lua_isboolean(L: Plua_State; n: Integer): Boolean;
+function lua_isthread(L: Plua_State; n: Integer): Boolean;
+function lua_isnone(L: Plua_State; n: Integer): Boolean;
+function lua_isnoneornil(L: Plua_State; n: Integer): Boolean;
+
+procedure lua_pushliteral(L: Plua_State; s: PChar);
+
+procedure lua_setglobal(L: Plua_State; const s: PChar);
+procedure lua_getglobal(L: Plua_State; const s: PChar);
+
+function lua_tostring(L: Plua_State; i: Integer): PChar;
+
+(*
+** compatibility macros and functions
+*)
+
+procedure lua_getregistry(L: Plua_State);
+
+function lua_getgccount(L: Plua_State): Integer;
+
+type
+  lua_Chunkreader = lua_Reader;
+  lua_Chunkwriter = lua_Writer;
+
+(*
+** {======================================================================
+** Debug API
+** =======================================================================
+*)
+
+const
+  LUA_HOOKCALL    = 0;
+  LUA_HOOKRET     = 1;
+  LUA_HOOKLINE    = 2;
+  LUA_HOOKCOUNT   = 3;
+  LUA_HOOKTAILRET = 4;
+
+const
+  LUA_MASKCALL  = 1 shl Ord(LUA_HOOKCALL);
+  LUA_MASKRET   = 1 shl Ord(LUA_HOOKRET);
+  LUA_MASKLINE  = 1 shl Ord(LUA_HOOKLINE);
+  LUA_MASKCOUNT = 1 shl Ord(LUA_HOOKCOUNT);
+
+const
+  LUA_IDSIZE = 60;
+
+type
+  lua_Debug = record           (* activation record *)
+    event: Integer;
+    name: PChar;               (* (n) *)
+    namewhat: PChar;           (* (n) `global', `local', `field', `method' *)
+    what: PChar;               (* (S) `Lua', `C', `main', `tail'*)
+    source: PChar;             (* (S) *)
+    currentline: Integer;      (* (l) *)
+    nups: Integer;             (* (u) number of upvalues *)
+    linedefined: Integer;      (* (S) *)
+    lastlinedefined: Integer;  (* (S) *)
+    short_src: array[0..LUA_IDSIZE - 1] of Char; (* (S) *)
+    (* private part *)
+    i_ci: Integer;              (* active function *)
+  end;
+  Plua_Debug = ^lua_Debug;
+
+  lua_Hook = procedure(L: Plua_State; ar: Plua_Debug); cdecl;
+
+function lua_getstack(L: Plua_State; level: Integer; ar: Plua_Debug): Integer; cdecl;
+function lua_getinfo(L: Plua_State; const what: PChar; ar: Plua_Debug): Integer; cdecl;
+function lua_getlocal(L: Plua_State; const ar: Plua_Debug; n: Integer): PChar; cdecl;
+function lua_setlocal(L: Plua_State; const ar: Plua_Debug; n: Integer): PChar; cdecl;
+function lua_getupvalue(L: Plua_State; funcindex: Integer; n: Integer): PChar; cdecl;
+function lua_setupvalue(L: Plua_State; funcindex: Integer; n: Integer): PChar; cdecl;
+
+function lua_sethook(L: Plua_State; func: lua_Hook; mask: Integer; count: Integer): Integer; cdecl;
+//function lua_gethook(L: Plua_State): lua_Hook; cdecl;
+function lua_gethookmask(L: Plua_State): Integer; cdecl;
+function lua_gethookcount(L: Plua_State): Integer; cdecl;
+
+implementation
+
+function lua_upvalueindex(I: Integer): Integer;
+begin
+  Result := LUA_GLOBALSINDEX - i;
+end;
+
+function lua_newstate(f: lua_Alloc; ud: Pointer): Plua_State; cdecl; external LUA_NAME;
+procedure lua_close(L: Plua_State); cdecl; external LUA_NAME;
+function lua_newthread(L: Plua_State): Plua_State; cdecl; external LUA_NAME;
+
+function lua_atpanic(L: Plua_State; panicf: lua_CFunction): lua_CFunction; cdecl; external LUA_NAME;
+
+function lua_gettop(L: Plua_State): Integer; cdecl; external LUA_NAME;
+procedure lua_settop(L: Plua_State; idx: Integer); cdecl; external LUA_NAME;
+procedure lua_pushvalue(L: Plua_State; Idx: Integer); cdecl; external LUA_NAME;
+procedure lua_remove(L: Plua_State; idx: Integer); cdecl; external LUA_NAME;
+procedure lua_insert(L: Plua_State; idx: Integer); cdecl; external LUA_NAME;
+procedure lua_replace(L: Plua_State; idx: Integer); cdecl; external LUA_NAME;
+function lua_checkstack(L: Plua_State; sz: Integer): LongBool; cdecl; external LUA_NAME;
+procedure lua_xmove(from, to_: Plua_State; n: Integer); cdecl; external LUA_NAME;
+
+function lua_isnumber(L: Plua_State; idx: Integer): LongBool; cdecl; external LUA_NAME;
+function lua_isstring(L: Plua_State; idx: Integer): LongBool; cdecl; external LUA_NAME;
+function lua_iscfunction(L: Plua_State; idx: Integer): LongBool; cdecl; external LUA_NAME;
+function lua_isuserdata(L: Plua_State; idx: Integer): LongBool; cdecl; external LUA_NAME;
+function lua_type(L: Plua_State; idx: Integer): Integer; cdecl; external LUA_NAME;
+function lua_typename(L: Plua_State; tp: Integer): PChar; cdecl; external LUA_NAME;
+
+function lua_equal(L: Plua_State; idx1, idx2: Integer): LongBool; cdecl; external LUA_NAME;
+function lua_rawequal(L: Plua_State; idx1, idx2: Integer): LongBool; cdecl; external LUA_NAME;
+function lua_lessthan(L: Plua_State; idx1, idx2: Integer): LongBool; cdecl; external LUA_NAME;
+
+function lua_tonumber(L: Plua_State; idx: Integer): lua_Number; cdecl; external LUA_NAME;
+function lua_tointeger(L: Plua_State; idx: Integer): lua_Integer; cdecl; external LUA_NAME;
+function lua_toboolean(L: Plua_State; idx: Integer): LongBool; cdecl; external LUA_NAME;
+function lua_tolstring(L: Plua_State; idx: Integer; len: Psize_t): PChar; cdecl; external LUA_NAME;
+function lua_objlen(L: Plua_State; idx: Integer): size_t; cdecl; external LUA_NAME;
+function lua_tocfunction(L: Plua_State; idx: Integer): lua_CFunction; cdecl; external LUA_NAME;
+function lua_touserdata(L: Plua_State; idx: Integer): Pointer; cdecl; external LUA_NAME;
+function lua_tothread(L: Plua_State; idx: Integer): Plua_State; cdecl; external LUA_NAME;
+function lua_topointer(L: Plua_State; idx: Integer): Pointer; cdecl; external LUA_NAME;
+
+procedure lua_pushnil(L: Plua_State); cdecl; external LUA_NAME;
+procedure lua_pushnumber(L: Plua_State; n: lua_Number); cdecl; external LUA_NAME;
+procedure lua_pushinteger(L: Plua_State; n: lua_Integer); cdecl; external LUA_NAME;
+procedure lua_pushlstring(L: Plua_State; const s: PChar; l_: size_t); cdecl; external LUA_NAME;
+procedure lua_pushstring(L: Plua_State; const s: PChar); cdecl; external LUA_NAME;
+function lua_pushvfstring(L: Plua_State; const fmt: PChar; argp: Pointer): PChar; cdecl; external LUA_NAME;
+function lua_pushfstring(L: Plua_State; const fmt: PChar): PChar; cdecl; varargs; external LUA_NAME;
+procedure lua_pushcclosure(L: Plua_State; fn: lua_CFunction; n: Integer); cdecl; external LUA_NAME;
+procedure lua_pushboolean(L: Plua_State; b: LongBool); cdecl; external LUA_NAME;
+procedure lua_pushlightuserdata(L: Plua_State; p: Pointer); cdecl; external LUA_NAME;
+procedure lua_pushthread(L: Plua_State); cdecl; external LUA_NAME;
+
+procedure lua_gettable(L: Plua_State; idx: Integer); cdecl; external LUA_NAME;
+procedure lua_getfield(L: Plua_state; idx: Integer; k: PChar); cdecl; external LUA_NAME;
+procedure lua_rawget(L: Plua_State; idx: Integer); cdecl; external LUA_NAME;
+procedure lua_rawgeti(L: Plua_State; idx, n: Integer); cdecl; external LUA_NAME;
+procedure lua_createtable(L: Plua_State; narr, nrec: Integer); cdecl; external LUA_NAME;
+function lua_newuserdata(L: Plua_State; sz: size_t): Pointer; cdecl; external LUA_NAME;
+function lua_getmetatable(L: Plua_State; objindex: Integer): Integer; cdecl; external LUA_NAME;
+procedure lua_getfenv(L: Plua_State; idx: Integer); cdecl; external LUA_NAME;
+
+procedure lua_settable(L: Plua_State; idx: Integer); cdecl; external LUA_NAME;
+procedure lua_setfield(L: Plua_State; idx: Integer; k: PChar); cdecl; external LUA_NAME;
+procedure lua_rawset(L: Plua_State; idx: Integer); cdecl; external LUA_NAME;
+procedure lua_rawseti(L: Plua_State; idx, n: Integer); cdecl; external LUA_NAME;
+function lua_setmetatable(L: Plua_State; objindex: Integer): Integer; cdecl; external LUA_NAME;
+function lua_setfenv(L: Plua_State; idx: Integer): Integer; cdecl; external LUA_NAME;
+
+procedure lua_call(L: Plua_State; nargs, nresults: Integer); cdecl; external LUA_NAME;
+function lua_pcall(L: Plua_State; nargs, nresults, errf: Integer): Integer; cdecl; external LUA_NAME;
+function lua_cpcall(L: Plua_State; func: lua_CFunction; ud: Pointer): Integer; cdecl; external LUA_NAME;
+function lua_load(L: Plua_State; reader: lua_Reader; dt: Pointer; const chunkname: PChar): Integer; cdecl; external LUA_NAME;
+
+function lua_dump(L: Plua_State; writer: lua_Writer; data: Pointer): Integer; cdecl; external LUA_NAME;
+
+function lua_yield(L: Plua_State; nresults: Integer): Integer; cdecl; external LUA_NAME;
+function lua_resume(L: Plua_State; narg: Integer): Integer; cdecl; external LUA_NAME;
+function lua_status(L: Plua_State): Integer; cdecl; external LUA_NAME;
+
+function lua_gc(L: Plua_State; what, data: Integer): Integer; cdecl; external LUA_NAME;
+
+function lua_error(L: Plua_State): Integer; cdecl; external LUA_NAME;
+function lua_next(L: Plua_State; idx: Integer): Integer; cdecl; external LUA_NAME;
+procedure lua_concat(L: Plua_State; n: Integer); cdecl; external LUA_NAME;
+
+function lua_getallocf(L: Plua_State; ud: PPointer): lua_Alloc; cdecl; external LUA_NAME;
+procedure lua_setallocf(L: Plua_State; f: lua_Alloc; ud: Pointer); cdecl; external LUA_NAME;
+
+procedure lua_pop(L: Plua_State; n: Integer);
+begin
+  lua_settop(L, -n - 1);
+end;
+
+procedure lua_newtable(L: Plua_State);
+begin
+  lua_createtable(L, 0, 0);
+end;
+
+procedure lua_register(L: Plua_State; const n: PChar; f: lua_CFunction);
+begin
+  lua_pushcfunction(L, f);
+  lua_setglobal(L, n);
+end;
+
+procedure lua_pushcfunction(L: Plua_State; f: lua_CFunction);
+begin
+  lua_pushcclosure(L, f, 0);
+end;
+
+function lua_strlen(L: Plua_State; i: Integer): size_t;
+begin
+  Result := lua_objlen(L, i);
+end;
+
+function lua_isfunction(L: Plua_State; n: Integer): Boolean;
+begin
+  Result := lua_type(L, n) = LUA_TFUNCTION;
+end;
+
+function lua_istable(L: Plua_State; n: Integer): Boolean;
+begin
+  Result := lua_type(L, n) = LUA_TTABLE;
+end;
+
+function lua_islightuserdata(L: Plua_State; n: Integer): Boolean;
+begin
+  Result := lua_type(L, n) = LUA_TLIGHTUSERDATA;
+end;
+
+function lua_isnil(L: Plua_State; n: Integer): Boolean;
+begin
+  Result := lua_type(L, n) = LUA_TNIL;
+end;
+
+function lua_isboolean(L: Plua_State; n: Integer): Boolean;
+begin
+  Result := lua_type(L, n) = LUA_TBOOLEAN;
+end;
+
+function lua_isthread(L: Plua_State; n: Integer): Boolean;
+begin
+  Result := lua_type(L, n) = LUA_TTHREAD;
+end;
+
+function lua_isnone(L: Plua_State; n: Integer): Boolean;
+begin
+  Result := lua_type(L, n) = LUA_TNONE;
+end;
+
+function lua_isnoneornil(L: Plua_State; n: Integer): Boolean;
+begin
+  Result := lua_type(L, n) <= 0;
+end;
+
+procedure lua_pushliteral(L: Plua_State; s: PChar);
+begin
+  lua_pushlstring(L, s, Length(s));
+end;
+
+procedure lua_setglobal(L: Plua_State; const s: PChar);
+begin
+  lua_setfield(L, LUA_GLOBALSINDEX, s);
+end;
+
+procedure lua_getglobal(L: Plua_State; const s: PChar);
+begin
+  lua_getfield(L, LUA_GLOBALSINDEX, s);
+end;
+
+function lua_tostring(L: Plua_State; i: Integer): PChar;
+begin
+  Result := lua_tolstring(L, i, nil);
+end;
+
+
+procedure lua_getregistry(L: Plua_State);
+begin
+  lua_pushvalue(L, LUA_REGISTRYINDEX);
+end;
+
+function lua_getgccount(L: Plua_State): Integer;
+begin
+  Result := lua_gc(L, LUA_GCCOUNT, 0);
+end;
+
+(*
+** {======================================================================
+** Debug API
+** =======================================================================
+*)
+
+function lua_getstack(L: Plua_State; level: Integer; ar: Plua_Debug): Integer; cdecl; external LUA_NAME;
+function lua_getinfo(L: Plua_State; const what: PChar; ar: Plua_Debug): Integer; cdecl; external LUA_NAME;
+function lua_getlocal(L: Plua_State; const ar: Plua_Debug; n: Integer): PChar; cdecl; external LUA_NAME;
+function lua_setlocal(L: Plua_State; const ar: Plua_Debug; n: Integer): PChar; cdecl; external LUA_NAME;
+function lua_getupvalue(L: Plua_State; funcindex: Integer; n: Integer): PChar; cdecl; external LUA_NAME;
+function lua_setupvalue(L: Plua_State; funcindex: Integer; n: Integer): PChar; cdecl; external LUA_NAME;
+function lua_sethook(L: Plua_State; func: lua_Hook; mask: Integer; count: Integer): Integer; cdecl; external LUA_NAME;
+//function lua_gethook(L: Plua_State): lua_Hook; cdecl; external LUA_NAME;
+function lua_gethookmask(L: Plua_State): Integer; cdecl; external LUA_NAME;
+function lua_gethookcount(L: Plua_State): Integer; cdecl; external LUA_NAME;
+(******************************************************************************
+* Copyright (C) 1994-2003 Tecgraf, PUC-Rio.  All rights reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining
+* a copy of this software and associated documentation files (the
+* "Software"), to deal in the Software without restriction, including
+* without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to
+* permit persons to whom the Software is furnished to do so, subject to
+* the following conditions:
+*
+* The above copyright notice and this permission notice shall be
+* included in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+******************************************************************************)
+end.

+ 104 - 0
packages/extra/lua/lualib.pas

@@ -0,0 +1,104 @@
+(******************************************************************************
+ *                                                                            *
+ *  File:        lualib.pas                                                   *
+ *  Authors:     TeCGraf           (C headers + actual Lua libraries)         *
+ *               Lavergne Thomas   (original translation to Pascal)           *
+ *               Bram Kuijvenhoven (update to Lua 5.1.1 for FreePascal)       *
+ *  Description: Standard Lua libraries                                       *
+ *                                                                            *
+ ******************************************************************************)
+ 
+(*
+** $Id: lualib.h,v 1.28 2003/03/18 12:24:26 roberto Exp $
+** Lua standard libraries
+** See Copyright Notice in lua.h
+*)
+(*
+** Translated to pascal by Lavergne Thomas
+** Bug reports :
+**    - [email protected]
+**   In french or in english
+*)
+
+{$IFDEF FPC}{$MODE OBJFPC}{$H+}{$ENDIF}
+
+unit lualib;
+
+interface
+
+uses
+  Lua;
+
+const
+  LUA_COLIBNAME = 'coroutine';
+  LUA_TABLIBNAME = 'table';
+  LUA_IOLIBNAME = 'io';
+  LUA_OSLIBNAME = 'os';
+  LUA_STRLINAME = 'string';
+  LUA_MATHLIBNAME = 'math';
+  LUA_DBLIBNAME = 'debug';
+  LUA_LOADLIBNAME = 'package';
+
+function luaopen_base(L: Plua_State): LongBool; cdecl;
+function luaopen_table(L: Plua_State): LongBool; cdecl;
+function luaopen_io(L: Plua_State): LongBool; cdecl;
+function luaopen_string(L: Plua_State): LongBool; cdecl;
+function luaopen_math(L: Plua_State): LongBool; cdecl;
+function luaopen_debug(L: Plua_State): LongBool; cdecl;
+function luaopen_package(L: Plua_State): LongBool; cdecl;
+
+(* open all previous libraries *)
+procedure luaL_openlibs(L: Plua_State); cdecl;
+
+(* compatibility code *)
+
+function lua_baselibopen(L: Plua_State): LongBool;
+function lua_tablibopen(L: Plua_State): LongBool;
+function lua_iolibopen(L: Plua_State): LongBool;
+function lua_strlibopen(L: Plua_State): LongBool;
+function lua_mathlibopen(L: Plua_State): LongBool;
+function lua_dblibopen(L: Plua_State): LongBool;
+
+implementation
+
+function luaopen_base(L: Plua_State): LongBool; cdecl; external LUA_LIB_NAME;
+function luaopen_table(L: Plua_State): LongBool; cdecl; external LUA_LIB_NAME;
+function luaopen_io(L: Plua_State): LongBool; cdecl; external LUA_LIB_NAME;
+function luaopen_string(L: Plua_State): LongBool; cdecl; external LUA_LIB_NAME;
+function luaopen_math(L: Plua_State): LongBool; cdecl; external LUA_LIB_NAME;
+function luaopen_debug(L: Plua_State): LongBool; cdecl; external LUA_LIB_NAME;
+function luaopen_package(L: Plua_State): LongBool; cdecl; external LUA_LIB_NAME;
+
+procedure luaL_openlibs(L: Plua_State); cdecl; external LUA_LIB_NAME;
+
+function lua_baselibopen(L: Plua_State): LongBool;
+begin
+  Result := luaopen_base(L);
+end;
+
+function lua_tablibopen(L: Plua_State): LongBool;
+begin
+  Result := luaopen_table(L);
+end;
+
+function lua_iolibopen(L: Plua_State): LongBool;
+begin
+  Result := luaopen_io(L);
+end;
+
+function lua_strlibopen(L: Plua_State): LongBool;
+begin
+  Result := luaopen_string(L);
+end;
+
+function lua_mathlibopen(L: Plua_State): LongBool;
+begin
+  Result := luaopen_math(L);
+end;
+
+function lua_dblibopen(L: Plua_State): LongBool;
+begin
+  Result := luaopen_debug(L);
+end;
+
+end.