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

* Initial version of libvlc units

git-svn-id: trunk@22943 -
michael 12 жил өмнө
parent
commit
9d7ba28cf7

+ 9 - 0
.gitattributes

@@ -5203,6 +5203,15 @@ packages/libsee/examples/tlibsee.pp svneol=native#text/plain
 packages/libsee/fpmake.pp svneol=native#text/plain
 packages/libsee/fpmake.pp svneol=native#text/plain
 packages/libsee/src/libsee.pas svneol=native#text/plain
 packages/libsee/src/libsee.pas svneol=native#text/plain
 packages/libsee/src/libseewrap.c svneol=native#text/plain
 packages/libsee/src/libseewrap.c svneol=native#text/plain
+packages/libvlc/Makefile svneol=native#text/plain
+packages/libvlc/Makefile.fpc svneol=native#text/plain
+packages/libvlc/example/testvlc.lpi svneol=native#text/plain
+packages/libvlc/example/testvlc.pp svneol=native#text/plain
+packages/libvlc/example/tvlc.lpi svneol=native#text/plain
+packages/libvlc/example/tvlc.pp svneol=native#text/plain
+packages/libvlc/fpmake.pp svneol=native#text/plain
+packages/libvlc/src/libvlc.pp svneol=native#text/plain
+packages/libvlc/src/vlc.pp svneol=native#text/plain
 packages/libxml/Makefile svneol=native#text/plain
 packages/libxml/Makefile svneol=native#text/plain
 packages/libxml/Makefile.fpc svneol=native#text/plain
 packages/libxml/Makefile.fpc svneol=native#text/plain
 packages/libxml/Makefile.fpc.fpcmake svneol=native#text/plain
 packages/libxml/Makefile.fpc.fpcmake svneol=native#text/plain

+ 2111 - 0
packages/libvlc/Makefile

@@ -0,0 +1,2111 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2011/11/25]
+#
+default: all
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-solaris x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded mipsel-linux
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx haiku
+LIMIT83fs = go32v2 os2 emx watcom
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+ifndef RUNBATCH
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override DEFAULT_FPCDIR=../..
+ifndef FPC
+ifdef PP
+FPC=$(PP)
+endif
+endif
+ifndef FPC
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+ifneq ($(CPU_TARGET),)
+FPC:=$(shell $(FPCPROG) -P$(CPU_TARGET) -PB)
+else
+FPC:=$(shell $(FPCPROG) -PB)
+endif
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+else
+ifeq ($(strip $(wildcard $(FPC))),)
+FPC:=$(firstword $(FPCPROG))
+endif
+endif
+else
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+FOUNDFPC:=$(strip $(wildcard $(FPC)))
+ifeq ($(FOUNDFPC),)
+FOUNDFPC=$(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))
+ifeq ($(FOUNDFPC),)
+$(error Compiler $(FPC) not found)
+endif
+endif
+ifndef FPC_COMPILERINFO
+FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
+endif
+ifndef FPC_VERSION
+FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
+endif
+export FPC FPC_VERSION FPC_COMPILERINFO
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifndef CPU_TARGET
+ifdef CPU_TARGET_DEFAULT
+CPU_TARGET=$(CPU_TARGET_DEFAULT)
+endif
+endif
+ifndef OS_TARGET
+ifdef OS_TARGET_DEFAULT
+OS_TARGET=$(OS_TARGET_DEFAULT)
+endif
+endif
+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)
+ifeq ($(CPU_TARGET),armeb)
+ARCH=arm
+override FPCOPT+=-Cb
+else
+ifeq ($(CPU_TARGET),armel)
+ARCH=arm
+override FPCOPT+=-CaEABI
+else
+ARCH=$(CPU_TARGET)
+endif
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+ifeq ($(SUBARCH),)
+$(error When compiling for arm-embedded, a sub-architecture (e.g. SUBARCH=armv4t or SUBARCH=armv7m) must be defined)
+endif
+override FPCOPT+=-Cp$(SUBARCH)
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+SOURCESUFFIX=$(OS_SOURCE)
+else
+ifneq ($(findstring $(OS_TARGET),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+endif
+SOURCESUFFIX=$(FULL_SOURCE)
+endif
+ifneq ($(FULL_TARGET),$(FULL_SOURCE))
+CROSSCOMPILE=1
+endif
+ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
+ifeq ($(findstring $(FULL_TARGET),$(MAKEFILETARGETS)),)
+$(error The Makefile doesn't support target $(FULL_TARGET), please run fpcmake first)
+endif
+endif
+ifneq ($(findstring $(OS_TARGET),$(BSDs)),)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),linux)
+linuxHier=1
+endif
+export OS_TARGET OS_SOURCE ARCH CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+ifdef FPCDIR
+override FPCDIR:=$(subst \,/,$(FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl 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
+ifneq ($(findstring $(OS_TARGET),darwin iphonesim),)
+ifeq ($(OS_SOURCE),darwin)
+DARWIN2DARWIN=1
+endif
+endif
+ifndef BINUTILSPREFIX
+ifndef CROSSBINDIR
+ifdef CROSSCOMPILE
+ifndef DARWIN2DARWIN
+BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)-
+endif
+endif
+endif
+endif
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX))
+ifeq ($(UNITSDIR),)
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
+ifndef FPCFPMAKE
+ifdef CROSSCOMPILE
+ifeq ($(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR)))),)
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+FPCFPMAKE:=$(shell $(FPCPROG) -PB)
+ifeq ($(strip $(wildcard $(FPCFPMAKE))),)
+FPCFPMAKE:=$(firstword $(FPCPROG))
+endif
+else
+override FPCFPMAKE=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+else
+FPCFPMAKE=$(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR))))
+FPMAKE_SKIP_CONFIG=-n
+export FPCFPMAKE
+export FPMAKE_SKIP_CONFIG
+endif
+else
+FPMAKE_SKIP_CONFIG=-n
+FPCFPMAKE=$(FPC)
+endif
+endif
+override PACKAGE_NAME=libvlc
+override PACKAGE_VERSION=2.7.1
+FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+ifdef OS_TARGET
+FPC_TARGETOPT+=--os=$(OS_TARGET)
+endif
+ifdef CPU_TARGET
+FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
+endif
+LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+override INSTALL_FPCPACKAGE=y
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+EXEDBGEXT=.dbg
+ifeq ($(OS_TARGET),go32v1)
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+OEXT=.obj
+ASMEXT=.asm
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=wat
+IMPORTLIBPREFIX=
+endif
+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
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),emx)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=emx
+ECHO=echo
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),morphos)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=mos
+endif
+ifeq ($(OS_TARGET),atari)
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),haiku)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=hai
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nw
+IMPORTLIBPREFIX=imp
+endif
+ifeq ($(OS_TARGET),netwlibc)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nwl
+IMPORTLIBPREFIX=imp
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+IMPORTLIBPREFIX=imp
+endif
+ifneq ($(findstring $(OS_TARGET),darwin iphonesim),)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+EXEDBGEXT=.dSYM
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+ifeq ($(OS_TARGET),NativeNT)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=nativent
+endif
+ifeq ($(OS_TARGET),wii)
+EXEEXT=.dol
+SHAREDLIBEXT=.so
+SHORTSUFFIX=wii
+endif
+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
+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 fpmkunit
+ifeq ($(FULL_TARGET),i386-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-nativent)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-iphonesim)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc-wii)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),x86_64-solaris)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),mipsel-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifdef REQUIRE_PACKAGES_RTL
+PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_RTL),)
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)),)
+UNITDIR_RTL=$(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)
+else
+UNITDIR_RTL=$(PACKAGEDIR_RTL)
+endif
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/units/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_RTL=$(PACKAGEDIR_RTL)/units/$(SOURCESUFFIX)
+else
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/units_bs/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_RTL=$(PACKAGEDIR_RTL)/units_bs/$(SOURCESUFFIX)
+else
+UNITDIR_FPMAKE_RTL=$(PACKAGEDIR_RTL)
+endif
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_RTL)/$(OS_TARGET)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_RTL)/$(OS_TARGET) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL)/$(OS_TARGET)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_RTL=
+UNITDIR_RTL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_RTL),)
+UNITDIR_RTL:=$(firstword $(UNITDIR_RTL))
+else
+UNITDIR_RTL=
+endif
+endif
+ifdef UNITDIR_RTL
+override COMPILER_UNITDIR+=$(UNITDIR_RTL)
+endif
+ifdef UNITDIR_FPMAKE_RTL
+override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_RTL)
+endif
+endif
+ifdef REQUIRE_PACKAGES_PASZLIB
+PACKAGEDIR_PASZLIB:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /paszlib/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_PASZLIB),)
+ifneq ($(wildcard $(PACKAGEDIR_PASZLIB)/units/$(TARGETSUFFIX)),)
+UNITDIR_PASZLIB=$(PACKAGEDIR_PASZLIB)/units/$(TARGETSUFFIX)
+else
+UNITDIR_PASZLIB=$(PACKAGEDIR_PASZLIB)
+endif
+ifneq ($(wildcard $(PACKAGEDIR_PASZLIB)/units/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_PASZLIB=$(PACKAGEDIR_PASZLIB)/units/$(SOURCESUFFIX)
+else
+ifneq ($(wildcard $(PACKAGEDIR_PASZLIB)/units_bs/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_PASZLIB=$(PACKAGEDIR_PASZLIB)/units_bs/$(SOURCESUFFIX)
+else
+UNITDIR_FPMAKE_PASZLIB=$(PACKAGEDIR_PASZLIB)
+endif
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_PASZLIB)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_PASZLIB) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_PASZLIB)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_PASZLIB=
+UNITDIR_PASZLIB:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /paszlib/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_PASZLIB),)
+UNITDIR_PASZLIB:=$(firstword $(UNITDIR_PASZLIB))
+else
+UNITDIR_PASZLIB=
+endif
+endif
+ifdef UNITDIR_PASZLIB
+override COMPILER_UNITDIR+=$(UNITDIR_PASZLIB)
+endif
+ifdef UNITDIR_FPMAKE_PASZLIB
+override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_PASZLIB)
+endif
+endif
+ifdef REQUIRE_PACKAGES_FCL-PROCESS
+PACKAGEDIR_FCL-PROCESS:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-process/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FCL-PROCESS),)
+ifneq ($(wildcard $(PACKAGEDIR_FCL-PROCESS)/units/$(TARGETSUFFIX)),)
+UNITDIR_FCL-PROCESS=$(PACKAGEDIR_FCL-PROCESS)/units/$(TARGETSUFFIX)
+else
+UNITDIR_FCL-PROCESS=$(PACKAGEDIR_FCL-PROCESS)
+endif
+ifneq ($(wildcard $(PACKAGEDIR_FCL-PROCESS)/units/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_FCL-PROCESS=$(PACKAGEDIR_FCL-PROCESS)/units/$(SOURCESUFFIX)
+else
+ifneq ($(wildcard $(PACKAGEDIR_FCL-PROCESS)/units_bs/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_FCL-PROCESS=$(PACKAGEDIR_FCL-PROCESS)/units_bs/$(SOURCESUFFIX)
+else
+UNITDIR_FPMAKE_FCL-PROCESS=$(PACKAGEDIR_FCL-PROCESS)
+endif
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FCL-PROCESS)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_FCL-PROCESS) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-PROCESS)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FCL-PROCESS=
+UNITDIR_FCL-PROCESS:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-process/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FCL-PROCESS),)
+UNITDIR_FCL-PROCESS:=$(firstword $(UNITDIR_FCL-PROCESS))
+else
+UNITDIR_FCL-PROCESS=
+endif
+endif
+ifdef UNITDIR_FCL-PROCESS
+override COMPILER_UNITDIR+=$(UNITDIR_FCL-PROCESS)
+endif
+ifdef UNITDIR_FPMAKE_FCL-PROCESS
+override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_FCL-PROCESS)
+endif
+endif
+ifdef REQUIRE_PACKAGES_HASH
+PACKAGEDIR_HASH:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /hash/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_HASH),)
+ifneq ($(wildcard $(PACKAGEDIR_HASH)/units/$(TARGETSUFFIX)),)
+UNITDIR_HASH=$(PACKAGEDIR_HASH)/units/$(TARGETSUFFIX)
+else
+UNITDIR_HASH=$(PACKAGEDIR_HASH)
+endif
+ifneq ($(wildcard $(PACKAGEDIR_HASH)/units/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_HASH=$(PACKAGEDIR_HASH)/units/$(SOURCESUFFIX)
+else
+ifneq ($(wildcard $(PACKAGEDIR_HASH)/units_bs/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_HASH=$(PACKAGEDIR_HASH)/units_bs/$(SOURCESUFFIX)
+else
+UNITDIR_FPMAKE_HASH=$(PACKAGEDIR_HASH)
+endif
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_HASH)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_HASH) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_HASH)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_HASH=
+UNITDIR_HASH:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /hash/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_HASH),)
+UNITDIR_HASH:=$(firstword $(UNITDIR_HASH))
+else
+UNITDIR_HASH=
+endif
+endif
+ifdef UNITDIR_HASH
+override COMPILER_UNITDIR+=$(UNITDIR_HASH)
+endif
+ifdef UNITDIR_FPMAKE_HASH
+override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_HASH)
+endif
+endif
+ifdef REQUIRE_PACKAGES_FPMKUNIT
+PACKAGEDIR_FPMKUNIT:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fpmkunit/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FPMKUNIT),)
+ifneq ($(wildcard $(PACKAGEDIR_FPMKUNIT)/units/$(TARGETSUFFIX)),)
+UNITDIR_FPMKUNIT=$(PACKAGEDIR_FPMKUNIT)/units/$(TARGETSUFFIX)
+else
+UNITDIR_FPMKUNIT=$(PACKAGEDIR_FPMKUNIT)
+endif
+ifneq ($(wildcard $(PACKAGEDIR_FPMKUNIT)/units/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_FPMKUNIT=$(PACKAGEDIR_FPMKUNIT)/units/$(SOURCESUFFIX)
+else
+ifneq ($(wildcard $(PACKAGEDIR_FPMKUNIT)/units_bs/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_FPMKUNIT=$(PACKAGEDIR_FPMKUNIT)/units_bs/$(SOURCESUFFIX)
+else
+UNITDIR_FPMAKE_FPMKUNIT=$(PACKAGEDIR_FPMKUNIT)
+endif
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FPMKUNIT)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_FPMKUNIT) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FPMKUNIT)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FPMKUNIT=
+UNITDIR_FPMKUNIT:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fpmkunit/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FPMKUNIT),)
+UNITDIR_FPMKUNIT:=$(firstword $(UNITDIR_FPMKUNIT))
+else
+UNITDIR_FPMKUNIT=
+endif
+endif
+ifdef UNITDIR_FPMKUNIT
+override COMPILER_UNITDIR+=$(UNITDIR_FPMKUNIT)
+endif
+ifdef UNITDIR_FPMAKE_FPMKUNIT
+override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_FPMKUNIT)
+endif
+endif
+ifndef NOCPUDEF
+override FPCOPTDEF=$(ARCH)
+endif
+ifneq ($(OS_TARGET),$(OS_SOURCE))
+override FPCOPT+=-T$(OS_TARGET)
+endif
+ifneq ($(CPU_TARGET),$(CPU_SOURCE))
+override FPCOPT+=-P$(ARCH)
+endif
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+override FPCMAKEOPT+=-FD$(NEW_BINUTILS_PATH)
+endif
+ifndef CROSSBOOTSTRAP
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-XP$(BINUTILSPREFIX)
+override FPCMAKEOPT+=-XP$(BINUTILSPREFIX)
+endif
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-Xr$(RLINKPATH)
+endif
+endif
+ifdef UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
+endif
+ifdef LIBDIR
+override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
+endif
+ifdef OBJDIR
+override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
+endif
+ifdef INCDIR
+override FPCOPT+=$(addprefix -Fi,$(INCDIR))
+endif
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+ifdef DEBUG
+override FPCOPT+=-gl
+override FPCOPTDEF+=DEBUG
+endif
+ifdef RELEASE
+ifneq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(CPU_TARGET),i386)
+FPCCPUOPT:=-OG2p3
+endif
+ifeq ($(CPU_TARGET),powerpc)
+FPCCPUOPT:=-O1r
+endif
+else
+FPCCPUOPT:=-O2
+endif
+override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n
+override FPCOPTDEF+=RELEASE
+endif
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+override FPCOPT+=-O2
+endif
+ifdef VERBOSE
+override FPCOPT+=-vwni
+endif
+ifdef COMPILER_OPTIONS
+override FPCOPT+=$(COMPILER_OPTIONS)
+endif
+ifdef COMPILER_UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR))
+endif
+ifdef COMPILER_LIBRARYDIR
+override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR))
+endif
+ifdef COMPILER_OBJECTDIR
+override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR))
+endif
+ifdef COMPILER_INCLUDEDIR
+override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR))
+endif
+ifdef CROSSBINDIR
+override FPCOPT+=-FD$(CROSSBINDIR)
+endif
+ifdef COMPILER_TARGETDIR
+override FPCOPT+=-FE$(COMPILER_TARGETDIR)
+ifeq ($(COMPILER_TARGETDIR),.)
+override TARGETDIRPREFIX=
+else
+override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/
+endif
+endif
+ifdef COMPILER_UNITTARGETDIR
+override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR)
+ifeq ($(COMPILER_UNITTARGETDIR),.)
+override UNITTARGETDIRPREFIX=
+else
+override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/
+endif
+else
+ifdef COMPILER_TARGETDIR
+override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
+override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
+endif
+endif
+ifdef CREATESHARED
+override FPCOPT+=-Cg
+ifeq ($(CPU_TARGET),i386)
+override FPCOPT+=-Aas
+endif
+endif
+ifeq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifneq ($(findstring $(OS_TARGET),freebsd openbsd netbsd linux solaris),)
+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))
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+endif
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
+ifdef INSTALL_UNITS
+override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS))
+endif
+ifdef INSTALL_BUILDUNIT
+override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES))
+endif
+ifdef INSTALLPPUFILES
+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) c$(TAROPT)f $(ZIPDESTFILE) *
+else
+ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(ZIPEXT)
+ZIPCMD_ZIP:=$(subst /,$(ZIPPATHSEP),$(ZIPPROG)) -Dr $(ZIPOPT) $(ZIPDESTFILE) *
+endif
+fpc_zipinstall:
+	$(MAKE) $(ZIPTARGET) INSTALL_PREFIX=$(PACKDIR) ZIPINSTALL=1
+	$(MKDIR) $(DIST_DESTDIR)
+	$(DEL) $(ZIPDESTFILE)
+ifdef USEZIPWRAPPER
+ifneq ($(ECHOREDIR),echo)
+	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDPACK))" > $(ZIPWRAPPER)
+	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_ZIP))" >> $(ZIPWRAPPER)
+	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDBASE))" >> $(ZIPWRAPPER)
+else
+	echo $(ZIPCMD_CDPACK) > $(ZIPWRAPPER)
+	echo $(ZIPCMD_ZIP) >> $(ZIPWRAPPER)
+	echo $(ZIPCMD_CDBASE) >> $(ZIPWRAPPER)
+endif
+ifdef inUnix
+	/bin/sh $(ZIPWRAPPER)
+else
+ifdef RUNBATCH
+	$(RUNBATCH) $(ZIPWRAPPER)
+else
+	$(ZIPWRAPPER)
+endif
+endif
+	$(DEL) $(ZIPWRAPPER)
+else
+	$(ZIPCMD_CDPACK) ; $(ZIPCMD_ZIP) ; $(ZIPCMD_CDBASE)
+endif
+	$(DELTREE) $(PACKDIR)
+fpc_zipsourceinstall:
+	$(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall ZIPSUFFIX=$(ZIPSOURCESUFFIX)
+fpc_zipexampleinstall:
+ifdef HASEXAMPLES
+	$(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall ZIPSUFFIX=$(ZIPEXAMPLESUFFIX)
+endif
+fpc_zipdistinstall:
+	$(MAKE) fpc_zipinstall ZIPTARGET=distinstall
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+override CLEANEXEDBGFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEDBGFILES))
+endif
+ifdef CLEAN_PROGRAMS
+override CLEANEXEFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEEXT), $(CLEAN_PROGRAMS)))
+override CLEANEXEDBGFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEDBGEXT), $(CLEAN_PROGRAMS)))
+endif
+ifdef CLEAN_UNITS
+override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
+endif
+ifdef CLEANPPUFILES
+override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
+ifdef DEBUGSYMEXT
+override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES))
+endif
+override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
+override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES)))
+endif
+fpc_clean: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef CLEANEXEDBGFILES
+	-$(DELTREE) $(CLEANEXEDBGFILES)
+endif
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+endif
+ifdef LIB_NAME
+	-$(DEL) $(LIB_NAME) $(LIB_FULLNAME)
+endif
+	-$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT)
+fpc_cleanall: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef COMPILER_UNITTARGETDIR
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+endif
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+endif
+	-$(DELTREE) units
+	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+ifneq ($(PPUEXT),.ppu)
+	-$(DEL) *.o *.ppu *.a
+endif
+	-$(DELTREE) *$(SMARTEXT)
+	-$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *_ppas$(BATCHEXT)
+ifdef AOUTEXT
+	-$(DEL) *$(AOUTEXT)
+endif
+ifdef DEBUGSYMEXT
+	-$(DEL) *$(DEBUGSYMEXT)
+endif
+fpc_distclean: cleanall
+.PHONY: fpc_baseinfo
+override INFORULES+=fpc_baseinfo
+fpc_baseinfo:
+	@$(ECHO)
+	@$(ECHO)  == Package info ==
+	@$(ECHO)  Package Name..... $(PACKAGE_NAME)
+	@$(ECHO)  Package Version.. $(PACKAGE_VERSION)
+	@$(ECHO)
+	@$(ECHO)  == Configuration info ==
+	@$(ECHO)
+	@$(ECHO)  FPC.......... $(FPC)
+	@$(ECHO)  FPC Version.. $(FPC_VERSION)
+	@$(ECHO)  Source CPU... $(CPU_SOURCE)
+	@$(ECHO)  Target CPU... $(CPU_TARGET)
+	@$(ECHO)  Source OS.... $(OS_SOURCE)
+	@$(ECHO)  Target OS.... $(OS_TARGET)
+	@$(ECHO)  Full Source.. $(FULL_SOURCE)
+	@$(ECHO)  Full Target.. $(FULL_TARGET)
+	@$(ECHO)  SourceSuffix. $(SOURCESUFFIX)
+	@$(ECHO)  TargetSuffix. $(TARGETSUFFIX)
+	@$(ECHO)  FPC fpmake... $(FPCFPMAKE)
+	@$(ECHO)
+	@$(ECHO)  == Directory info ==
+	@$(ECHO)
+	@$(ECHO)  Required pkgs... $(REQUIRE_PACKAGES)
+	@$(ECHO)
+	@$(ECHO)  Basedir......... $(BASEDIR)
+	@$(ECHO)  FPCDir.......... $(FPCDIR)
+	@$(ECHO)  CrossBinDir..... $(CROSSBINDIR)
+	@$(ECHO)  UnitsDir........ $(UNITSDIR)
+	@$(ECHO)  PackagesDir..... $(PACKAGESDIR)
+	@$(ECHO)
+	@$(ECHO)  GCC library..... $(GCCLIBDIR)
+	@$(ECHO)  Other library... $(OTHERLIBDIR)
+	@$(ECHO)
+	@$(ECHO)  == Tools info ==
+	@$(ECHO)
+	@$(ECHO)  As........ $(AS)
+	@$(ECHO)  Ld........ $(LD)
+	@$(ECHO)  Ar........ $(AR)
+	@$(ECHO)  Rc........ $(RC)
+	@$(ECHO)
+	@$(ECHO)  Mv........ $(MVPROG)
+	@$(ECHO)  Cp........ $(CPPROG)
+	@$(ECHO)  Rm........ $(RMPROG)
+	@$(ECHO)  GInstall.. $(GINSTALL)
+	@$(ECHO)  Echo...... $(ECHO)
+	@$(ECHO)  Shell..... $(SHELL)
+	@$(ECHO)  Date...... $(DATE)
+	@$(ECHO)  FPCMake... $(FPCMAKE)
+	@$(ECHO)  PPUMove... $(PPUMOVE)
+	@$(ECHO)  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
+units:
+examples:
+shared:
+sourceinstall: fpc_sourceinstall
+exampleinstall: fpc_exampleinstall
+zipinstall: fpc_zipinstall
+zipsourceinstall: fpc_zipsourceinstall
+zipexampleinstall: fpc_zipexampleinstall
+zipdistinstall: fpc_zipdistinstall
+cleanall:
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: units examples shared sourceinstall exampleinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+.NOTPARALLEL:
+fpmake: fpmake.pp
+	$(FPCFPMAKE) fpmake.pp $(FPMAKE_SKIP_CONFIG) $(addprefix -Fu,$(COMPILER_FPMAKE_UNITDIR)) $(FPCMAKEOPT)
+all:	fpmake
+	$(LOCALFPMAKE) compile --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) -bu
+smart:	fpmake
+	$(LOCALFPMAKE) compile --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) -bu -o -XX -o -CX
+release:	fpmake
+	$(LOCALFPMAKE) compile --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) -bu -o -dRELEASE
+debug:	fpmake
+	$(LOCALFPMAKE) compile --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) -bu -o -dDEBUG
+ifeq ($(FPMAKE_BIN_CLEAN),)
+clean:	
+else
+clean:	
+	$(FPMAKE_BIN_CLEAN) clean --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC)
+endif
+ifeq ($(FPMAKE_BIN_CLEAN),)
+distclean:	$(addsuffix _distclean,$(TARGET_DIRS)) fpc_cleanall
+else
+distclean:	
+ifdef inUnix
+	{ $(FPMAKE_BIN_CLEAN) distclean --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC); if [ $$? != "0" ]; then { echo Something wrong with fpmake exectable. Remove the executable and call make recursively to recover.; $(DEL) $(FPMAKE_BIN_CLEAN); $(MAKE) fpc_cleanall; }; fi;  }
+else
+	$(FPMAKE_BIN_CLEAN) distclean --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC)
+endif
+	-$(DEL) $(LOCALFPMAKE)
+endif
+install:	fpmake
+ifdef UNIXHier
+	$(LOCALFPMAKE) install --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) --prefix=$(INSTALL_PREFIX) --baseinstalldir=$(INSTALL_LIBDIR)/fpc/$(FPC_VERSION) --unitinstalldir=$(INSTALL_UNITDIR)
+else
+	$(LOCALFPMAKE) install --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) --prefix=$(INSTALL_BASEDIR) --unitinstalldir=$(INSTALL_UNITDIR)
+endif
+distinstall:	fpmake
+ifdef UNIXHier
+	$(LOCALFPMAKE) install --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) --prefix=$(INSTALL_PREFIX) --baseinstalldir=$(INSTALL_LIBDIR)/fpc/$(FPC_VERSION) --unitinstalldir=$(INSTALL_UNITDIR) -ie
+else
+	$(LOCALFPMAKE) install --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) --prefix=$(INSTALL_BASEDIR)  --unitinstalldir=$(INSTALL_UNITDIR) -ie
+endif

+ 76 - 0
packages/libvlc/Makefile.fpc

@@ -0,0 +1,76 @@
+#
+#   Makefile.fpc for running fpmake
+#
+
+[package]
+name=libvlc
+version=2.7.1
+
+[require]
+packages=rtl fpmkunit
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../..
+
+[prerules]
+FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+ifdef OS_TARGET
+FPC_TARGETOPT+=--os=$(OS_TARGET)
+endif
+ifdef CPU_TARGET
+FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
+endif
+LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+
+[rules]
+.NOTPARALLEL:
+
+fpmake: fpmake.pp
+	$(FPCFPMAKE) fpmake.pp $(FPMAKE_SKIP_CONFIG) $(addprefix -Fu,$(COMPILER_FPMAKE_UNITDIR)) $(FPCMAKEOPT)
+all:	fpmake
+	$(LOCALFPMAKE) compile --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) -bu
+smart:	fpmake
+	$(LOCALFPMAKE) compile --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) -bu -o -XX -o -CX
+release:	fpmake
+	$(LOCALFPMAKE) compile --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) -bu -o -dRELEASE
+debug:	fpmake
+	$(LOCALFPMAKE) compile --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) -bu -o -dDEBUG
+# If no fpmake exists and (dist)clean is called, do not try to build fpmake, it will
+# most often fail because the dependencies are cleared.
+# In case of a clean, simply do nothing
+ifeq ($(FPMAKE_BIN_CLEAN),)
+clean:	
+else
+clean:	
+	$(FPMAKE_BIN_CLEAN) clean --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC)
+endif
+# In case of a distclean, perform an 'old'-style distclean. This to avoid problems
+# when the package is compiled using fpcmake prior to running this clean using fpmake
+ifeq ($(FPMAKE_BIN_CLEAN),)
+distclean:	$(addsuffix _distclean,$(TARGET_DIRS)) fpc_cleanall
+else
+distclean:	
+ifdef inUnix
+        { $(FPMAKE_BIN_CLEAN) distclean --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC); if [ $$? != "0" ]; then { echo Something wrong with fpmake exectable. Remove the executable and call make recursively to recover.; $(DEL) $(FPMAKE_BIN_CLEAN); $(MAKE) fpc_cleanall; }; fi;  }
+else
+        $(FPMAKE_BIN_CLEAN) distclean --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC)
+endif
+	-$(DEL) $(LOCALFPMAKE)
+endif
+install:	fpmake
+ifdef UNIXHier
+	$(LOCALFPMAKE) install --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) --prefix=$(INSTALL_PREFIX) --baseinstalldir=$(INSTALL_LIBDIR)/fpc/$(FPC_VERSION) --unitinstalldir=$(INSTALL_UNITDIR)
+else
+	$(LOCALFPMAKE) install --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) --prefix=$(INSTALL_BASEDIR) --unitinstalldir=$(INSTALL_UNITDIR)
+endif
+# distinstall also installs the example-sources
+distinstall:	fpmake
+ifdef UNIXHier
+	$(LOCALFPMAKE) install --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) --prefix=$(INSTALL_PREFIX) --baseinstalldir=$(INSTALL_LIBDIR)/fpc/$(FPC_VERSION) --unitinstalldir=$(INSTALL_UNITDIR) -ie
+else
+	$(LOCALFPMAKE) install --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) --prefix=$(INSTALL_BASEDIR)  --unitinstalldir=$(INSTALL_UNITDIR) -ie
+endif
+

+ 84 - 0
packages/libvlc/example/testvlc.lpi

@@ -0,0 +1,84 @@
+<?xml version="1.0"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="9"/>
+    <General>
+      <Flags>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <MainUnitHasTitleStatement Value="False"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <MainUnit Value="0"/>
+      <Title Value="testvlc"/>
+      <UseAppBundle Value="False"/>
+      <ResourceType Value="res"/>
+    </General>
+    <i18n>
+      <EnableI18N LFM="False"/>
+    </i18n>
+    <VersionInfo>
+      <StringTable ProductVersion=""/>
+    </VersionInfo>
+    <BuildModes Count="1">
+      <Item1 Name="Default" Default="True"/>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+      <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+      <ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/>
+    </PublishOptions>
+    <RunParams>
+      <local>
+        <FormatVersion Value="1"/>
+        <LaunchingApplication PathPlusParams="/usr/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+      </local>
+    </RunParams>
+    <Units Count="3">
+      <Unit0>
+        <Filename Value="testvlc.pp"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="testvlc"/>
+      </Unit0>
+      <Unit1>
+        <Filename Value="../src/libvlc.pp"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="libvlc"/>
+      </Unit1>
+      <Unit2>
+        <Filename Value="../src/vlc.pas"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="vlc"/>
+      </Unit2>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <Target>
+      <Filename Value="testvlc"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir)"/>
+      <OtherUnitFiles Value="../src"/>
+      <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
+    </SearchPaths>
+    <Other>
+      <CompilerMessages>
+        <MsgFileName Value=""/>
+      </CompilerMessages>
+      <CompilerPath Value="$(CompPath)"/>
+    </Other>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions Count="3">
+      <Item1>
+        <Name Value="EAbort"/>
+      </Item1>
+      <Item2>
+        <Name Value="ECodetoolError"/>
+      </Item2>
+      <Item3>
+        <Name Value="EFOpenError"/>
+      </Item3>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 52 - 0
packages/libvlc/example/testvlc.pp

@@ -0,0 +1,52 @@
+program testvlc;
+
+{$mode objfpc}{$H+}
+
+uses
+{$ifdef unix} cthreads,{$endif}
+  Sysutils, Classes, math, libvlc, vlc;
+
+Var
+  P :  TVLCMediaPlayer;
+  LP : TVLCMediaListPlayer;
+  I : Integer;
+
+begin
+  // This is needed, or loading the VLC libraries will fail with a SIGFPE
+  setexceptionmask([exInvalidOp, exDenormalized, exZeroDivide,
+                     exOverflow, exUnderflow, exPrecision]);
+  P:=TVLCMediaPlayer.Create(Nil);
+  if ParamCount=1 then
+    With P do
+      try
+        PlayFile(ParamStr(1));
+        Repeat
+          Sleep(100);
+        until State in [libvlc_Ended,libvlc_Error];
+      finally
+        Free;
+      end
+  else
+    begin
+    LP:=TVLCMediaListPlayer.Create(Nil);
+    try
+      P:=TVLCMediaPlayer.Create(Nil);
+      try
+        LP.Player:=P;
+        For I:=1 to ParamCount do
+          begin
+          TVLCMediaItem(LP.MediaItems.Add).Path:=ParamStr(i);
+          end;
+        LP.Play;
+        Repeat
+          Sleep(100);
+        until LP.State in [libvlc_Ended,libvlc_Error];
+      finally
+        P.Free;
+      end;
+    finally
+      LP.free;
+    end;
+    end;
+end.
+

+ 74 - 0
packages/libvlc/example/tvlc.lpi

@@ -0,0 +1,74 @@
+<?xml version="1.0"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="9"/>
+    <General>
+      <Flags>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <MainUnitHasTitleStatement Value="False"/>
+        <UseDefaultCompilerOptions Value="True"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <MainUnit Value="0"/>
+      <Title Value="tvlc"/>
+      <UseAppBundle Value="False"/>
+      <ResourceType Value="res"/>
+    </General>
+    <i18n>
+      <EnableI18N LFM="False"/>
+    </i18n>
+    <VersionInfo>
+      <StringTable ProductVersion=""/>
+    </VersionInfo>
+    <BuildModes Count="1">
+      <Item1 Name="Default" Default="True"/>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+      <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+      <ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/>
+    </PublishOptions>
+    <RunParams>
+      <local>
+        <FormatVersion Value="1"/>
+        <LaunchingApplication PathPlusParams="/usr/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+      </local>
+    </RunParams>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="tvlc.pp"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="tvlc"/>
+      </Unit0>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <Target>
+      <Filename Value="tvlc"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir)"/>
+      <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
+    </SearchPaths>
+    <Other>
+      <CompilerMessages>
+        <MsgFileName Value=""/>
+      </CompilerMessages>
+      <CompilerPath Value="$(CompPath)"/>
+    </Other>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions Count="3">
+      <Item1>
+        <Name Value="EAbort"/>
+      </Item1>
+      <Item2>
+        <Name Value="ECodetoolError"/>
+      </Item2>
+      <Item3>
+        <Name Value="EFOpenError"/>
+      </Item3>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 18 - 0
packages/libvlc/example/tvlc.pp

@@ -0,0 +1,18 @@
+{$linklib pthread}
+program tvlc;
+
+uses cthreads, libvlc, math;
+
+Var
+  Args: Array[0..3] of pchar;
+  fhandle : pointer;
+ 
+begin
+  // This is needed, or loading the VLC libraries will fail with a SIGFPE
+  setexceptionmask([exInvalidOp, exDenormalized, exZeroDivide,
+                     exOverflow, exUnderflow, exPrecision]);
+  LoadLibVLC('libvlc.so.5',False);
+  args[0] := PAnsiChar('libvlc.so.5');
+  args[2] := NIL;
+  FHandle := libvlc_new(1, @args);
+end.

+ 33 - 0
packages/libvlc/fpmake.pp

@@ -0,0 +1,33 @@
+{$ifndef ALLPACKAGES}
+{$mode objfpc}{$H+}
+program fpmake;
+
+uses fpmkunit;
+
+Var
+  T : TTarget;
+  P : TPackage;
+begin
+  With Installer do
+    begin
+{$endif ALLPACKAGES}
+    P:=AddPackage('libvlc');
+{$ifdef ALLPACKAGES}
+    P.Directory:='libvlc';
+{$endif ALLPACKAGES}
+    P.Version:='1.0';
+    P.License := 'LGPL with modification';
+    P.HomepageURL := 'www.freepascal.org';
+    P.Email := '[email protected]';
+    P.Description := 'VLC library (version 2 or higher) interface and component.';
+    T:=P.Targets.AddUnit('src/libvlc.pp');
+    T:=P.Targets.AddUnit('src/vlc.pp');
+    with T.Dependencies do
+      begin
+      AddUnit('libvlc');
+      end;
+{$ifndef ALLPACKAGES}
+    Run;
+    end;
+end.
+{$endif}

+ 1172 - 0
packages/libvlc/src/libvlc.pp

@@ -0,0 +1,1172 @@
+{
+    Copyright (c) 2012 by Michael Van Canneyt
+    member of the Free Pascal development team
+
+    This is a translation of the VLC library headers.
+    The original VLC library license applies if you use the VLC libraries.
+    See http://www.videolan.org/ for license details.
+    
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+
+{$mode objfpc}
+unit libvlc;
+interface
+
+uses
+  ctypes;
+
+{$IFDEF FPC}
+{$PACKRECORDS C}
+{$ENDIF}
+
+Const
+
+{$ifdef unix}
+  libname = 'libvlc.so.5';
+{$else}
+{$ifdef windows}
+  DefaultlibPath = 'C:\Program files\Videolan\VLC\';
+  corelibname    = 'libvlccore.dll';
+  libname        = 'libvlc.dll';
+{$endif}
+{$endif}
+
+  Type
+  _bool = cint;
+   Ppcchar = ^Pcchar;
+
+  // Opaque types.  
+  libvlc_event_manager_t = record end;
+  Libvlc_instance_t = record end;
+  Libvlc_log_iterator_t = record end;
+  Libvlc_log_t = record end;
+  Libvlc_media_discoverer_t = record end;
+  Libvlc_media_library_t = record end;
+  Libvlc_media_list_player_t = record end;
+  Libvlc_media_list_t = record end;
+  Libvlc_media_player_t = record end;
+  Libvlc_media_t = record end;
+  
+  Plibvlc_audio_output_t  = ^libvlc_audio_output_t;
+  Plibvlc_event_manager_t  = ^libvlc_event_manager_t;
+  Plibvlc_event_t  = ^libvlc_event_t;
+  Plibvlc_instance_t  = ^libvlc_instance_t;
+  Plibvlc_log_iterator_t  = ^libvlc_log_iterator_t;
+  Plibvlc_log_message_t  = ^libvlc_log_message_t;
+  Plibvlc_log_t  = ^libvlc_log_t;
+  Plibvlc_media_discoverer_t  = ^libvlc_media_discoverer_t;
+  Plibvlc_media_library_t  = ^libvlc_media_library_t;
+  Plibvlc_media_list_player_t  = ^libvlc_media_list_player_t;
+  Plibvlc_media_list_t  = ^libvlc_media_list_t;
+  Plibvlc_media_player_t  = ^libvlc_media_player_t;
+  Plibvlc_media_stats_t  = ^libvlc_media_stats_t;
+  Plibvlc_media_t  = ^libvlc_media_t;
+  Plibvlc_media_track_info_t  = ^libvlc_media_track_info_t;
+  Plibvlc_module_description_t  = ^libvlc_module_description_t;
+  Plibvlc_track_description_t  = ^libvlc_track_description_t;
+
+  int8_t = cschar;
+  int16_t = csint;
+  int32_t = cint;
+  int64_t = clong;
+  uint8_t = cuchar;
+  uint16_t = csint;
+  uint32_t = cuint;
+  uint64_t = culong;
+  int_least8_t = cschar;
+  int_least16_t = csint;
+  int_least32_t = cint;
+  int_least64_t = clong;
+  uint_least8_t = cuchar;
+  uint_least16_t = csint;
+  uint_least32_t = cuint;
+  uint_least64_t = culong;
+  int_fast8_t = cschar;
+  int_fast16_t = clong;
+  int_fast32_t = clong;
+  int_fast64_t = clong;
+  uint_fast8_t = cuchar;
+  uint_fast16_t = culong;
+  uint_fast32_t = culong;
+  uint_fast64_t = culong;
+  intptr_t = clong;
+  uintptr_t = culong;
+  intmax_t = clong;
+  uintmax_t = culong;
+
+  libvlc_time_t = int64_t;
+  libvlc_log_message_t = record
+    i_severity : cint;
+    psz_type : ^cchar;
+    psz_name : ^cchar;
+    psz_header : ^cchar;
+    psz_message : ^cchar;
+  end;
+
+  libvlc_event_type_t = cint;
+  libvlc_callback_t = procedure (_para1:Plibvlc_event_t; _para2:pointer);cdecl;
+
+  libvlc_module_description_t = record
+    psz_name : ^cchar;
+    psz_shortname : ^cchar;
+    psz_longname : ^cchar;
+    psz_help : ^cchar;
+    p_next : ^libvlc_module_description_t;
+  end;
+
+{
+static inline int64_t libvlc_delay(int64_t pts)
+
+    return pts - libvlc_clock();
+
+ }
+
+
+  libvlc_meta_t = (libvlc_meta_Title,libvlc_meta_Artist,
+    libvlc_meta_Genre,libvlc_meta_Copyright,
+    libvlc_meta_Album,libvlc_meta_TrackNumber,
+    libvlc_meta_Description,libvlc_meta_Rating,
+    libvlc_meta_Date,libvlc_meta_Setting,
+    libvlc_meta_URL,libvlc_meta_Language,
+    libvlc_meta_NowPlaying,libvlc_meta_Publisher,
+    libvlc_meta_EncodedBy,libvlc_meta_ArtworkURL,
+    libvlc_meta_TrackID);
+
+  libvlc_state_t = (libvlc_NothingSpecial := 0,libvlc_Opening,
+    libvlc_Buffering,libvlc_Playing,libvlc_Paused,
+    libvlc_Stopped,libvlc_Ended,libvlc_Error
+    );
+
+  libvlc_media_option_t = (libvlc_media_option_trusted := $2,libvlc_media_option_unique := $100
+    );
+
+  libvlc_track_type_t = (libvlc_track_unknown := -(1),libvlc_track_audio := 0,
+    libvlc_track_video := 1,libvlc_track_text := 2
+    );
+
+  libvlc_media_stats_t = record
+    i_read_bytes : cint;
+    f_input_bitrate : cfloat;
+    i_demux_read_bytes : cint;
+    f_demux_bitrate : cfloat;
+    i_demux_corrupted : cint;
+    i_demux_discontinuity : cint;
+    i_decoded_video : cint;
+    i_decoded_audio : cint;
+    i_displayed_pictures : cint;
+    i_lost_pictures : cint;
+    i_played_abuffers : cint;
+    i_lost_abuffers : cint;
+    i_sent_packets : cint;
+    i_sent_bytes : cint;
+    f_send_bitrate : cfloat;
+  end;
+
+  libvlc_media_track_info_t = record
+    i_codec : uint32_t;
+    i_id : cint;
+    i_type : libvlc_track_type_t;
+    i_profile : cint;
+    i_level : cint;
+    u : record
+      case longint of
+        0 : ( audio : record
+            i_channels : cunsigned;
+            i_rate : cunsigned;
+          end );
+        1 : ( video : record
+            i_height : cunsigned;
+            i_width : cunsigned;
+          end );
+      end;
+  end;
+
+
+  libvlc_track_description_t = record
+    i_id : cint;
+    psz_name : ^cchar;
+    p_next : ^libvlc_track_description_t;
+  end;
+
+  libvlc_audio_output_t = record
+    psz_name : ^cchar;
+    psz_description : ^cchar;
+    p_next : ^libvlc_audio_output_t;
+  end;
+
+  libvlc_rectangle_t = record
+    top : cint;
+    left : cint;
+    bottom : cint;
+    right : cint;
+  end;
+
+  libvlc_video_marquee_option_t = (libvlc_marquee_Enable := 0,libvlc_marquee_Text,
+    libvlc_marquee_Color,libvlc_marquee_Opacity,
+    libvlc_marquee_Position,libvlc_marquee_Refresh,
+    libvlc_marquee_Size,libvlc_marquee_Timeout,
+    libvlc_marquee_X,libvlc_marquee_Y);
+
+  libvlc_navigate_mode_t = (libvlc_navigate_activate := 0,libvlc_navigate_up,
+    libvlc_navigate_down,libvlc_navigate_left,
+    libvlc_navigate_right);
+
+
+  libvlc_video_lock_cb = function (opaque:pointer; planes:Ppointer):pointer;cdecl;
+  libvlc_video_unlock_cb = procedure (opaque:pointer; picture:pointer; planes:Ppointer);cdecl;
+  libvlc_video_display_cb = procedure (opaque:pointer; picture:pointer);cdecl;
+  libvlc_video_format_cb = function (opaque:Ppointer; chroma:pcchar; width:pcunsigned; height:pcunsigned; pitches:pcunsigned;
+               lines:pcunsigned):cunsigned;cdecl;
+  libvlc_video_cleanup_cb = procedure (opaque:pointer);cdecl;
+  libvlc_audio_play_cb = procedure (data:pointer; samples:pointer; count:cunsigned; pts:int64_t);cdecl;
+  libvlc_audio_pause_cb = procedure (data:pointer; pts:int64_t);cdecl;
+  libvlc_audio_resume_cb = procedure (data:pointer; pts:int64_t);cdecl;
+  libvlc_audio_flush_cb = procedure (data:pointer; pts:int64_t);cdecl;
+  libvlc_audio_drain_cb = procedure (data:pointer);cdecl;
+  libvlc_audio_set_volume_cb = procedure (data:pointer; volume:cfloat; mute:_Bool);cdecl;
+  libvlc_audio_setup_cb = function (data:Ppointer; format:pcchar; rate:pcunsigned; channels:pcunsigned):cint;cdecl;
+  libvlc_audio_cleanup_cb = procedure (data:pointer);cdecl;
+  libvlc_video_logo_option_t = (libvlc_logo_enable,libvlc_logo_file,libvlc_logo_x,
+    libvlc_logo_y,libvlc_logo_delay,libvlc_logo_repeat,
+    libvlc_logo_opacity,libvlc_logo_position
+    );
+  libvlc_video_adjust_option_t = (libvlc_adjust_Enable := 0,libvlc_adjust_Contrast,
+    libvlc_adjust_Brightness,libvlc_adjust_Hue,
+    libvlc_adjust_Saturation,libvlc_adjust_Gamma
+    );
+  libvlc_audio_output_device_types_t = (libvlc_AudioOutputDevice_Error := -(1),
+    libvlc_AudioOutputDevice_Mono := 1,
+    libvlc_AudioOutputDevice_Stereo := 2,
+    libvlc_AudioOutputDevice_2F2R := 4,
+    libvlc_AudioOutputDevice_3F2R := 5,
+    libvlc_AudioOutputDevice_5_1 := 6,libvlc_AudioOutputDevice_6_1 := 7,
+    libvlc_AudioOutputDevice_7_1 := 8,libvlc_AudioOutputDevice_SPDIF := 10
+    );
+
+  libvlc_audio_output_channel_t = (libvlc_AudioChannel_Error := -(1),libvlc_AudioChannel_Stereo := 1,
+    libvlc_AudioChannel_RStereo := 2,libvlc_AudioChannel_Left := 3,
+    libvlc_AudioChannel_Right := 4,libvlc_AudioChannel_Dolbys := 5
+    );
+  libvlc_playback_mode_t = (libvlc_playback_mode_default,libvlc_playback_mode_loop,
+    libvlc_playback_mode_repeat);
+
+  libvlc_event_e = (libvlc_MediaMetaChanged := 0,
+    libvlc_MediaSubItemAdded,
+    libvlc_MediaDurationChanged,libvlc_MediaParsedChanged,
+    libvlc_MediaFreed,libvlc_MediaStateChanged,
+    libvlc_MediaPlayerMediaChanged := $100,
+    libvlc_MediaPlayerNothingSpecial,libvlc_MediaPlayerOpening,
+    libvlc_MediaPlayerBuffering,libvlc_MediaPlayerPlaying,
+    libvlc_MediaPlayerPaused,libvlc_MediaPlayerStopped,
+    libvlc_MediaPlayerForward,libvlc_MediaPlayerBackward,
+    libvlc_MediaPlayerEndReached,libvlc_MediaPlayerEncounteredError,
+    libvlc_MediaPlayerTimeChanged,libvlc_MediaPlayerPositionChanged,
+    libvlc_MediaPlayerSeekableChanged,libvlc_MediaPlayerPausableChanged,
+    libvlc_MediaPlayerTitleChanged,libvlc_MediaPlayerSnapshotTaken,
+    libvlc_MediaPlayerLengthChanged,libvlc_MediaPlayerVout,
+    libvlc_MediaListItemAdded := $200,libvlc_MediaListWillAddItem,
+    libvlc_MediaListItemDeleted,libvlc_MediaListWillDeleteItem,
+    libvlc_MediaListViewItemAdded := $300,
+    libvlc_MediaListViewWillAddItem,libvlc_MediaListViewItemDeleted,
+    libvlc_MediaListViewWillDeleteItem,libvlc_MediaListPlayerPlayed := $400,
+    libvlc_MediaListPlayerNextItemSet,libvlc_MediaListPlayerStopped,
+    libvlc_MediaDiscovererStarted := $500,
+    libvlc_MediaDiscovererEnded,libvlc_VlmMediaAdded := $600,
+    libvlc_VlmMediaRemoved,libvlc_VlmMediaChanged,
+    libvlc_VlmMediaInstanceStarted,libvlc_VlmMediaInstanceStopped,
+    libvlc_VlmMediaInstanceStatusInit,libvlc_VlmMediaInstanceStatusOpening,
+    libvlc_VlmMediaInstanceStatusPlaying,
+    libvlc_VlmMediaInstanceStatusPause,libvlc_VlmMediaInstanceStatusEnd,
+    libvlc_VlmMediaInstanceStatusError);
+
+
+  libvlc_event_t = record
+    _type : cint;
+    p_obj : pointer;
+      case longint of
+        0 : ( media_meta_changed : record
+            meta_type : libvlc_meta_t;
+          end );
+        1 : ( media_subitem_added : record
+            new_child : ^libvlc_media_t;
+          end );
+        2 : ( media_duration_changed : record
+            new_duration : int64_t;
+          end );
+        3 : ( media_parsed_changed : record
+            new_status : cint;
+          end );
+        4 : ( media_freed : record
+            md : ^libvlc_media_t;
+          end );
+        5 : ( media_state_changed : record
+            new_state : libvlc_state_t;
+          end );
+        6 : ( media_player_buffering : record
+            new_cache : cfloat;
+          end );
+        7 : ( media_player_position_changed : record
+            new_position : cfloat;
+          end );
+        8 : ( media_player_time_changed : record
+            new_time : libvlc_time_t;
+          end );
+        9 : ( media_player_title_changed : record
+            new_title : cint;
+          end );
+        10 : ( media_player_seekable_changed : record
+            new_seekable : cint;
+          end );
+        11 : ( media_player_pausable_changed : record
+            new_pausable : cint;
+          end );
+        12 : ( media_player_vout : record
+            new_count : cint;
+          end );
+        13 : ( media_list_item_added : record
+            item : ^libvlc_media_t;
+            index : cint;
+          end );
+        14 : ( media_list_will_add_item : record
+            item : ^libvlc_media_t;
+            index : cint;
+          end );
+        15 : ( media_list_item_deleted : record
+            item : ^libvlc_media_t;
+            index : cint;
+          end );
+        16 : ( media_list_will_delete_item : record
+            item : ^libvlc_media_t;
+            index : cint;
+          end );
+        17 : ( media_list_player_next_item_set : record
+            item : ^libvlc_media_t;
+          end );
+        18 : ( media_player_snapshot_taken : record
+            psz_filename : ^cchar;
+          end );
+        19 : ( media_player_length_changed : record
+            new_length : libvlc_time_t;
+          end );
+        20 : ( vlm_media_event : record
+            psz_media_name : ^cchar;
+            psz_instance_name : ^cchar;
+          end );
+        21 : ( media_player_media_changed : record
+            new_media : ^libvlc_media_t;
+          end );
+    end;
+
+  PPlibvlc_media_track_info_t = ^Plibvlc_media_track_info_t;
+  cbtype1 = procedure (_para1:pointer); cdecl;
+
+Var
+    libvlc_media_player_new : function(p_libvlc_instance:Plibvlc_instance_t):plibvlc_media_player_t; cdecl;
+    libvlc_media_player_new_from_media : function(p_md:Plibvlc_media_t):plibvlc_media_player_t; cdecl;
+    libvlc_media_player_release : procedure(p_mi:Plibvlc_media_player_t); cdecl;
+    libvlc_media_player_retain : procedure(p_mi:Plibvlc_media_player_t); cdecl;
+    libvlc_media_player_set_media : procedure(p_mi:Plibvlc_media_player_t; p_md:Plibvlc_media_t); cdecl;
+    libvlc_media_player_get_media : function(p_mi:Plibvlc_media_player_t):plibvlc_media_t; cdecl;
+    libvlc_media_player_event_manager : function(p_mi:Plibvlc_media_player_t):plibvlc_event_manager_t; cdecl;
+    libvlc_media_player_is_playing : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_media_player_play : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_media_player_set_pause : procedure(mp:Plibvlc_media_player_t; do_pause:cint); cdecl;
+    libvlc_media_player_pause : procedure(p_mi:Plibvlc_media_player_t); cdecl;
+    libvlc_media_player_stop : procedure(p_mi:Plibvlc_media_player_t); cdecl;
+    libvlc_media_new_location : function(p_instance:Plibvlc_instance_t; psz_mrl:pcchar):plibvlc_media_t; cdecl;
+    libvlc_media_new_path : function(p_instance:Plibvlc_instance_t; path:pcchar):plibvlc_media_t; cdecl;
+    libvlc_media_new_fd : function(p_instance:Plibvlc_instance_t; fd:cint):plibvlc_media_t; cdecl;
+    libvlc_media_new_as_node : function(p_instance:Plibvlc_instance_t; psz_name:pcchar):plibvlc_media_t; cdecl;
+    libvlc_media_add_option : procedure(p_md:Plibvlc_media_t; ppsz_options:pcchar); cdecl;
+    libvlc_media_add_option_flag : procedure(p_md:Plibvlc_media_t; ppsz_options:pcchar; i_flags:cunsigned); cdecl;
+    libvlc_media_retain : procedure(p_md:Plibvlc_media_t); cdecl;
+    libvlc_media_release : procedure(p_md:Plibvlc_media_t); cdecl;
+    libvlc_media_get_mrl : function(p_md:Plibvlc_media_t):pcchar; cdecl;
+    libvlc_media_duplicate : function(p_md:Plibvlc_media_t):plibvlc_media_t; cdecl;
+    libvlc_media_get_meta : function(p_md:Plibvlc_media_t; e_meta:libvlc_meta_t):pcchar; cdecl;
+    libvlc_media_set_meta : procedure(p_md:Plibvlc_media_t; e_meta:libvlc_meta_t; psz_value:pcchar); cdecl;
+    libvlc_media_save_meta : function(p_md:Plibvlc_media_t):cint; cdecl;
+    libvlc_media_get_state : function(p_md:Plibvlc_media_t):libvlc_state_t; cdecl;
+    libvlc_media_get_stats : function(p_md:Plibvlc_media_t; p_stats:Plibvlc_media_stats_t):cint; cdecl;
+    libvlc_media_subitems : function(p_md:Plibvlc_media_t):plibvlc_media_list_t; cdecl;
+    libvlc_media_event_manager : function(p_md:Plibvlc_media_t):plibvlc_event_manager_t; cdecl;
+    libvlc_media_get_duration : function(p_md:Plibvlc_media_t):libvlc_time_t; cdecl;
+    libvlc_media_parse : procedure(p_md:Plibvlc_media_t); cdecl;
+    libvlc_media_parse_async : procedure(p_md:Plibvlc_media_t); cdecl;
+    libvlc_media_is_parsed : function(p_md:Plibvlc_media_t):cint; cdecl;
+    libvlc_media_set_user_data : procedure(p_md:Plibvlc_media_t; p_new_user_data:pointer); cdecl;
+    libvlc_media_get_user_data : function(p_md:Plibvlc_media_t):pointer; cdecl;
+    libvlc_media_get_tracks_info : function(p_md:Plibvlc_media_t; tracks:PPlibvlc_media_track_info_t):cint; cdecl;
+    libvlc_module_description_list_release : procedure(p_list:Plibvlc_module_description_t); cdecl;
+    libvlc_audio_filter_list_get : function(p_instance:Plibvlc_instance_t):plibvlc_module_description_t; cdecl;
+    libvlc_video_filter_list_get : function(p_instance:Plibvlc_instance_t):plibvlc_module_description_t; cdecl;
+    libvlc_clock : function:int64_t; cdecl;
+
+    libvlc_errmsg : function:pcchar; cdecl;
+    libvlc_clearerr : procedure; cdecl;
+    libvlc_printerr : function(fmt:pcchar):pcchar;varargs; cdecl;
+
+    libvlc_new : function(argc:cint; argv:Ppcchar):plibvlc_instance_t; cdecl;
+    libvlc_release : procedure(p_instance:Plibvlc_instance_t); cdecl;
+    libvlc_retain : procedure(p_instance:Plibvlc_instance_t); cdecl;
+    libvlc_add_intf : function(p_instance:Plibvlc_instance_t; name:pcchar):cint; cdecl;
+    libvlc_set_exit_handler : procedure(p_instance:Plibvlc_instance_t; cb:cbtype1; opaque:pointer); cdecl;
+    libvlc_wait : procedure(p_instance:Plibvlc_instance_t); cdecl;
+    libvlc_set_user_agent : procedure(p_instance:Plibvlc_instance_t; name:pcchar; http:pcchar); cdecl;
+    libvlc_get_version : function:pcchar; cdecl;
+    libvlc_get_compiler : function:pcchar; cdecl;
+    libvlc_get_changeset : function:pcchar; cdecl;
+    libvlc_free : procedure(ptr:pointer); cdecl;
+    libvlc_event_attach : function(p_event_manager:Plibvlc_event_manager_t; i_event_type:libvlc_event_type_t; f_callback:libvlc_callback_t; user_data:pointer):cint; cdecl;
+    libvlc_event_detach : procedure(p_event_manager:Plibvlc_event_manager_t; i_event_type:libvlc_event_type_t; f_callback:libvlc_callback_t; p_user_data:pointer); cdecl;
+    libvlc_event_type_name : function(event_type:libvlc_event_type_t):pcchar; cdecl;
+    libvlc_get_log_verbosity : function(p_instance:Plibvlc_instance_t):cunsigned; cdecl;
+    libvlc_set_log_verbosity : procedure(p_instance:Plibvlc_instance_t; level:cunsigned); cdecl;
+    libvlc_log_open : function(p_instance:Plibvlc_instance_t):plibvlc_log_t; cdecl;
+    libvlc_log_close : procedure(p_log:Plibvlc_log_t); cdecl;
+    libvlc_log_count : function(p_log:Plibvlc_log_t):cunsigned; cdecl;
+    libvlc_log_clear : procedure(p_log:Plibvlc_log_t); cdecl;
+    libvlc_log_get_iterator : function(p_log:Plibvlc_log_t):plibvlc_log_iterator_t; cdecl;
+    libvlc_log_iterator_free : procedure(p_iter:Plibvlc_log_iterator_t); cdecl;
+    libvlc_log_iterator_has_next : function(p_iter:Plibvlc_log_iterator_t):cint; cdecl;
+    libvlc_log_iterator_next : function(p_iter:Plibvlc_log_iterator_t; p_buffer:Plibvlc_log_message_t):plibvlc_log_message_t; cdecl;
+    libvlc_audio_output_list_get : function(p_instance:Plibvlc_instance_t):plibvlc_audio_output_t; cdecl;
+    libvlc_audio_output_list_release : procedure(p_list:Plibvlc_audio_output_t); cdecl;
+    libvlc_audio_output_set : function(p_mi:Plibvlc_media_player_t; psz_name:pcchar):cint; cdecl;
+    libvlc_audio_output_device_count : function(p_instance:Plibvlc_instance_t; psz_audio_output:pcchar):cint; cdecl;
+    libvlc_audio_output_device_longname : function(p_instance:Plibvlc_instance_t; psz_audio_output:pcchar; i_device:cint):pcchar; cdecl;
+    libvlc_audio_output_device_id : function(p_instance:Plibvlc_instance_t; psz_audio_output:pcchar; i_device:cint):pcchar; cdecl;
+    libvlc_audio_output_device_set : procedure(p_mi:Plibvlc_media_player_t; psz_audio_output:pcchar; psz_device_id:pcchar); cdecl;
+    libvlc_audio_output_get_device_type : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_audio_output_set_device_type : procedure(p_mi:Plibvlc_media_player_t; device_type:cint); cdecl;
+    libvlc_audio_toggle_mute : procedure(p_mi:Plibvlc_media_player_t); cdecl;
+    libvlc_audio_get_mute : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_audio_set_mute : procedure(p_mi:Plibvlc_media_player_t; status:cint); cdecl;
+    libvlc_audio_get_volume : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_audio_set_volume : function(p_mi:Plibvlc_media_player_t; i_volume:cint):cint; cdecl;
+    libvlc_audio_get_track_count : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_audio_get_track_description : function(p_mi:Plibvlc_media_player_t):plibvlc_track_description_t; cdecl;
+    libvlc_audio_get_track : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_audio_set_track : function(p_mi:Plibvlc_media_player_t; i_track:cint):cint; cdecl;
+    libvlc_audio_get_channel : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_audio_set_channel : function(p_mi:Plibvlc_media_player_t; channel:cint):cint; cdecl;
+    libvlc_audio_get_delay : function(p_mi:Plibvlc_media_player_t):int64_t; cdecl;
+    libvlc_audio_set_delay : function(p_mi:Plibvlc_media_player_t; i_delay:int64_t):cint; cdecl;
+    libvlc_media_list_new : function(p_instance:Plibvlc_instance_t):plibvlc_media_list_t; cdecl;
+    libvlc_media_list_release : procedure(p_ml:Plibvlc_media_list_t); cdecl;
+    libvlc_media_list_retain : procedure(p_ml:Plibvlc_media_list_t); cdecl;
+
+    libvlc_media_list_add_file_content : function(p_ml:Plibvlc_media_list_t; psz_uri:pcchar):cint; cdecl;
+    libvlc_media_list_set_media : procedure(p_ml:Plibvlc_media_list_t; p_md:Plibvlc_media_t); cdecl;
+    libvlc_media_list_media : function(p_ml:Plibvlc_media_list_t):plibvlc_media_t; cdecl;
+    libvlc_media_list_add_media : function(p_ml:Plibvlc_media_list_t; p_md:Plibvlc_media_t):cint; cdecl;
+    libvlc_media_list_insert_media : function(p_ml:Plibvlc_media_list_t; p_md:Plibvlc_media_t; i_pos:cint):cint; cdecl;
+    libvlc_media_list_remove_index : function(p_ml:Plibvlc_media_list_t; i_pos:cint):cint; cdecl;
+    libvlc_media_list_count : function(p_ml:Plibvlc_media_list_t):cint; cdecl;
+    libvlc_media_list_item_at_index : function(p_ml:Plibvlc_media_list_t; i_pos:cint):plibvlc_media_t; cdecl;
+    libvlc_media_list_index_of_item : function(p_ml:Plibvlc_media_list_t; p_md:Plibvlc_media_t):cint; cdecl;
+    libvlc_media_list_is_readonly : function(p_ml:Plibvlc_media_list_t):cint; cdecl;
+    libvlc_media_list_lock : procedure(p_ml:Plibvlc_media_list_t); cdecl;
+    libvlc_media_list_unlock : procedure(p_ml:Plibvlc_media_list_t); cdecl;
+    libvlc_media_list_event_manager : function(p_ml:Plibvlc_media_list_t):plibvlc_event_manager_t; cdecl;
+    libvlc_media_list_player_new : function(p_instance:Plibvlc_instance_t):plibvlc_media_list_player_t; cdecl;
+    libvlc_media_list_player_release : procedure(p_mlp:Plibvlc_media_list_player_t); cdecl;
+    libvlc_media_list_player_retain : procedure(p_mlp:Plibvlc_media_list_player_t); cdecl;
+    libvlc_media_list_player_event_manager : function(p_mlp:Plibvlc_media_list_player_t):plibvlc_event_manager_t; cdecl;
+    libvlc_media_list_player_set_media_player : procedure(p_mlp:Plibvlc_media_list_player_t; p_mi:Plibvlc_media_player_t); cdecl;
+    libvlc_media_list_player_set_media_list : procedure(p_mlp:Plibvlc_media_list_player_t; p_mlist:Plibvlc_media_list_t); cdecl;
+    libvlc_media_list_player_play : procedure(p_mlp:Plibvlc_media_list_player_t); cdecl;
+    libvlc_media_list_player_pause : procedure(p_mlp:Plibvlc_media_list_player_t); cdecl;
+    libvlc_media_list_player_is_playing : function(p_mlp:Plibvlc_media_list_player_t):cint; cdecl;
+    libvlc_media_list_player_get_state : function(p_mlp:Plibvlc_media_list_player_t):libvlc_state_t; cdecl;
+    libvlc_media_list_player_play_item_at_index : function(p_mlp:Plibvlc_media_list_player_t; i_index:cint):cint; cdecl;
+    libvlc_media_list_player_play_item : function(p_mlp:Plibvlc_media_list_player_t; p_md:Plibvlc_media_t):cint; cdecl;
+    libvlc_media_list_player_stop : procedure(p_mlp:Plibvlc_media_list_player_t); cdecl;
+    libvlc_media_list_player_next : function(p_mlp:Plibvlc_media_list_player_t):cint; cdecl;
+    libvlc_media_list_player_previous : function(p_mlp:Plibvlc_media_list_player_t):cint; cdecl;
+    libvlc_media_list_player_set_playback_mode : procedure(p_mlp:Plibvlc_media_list_player_t; e_mode:libvlc_playback_mode_t); cdecl;
+    libvlc_media_library_new : function(p_instance:Plibvlc_instance_t):plibvlc_media_library_t; cdecl;
+    libvlc_media_library_release : procedure(p_mlib:Plibvlc_media_library_t); cdecl;
+    libvlc_media_library_retain : procedure(p_mlib:Plibvlc_media_library_t); cdecl;
+    libvlc_media_library_load : function(p_mlib:Plibvlc_media_library_t):cint; cdecl;
+    libvlc_media_library_media_list : function(p_mlib:Plibvlc_media_library_t):plibvlc_media_list_t; cdecl;
+    libvlc_video_get_adjust_int : function(p_mi:Plibvlc_media_player_t; option:cunsigned):cint; cdecl;
+    libvlc_video_set_adjust_int : procedure(p_mi:Plibvlc_media_player_t; option:cunsigned; value:cint); cdecl;
+    libvlc_video_get_adjust_float : function(p_mi:Plibvlc_media_player_t; option:cunsigned):cfloat; cdecl;
+    libvlc_video_set_adjust_float : procedure(p_mi:Plibvlc_media_player_t; option:cunsigned; value:cfloat); cdecl;
+    libvlc_video_get_logo_int : function(p_mi:Plibvlc_media_player_t; option:cunsigned):cint; cdecl;
+    libvlc_video_set_logo_int : procedure(p_mi:Plibvlc_media_player_t; option:cunsigned; value:cint); cdecl;
+    libvlc_video_set_logo_string : procedure(p_mi:Plibvlc_media_player_t; option:cunsigned; psz_value:pcchar); cdecl;
+    libvlc_audio_set_format_callbacks : procedure(mp:Plibvlc_media_player_t; setup:libvlc_audio_setup_cb; cleanup:libvlc_audio_cleanup_cb); cdecl;
+    libvlc_audio_set_format : procedure(mp:Plibvlc_media_player_t; format:pcchar; rate:cunsigned; channels:cunsigned); cdecl;
+    libvlc_media_player_get_length : function(p_mi:Plibvlc_media_player_t):libvlc_time_t; cdecl;
+    libvlc_media_player_get_time : function(p_mi:Plibvlc_media_player_t):libvlc_time_t; cdecl;
+    libvlc_media_player_set_time : procedure(p_mi:Plibvlc_media_player_t; i_time:libvlc_time_t); cdecl;
+    libvlc_media_player_get_position : function(p_mi:Plibvlc_media_player_t):cfloat; cdecl;
+    libvlc_media_player_set_position : procedure(p_mi:Plibvlc_media_player_t; f_pos:cfloat); cdecl;
+    libvlc_media_player_set_chapter : procedure(p_mi:Plibvlc_media_player_t; i_chapter:cint); cdecl;
+    libvlc_media_player_get_chapter : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_media_player_get_chapter_count : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_media_player_will_play : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_media_player_get_chapter_count_for_title : function(p_mi:Plibvlc_media_player_t; i_title:cint):cint; cdecl;
+    libvlc_media_player_set_title : procedure(p_mi:Plibvlc_media_player_t; i_title:cint); cdecl;
+    libvlc_media_player_get_title : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_media_player_get_title_count : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_media_player_previous_chapter : procedure(p_mi:Plibvlc_media_player_t); cdecl;
+    libvlc_media_player_next_chapter : procedure(p_mi:Plibvlc_media_player_t); cdecl;
+    libvlc_media_player_get_rate : function(p_mi:Plibvlc_media_player_t):cfloat; cdecl;
+    libvlc_media_player_set_rate : function(p_mi:Plibvlc_media_player_t; rate:cfloat):cint; cdecl;
+    libvlc_media_player_get_state : function(p_mi:Plibvlc_media_player_t):libvlc_state_t; cdecl;
+    libvlc_media_player_get_fps : function(p_mi:Plibvlc_media_player_t):cfloat; cdecl;
+    libvlc_media_player_has_vout : function(p_mi:Plibvlc_media_player_t):cunsigned; cdecl;
+    libvlc_media_player_is_seekable : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_media_player_can_pause : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_media_player_next_frame : procedure(p_mi:Plibvlc_media_player_t); cdecl;
+    libvlc_media_player_navigate : procedure(p_mi:Plibvlc_media_player_t; navigate:cunsigned); cdecl;
+    libvlc_track_description_list_release : procedure(p_track_description:Plibvlc_track_description_t); cdecl;
+    libvlc_track_description_release : procedure(p_track_description:Plibvlc_track_description_t); cdecl;
+    libvlc_toggle_fullscreen : procedure(p_mi:Plibvlc_media_player_t); cdecl;
+    libvlc_set_fullscreen : procedure(p_mi:Plibvlc_media_player_t; b_fullscreen:cint); cdecl;
+    libvlc_get_fullscreen : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_video_set_key_input : procedure(p_mi:Plibvlc_media_player_t; on:cunsigned); cdecl;
+    libvlc_video_set_mouse_input : procedure(p_mi:Plibvlc_media_player_t; on:cunsigned); cdecl;
+    libvlc_video_get_size : function(p_mi:Plibvlc_media_player_t; num:cunsigned; px:pcunsigned; py:pcunsigned):cint; cdecl;
+    libvlc_video_get_height : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_video_get_width : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_video_get_cursor : function(p_mi:Plibvlc_media_player_t; num:cunsigned; px:pcint; py:pcint):cint; cdecl;
+    libvlc_video_get_scale : function(p_mi:Plibvlc_media_player_t):cfloat; cdecl;
+    libvlc_video_set_scale : procedure(p_mi:Plibvlc_media_player_t; f_factor:cfloat); cdecl;
+    libvlc_video_get_aspect_ratio : function(p_mi:Plibvlc_media_player_t):pcchar; cdecl;
+    libvlc_video_set_aspect_ratio : procedure(p_mi:Plibvlc_media_player_t; psz_aspect:pcchar); cdecl;
+    libvlc_video_get_spu : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_video_get_spu_count : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_video_get_spu_description : function(p_mi:Plibvlc_media_player_t):plibvlc_track_description_t; cdecl;
+    libvlc_video_set_spu : function(p_mi:Plibvlc_media_player_t; i_spu:cunsigned):cint; cdecl;
+    libvlc_video_set_subtitle_file : function(p_mi:Plibvlc_media_player_t; psz_subtitle:pcchar):cint; cdecl;
+    libvlc_video_get_spu_delay : function(p_mi:Plibvlc_media_player_t):int64_t; cdecl;
+    libvlc_video_set_spu_delay : function(p_mi:Plibvlc_media_player_t; i_delay:int64_t):cint; cdecl;
+    libvlc_video_get_title_description : function(p_mi:Plibvlc_media_player_t):plibvlc_track_description_t; cdecl;
+    libvlc_video_get_chapter_description : function(p_mi:Plibvlc_media_player_t; i_title:cint):plibvlc_track_description_t; cdecl;
+    libvlc_video_get_crop_geometry : function(p_mi:Plibvlc_media_player_t):pcchar; cdecl;
+    libvlc_video_set_crop_geometry : procedure(p_mi:Plibvlc_media_player_t; psz_geometry:pcchar); cdecl;
+    libvlc_video_get_teletext : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_video_set_teletext : procedure(p_mi:Plibvlc_media_player_t; i_page:cint); cdecl;
+    libvlc_toggle_teletext : procedure(p_mi:Plibvlc_media_player_t); cdecl;
+    libvlc_video_get_track_count : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_video_get_track_description : function(p_mi:Plibvlc_media_player_t):plibvlc_track_description_t; cdecl;
+    libvlc_video_get_track : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+    libvlc_video_set_track : function(p_mi:Plibvlc_media_player_t; i_track:cint):cint; cdecl;
+    libvlc_video_take_snapshot : function(p_mi:Plibvlc_media_player_t; num:cunsigned; psz_filepath:pcchar; i_width:cuint; i_height:cuint):cint; cdecl;
+    libvlc_video_set_deinterlace : procedure(p_mi:Plibvlc_media_player_t; psz_mode:pcchar); cdecl;
+    libvlc_video_get_marquee_int : function(p_mi:Plibvlc_media_player_t; option:cunsigned):cint; cdecl;
+    libvlc_video_get_marquee_string : function(p_mi:Plibvlc_media_player_t; option:cunsigned):pcchar; cdecl;
+    libvlc_video_set_marquee_int : procedure(p_mi:Plibvlc_media_player_t; option:cunsigned; i_val:cint); cdecl;
+    libvlc_video_set_marquee_string : procedure(p_mi:Plibvlc_media_player_t; option:cunsigned; psz_text:pcchar); cdecl;
+    libvlc_audio_set_callbacks : procedure(mp:Plibvlc_media_player_t; play:libvlc_audio_play_cb; pause:libvlc_audio_pause_cb; resume:libvlc_audio_resume_cb; flush:libvlc_audio_flush_cb; 
+      drain:libvlc_audio_drain_cb; opaque:pointer); cdecl;
+    libvlc_audio_set_volume_callback : procedure(mp:Plibvlc_media_player_t; set_volume:libvlc_audio_set_volume_cb); cdecl;
+    libvlc_video_set_callbacks : procedure(mp:Plibvlc_media_player_t; lock:libvlc_video_lock_cb; unlock:libvlc_video_unlock_cb; display:libvlc_video_display_cb; opaque:pointer); cdecl;
+    libvlc_video_set_format : procedure(mp:Plibvlc_media_player_t; chroma:pcchar; width:cunsigned; height:cunsigned; pitch:cunsigned); cdecl;
+    libvlc_video_set_format_callbacks : procedure(mp:Plibvlc_media_player_t; setup:libvlc_video_format_cb; cleanup:libvlc_video_cleanup_cb); cdecl;
+    libvlc_media_player_set_nsobject : procedure(p_mi:Plibvlc_media_player_t; drawable:pointer); cdecl;
+    libvlc_media_player_get_nsobject : function(p_mi:Plibvlc_media_player_t):pointer; cdecl;
+    libvlc_media_player_set_agl : procedure(p_mi:Plibvlc_media_player_t; drawable:uint32_t); cdecl;
+    libvlc_media_player_get_agl : function(p_mi:Plibvlc_media_player_t):uint32_t; cdecl;
+    libvlc_media_player_set_xwindow : procedure(p_mi:Plibvlc_media_player_t; drawable:uint32_t); cdecl;
+    libvlc_media_player_get_xwindow : function(p_mi:Plibvlc_media_player_t):uint32_t; cdecl;
+    libvlc_media_player_set_hwnd : procedure(p_mi:Plibvlc_media_player_t; drawable:pointer); cdecl;
+    libvlc_media_player_get_hwnd : function(p_mi:Plibvlc_media_player_t):pointer; cdecl;
+    libvlc_media_discoverer_new_from_name : function(p_inst:Plibvlc_instance_t; psz_name:pcchar):plibvlc_media_discoverer_t; cdecl;
+    libvlc_media_discoverer_release : procedure(p_mdis:Plibvlc_media_discoverer_t); cdecl;
+    libvlc_media_discoverer_localized_name : function(p_mdis:Plibvlc_media_discoverer_t):pcchar; cdecl;
+    libvlc_media_discoverer_media_list : function(p_mdis:Plibvlc_media_discoverer_t):plibvlc_media_list_t; cdecl;
+    libvlc_media_discoverer_event_manager : function(p_mdis:Plibvlc_media_discoverer_t):plibvlc_event_manager_t; cdecl;
+    libvlc_media_discoverer_is_running : function(p_mdis:Plibvlc_media_discoverer_t):cint; cdecl;
+    libvlc_vlm_release : procedure(p_instance:Plibvlc_instance_t); cdecl;
+    libvlc_vlm_add_broadcast : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; psz_input:pcchar; psz_output:pcchar; i_options:cint; 
+      ppsz_options:Ppcchar; b_enabled:cint; b_loop:cint):cint; cdecl;
+    libvlc_vlm_add_vod : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; psz_input:pcchar; i_options:cint; ppsz_options:Ppcchar; 
+      b_enabled:cint; psz_mux:pcchar):cint; cdecl;
+    libvlc_vlm_del_media : function(p_instance:Plibvlc_instance_t; psz_name:pcchar):cint; cdecl;
+    libvlc_vlm_set_enabled : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; b_enabled:cint):cint; cdecl;
+    libvlc_vlm_set_output : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; psz_output:pcchar):cint; cdecl;
+    libvlc_vlm_set_input : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; psz_input:pcchar):cint; cdecl;
+    libvlc_vlm_add_input : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; psz_input:pcchar):cint; cdecl;
+    libvlc_vlm_set_loop : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; b_loop:cint):cint; cdecl;
+    libvlc_vlm_set_mux : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; psz_mux:pcchar):cint; cdecl;
+    libvlc_vlm_change_media : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; psz_input:pcchar; psz_output:pcchar; i_options:cint; 
+      ppsz_options:Ppcchar; b_enabled:cint; b_loop:cint):cint; cdecl;
+    libvlc_vlm_play_media : function(p_instance:Plibvlc_instance_t; psz_name:pcchar):cint; cdecl;
+    libvlc_vlm_stop_media : function(p_instance:Plibvlc_instance_t; psz_name:pcchar):cint; cdecl;
+    libvlc_vlm_pause_media : function(p_instance:Plibvlc_instance_t; psz_name:pcchar):cint; cdecl;
+    libvlc_vlm_seek_media : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; f_percentage:cfloat):cint; cdecl;
+    libvlc_vlm_show_media : function(p_instance:Plibvlc_instance_t; psz_name:pcchar):pcchar; cdecl;
+    libvlc_vlm_get_media_instance_position : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; i_instance:cint):cfloat; cdecl;
+    libvlc_vlm_get_media_instance_time : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; i_instance:cint):cint; cdecl;
+    libvlc_vlm_get_media_instance_length : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; i_instance:cint):cint; cdecl;
+    libvlc_vlm_get_media_instance_rate : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; i_instance:cint):cint; cdecl;
+    libvlc_vlm_get_event_manager : function(p_instance:Plibvlc_instance_t):plibvlc_event_manager_t; cdecl;
+    libvlc_playlist_play : procedure(p_instance:Plibvlc_instance_t; i_id:cint; i_options:cint; ppsz_options:Ppcchar); cdecl;
+
+Procedure Freelibvlc;
+Procedure Loadlibvlc(lib : AnsiString; CheckProcNames : Boolean = False);
+
+implementation
+
+uses
+  SysUtils, dynlibs;
+
+var
+  hlib : tlibhandle;
+  LibRefCount : Integer;
+
+procedure Freelibvlc;
+
+begin
+  if (LibRefCount>0) then
+    Dec(LibRefCount);
+  if LibRefCount>0 then
+    exit;
+  FreeLibrary(hlib);
+  libvlc_errmsg:=nil;
+  libvlc_clearerr:=nil;
+  libvlc_printerr:=nil;
+  libvlc_new:=nil;
+  libvlc_release:=nil;
+  libvlc_retain:=nil;
+  libvlc_add_intf:=nil;
+  libvlc_set_exit_handler:=nil;
+  libvlc_wait:=nil;
+  libvlc_set_user_agent:=nil;
+  libvlc_get_version:=nil;
+  libvlc_get_compiler:=nil;
+  libvlc_get_changeset:=nil;
+  libvlc_free:=nil;
+  libvlc_event_attach:=nil;
+  libvlc_event_detach:=nil;
+  libvlc_event_type_name:=nil;
+  libvlc_get_log_verbosity:=nil;
+  libvlc_set_log_verbosity:=nil;
+  libvlc_log_open:=nil;
+  libvlc_log_close:=nil;
+  libvlc_log_count:=nil;
+  libvlc_log_clear:=nil;
+  libvlc_log_get_iterator:=nil;
+  libvlc_log_iterator_free:=nil;
+  libvlc_log_iterator_has_next:=nil;
+  libvlc_log_iterator_next:=nil;
+  libvlc_module_description_list_release:=nil;
+  libvlc_audio_filter_list_get:=nil;
+  libvlc_video_filter_list_get:=nil;
+  libvlc_clock:=nil;
+  libvlc_media_new_location:=nil;
+  libvlc_media_new_path:=nil;
+  libvlc_media_new_fd:=nil;
+  libvlc_media_new_as_node:=nil;
+  libvlc_media_add_option:=nil;
+  libvlc_media_add_option_flag:=nil;
+  libvlc_media_retain:=nil;
+  libvlc_media_release:=nil;
+  libvlc_media_get_mrl:=nil;
+  libvlc_media_duplicate:=nil;
+  libvlc_media_get_meta:=nil;
+  libvlc_media_set_meta:=nil;
+  libvlc_media_save_meta:=nil;
+  libvlc_media_get_state:=nil;
+  libvlc_media_get_stats:=nil;
+  libvlc_media_subitems:=nil;
+  libvlc_media_event_manager:=nil;
+  libvlc_media_get_duration:=nil;
+  libvlc_media_parse:=nil;
+  libvlc_media_parse_async:=nil;
+  libvlc_media_is_parsed:=nil;
+  libvlc_media_set_user_data:=nil;
+  libvlc_media_get_user_data:=nil;
+  libvlc_media_get_tracks_info:=nil;
+  libvlc_media_player_new:=nil;
+  libvlc_media_player_new_from_media:=nil;
+  libvlc_media_player_release:=nil;
+  libvlc_media_player_retain:=nil;
+  libvlc_media_player_set_media:=nil;
+  libvlc_media_player_get_media:=nil;
+  libvlc_media_player_event_manager:=nil;
+  libvlc_media_player_is_playing:=nil;
+  libvlc_media_player_play:=nil;
+  libvlc_media_player_set_pause:=nil;
+  libvlc_media_player_pause:=nil;
+  libvlc_media_player_stop:=nil;
+  libvlc_video_set_callbacks:=nil;
+  libvlc_video_set_format:=nil;
+  libvlc_video_set_format_callbacks:=nil;
+  libvlc_media_player_set_nsobject:=nil;
+  libvlc_media_player_get_nsobject:=nil;
+  libvlc_media_player_set_agl:=nil;
+  libvlc_media_player_get_agl:=nil;
+  libvlc_media_player_set_xwindow:=nil;
+  libvlc_media_player_get_xwindow:=nil;
+  libvlc_media_player_set_hwnd:=nil;
+  libvlc_media_player_get_hwnd:=nil;
+  libvlc_audio_set_callbacks:=nil;
+  libvlc_audio_set_volume_callback:=nil;
+  libvlc_audio_set_format_callbacks:=nil;
+  libvlc_audio_set_format:=nil;
+  libvlc_media_player_get_length:=nil;
+  libvlc_media_player_get_time:=nil;
+  libvlc_media_player_set_time:=nil;
+  libvlc_media_player_get_position:=nil;
+  libvlc_media_player_set_position:=nil;
+  libvlc_media_player_set_chapter:=nil;
+  libvlc_media_player_get_chapter:=nil;
+  libvlc_media_player_get_chapter_count:=nil;
+  libvlc_media_player_will_play:=nil;
+  libvlc_media_player_get_chapter_count_for_title:=nil;
+  libvlc_media_player_set_title:=nil;
+  libvlc_media_player_get_title:=nil;
+  libvlc_media_player_get_title_count:=nil;
+  libvlc_media_player_previous_chapter:=nil;
+  libvlc_media_player_next_chapter:=nil;
+  libvlc_media_player_get_rate:=nil;
+  libvlc_media_player_set_rate:=nil;
+  libvlc_media_player_get_state:=nil;
+  libvlc_media_player_get_fps:=nil;
+  libvlc_media_player_has_vout:=nil;
+  libvlc_media_player_is_seekable:=nil;
+  libvlc_media_player_can_pause:=nil;
+  libvlc_media_player_next_frame:=nil;
+  libvlc_media_player_navigate:=nil;
+  libvlc_track_description_list_release:=nil;
+  libvlc_track_description_release:=nil;
+  libvlc_toggle_fullscreen:=nil;
+  libvlc_set_fullscreen:=nil;
+  libvlc_get_fullscreen:=nil;
+  libvlc_video_set_key_input:=nil;
+  libvlc_video_set_mouse_input:=nil;
+  libvlc_video_get_size:=nil;
+  libvlc_video_get_height:=nil;
+  libvlc_video_get_width:=nil;
+  libvlc_video_get_cursor:=nil;
+  libvlc_video_get_scale:=nil;
+  libvlc_video_set_scale:=nil;
+  libvlc_video_get_aspect_ratio:=nil;
+  libvlc_video_set_aspect_ratio:=nil;
+  libvlc_video_get_spu:=nil;
+  libvlc_video_get_spu_count:=nil;
+  libvlc_video_get_spu_description:=nil;
+  libvlc_video_set_spu:=nil;
+  libvlc_video_set_subtitle_file:=nil;
+  libvlc_video_get_spu_delay:=nil;
+  libvlc_video_set_spu_delay:=nil;
+  libvlc_video_get_title_description:=nil;
+  libvlc_video_get_chapter_description:=nil;
+  libvlc_video_get_crop_geometry:=nil;
+  libvlc_video_set_crop_geometry:=nil;
+  libvlc_video_get_teletext:=nil;
+  libvlc_video_set_teletext:=nil;
+  libvlc_toggle_teletext:=nil;
+  libvlc_video_get_track_count:=nil;
+  libvlc_video_get_track_description:=nil;
+  libvlc_video_get_track:=nil;
+  libvlc_video_set_track:=nil;
+  libvlc_video_take_snapshot:=nil;
+  libvlc_video_set_deinterlace:=nil;
+  libvlc_video_get_marquee_int:=nil;
+  libvlc_video_get_marquee_string:=nil;
+  libvlc_video_set_marquee_int:=nil;
+  libvlc_video_set_marquee_string:=nil;
+  libvlc_video_get_logo_int:=nil;
+  libvlc_video_set_logo_int:=nil;
+  libvlc_video_set_logo_string:=nil;
+  libvlc_video_get_adjust_int:=nil;
+  libvlc_video_set_adjust_int:=nil;
+  libvlc_video_get_adjust_float:=nil;
+  libvlc_video_set_adjust_float:=nil;
+  libvlc_audio_output_list_get:=nil;
+  libvlc_audio_output_list_release:=nil;
+  libvlc_audio_output_set:=nil;
+  libvlc_audio_output_device_count:=nil;
+  libvlc_audio_output_device_longname:=nil;
+  libvlc_audio_output_device_id:=nil;
+  libvlc_audio_output_device_set:=nil;
+  libvlc_audio_output_get_device_type:=nil;
+  libvlc_audio_output_set_device_type:=nil;
+  libvlc_audio_toggle_mute:=nil;
+  libvlc_audio_get_mute:=nil;
+  libvlc_audio_set_mute:=nil;
+  libvlc_audio_get_volume:=nil;
+  libvlc_audio_set_volume:=nil;
+  libvlc_audio_get_track_count:=nil;
+  libvlc_audio_get_track_description:=nil;
+  libvlc_audio_get_track:=nil;
+  libvlc_audio_set_track:=nil;
+  libvlc_audio_get_channel:=nil;
+  libvlc_audio_set_channel:=nil;
+  libvlc_audio_get_delay:=nil;
+  libvlc_audio_set_delay:=nil;
+  libvlc_media_list_new:=nil;
+  libvlc_media_list_release:=nil;
+  libvlc_media_list_retain:=nil;
+  libvlc_media_list_add_file_content:=nil;
+  libvlc_media_list_set_media:=nil;
+  libvlc_media_list_media:=nil;
+  libvlc_media_list_add_media:=nil;
+  libvlc_media_list_insert_media:=nil;
+  libvlc_media_list_remove_index:=nil;
+  libvlc_media_list_count:=nil;
+  libvlc_media_list_item_at_index:=nil;
+  libvlc_media_list_index_of_item:=nil;
+  libvlc_media_list_is_readonly:=nil;
+  libvlc_media_list_lock:=nil;
+  libvlc_media_list_unlock:=nil;
+  libvlc_media_list_event_manager:=nil;
+  libvlc_media_list_player_new:=nil;
+  libvlc_media_list_player_release:=nil;
+  libvlc_media_list_player_retain:=nil;
+  libvlc_media_list_player_event_manager:=nil;
+  libvlc_media_list_player_set_media_player:=nil;
+  libvlc_media_list_player_set_media_list:=nil;
+  libvlc_media_list_player_play:=nil;
+  libvlc_media_list_player_pause:=nil;
+  libvlc_media_list_player_is_playing:=nil;
+  libvlc_media_list_player_get_state:=nil;
+  libvlc_media_list_player_play_item_at_index:=nil;
+  libvlc_media_list_player_play_item:=nil;
+  libvlc_media_list_player_stop:=nil;
+  libvlc_media_list_player_next:=nil;
+  libvlc_media_list_player_previous:=nil;
+  libvlc_media_list_player_set_playback_mode:=nil;
+  libvlc_media_library_new:=nil;
+  libvlc_media_library_release:=nil;
+  libvlc_media_library_retain:=nil;
+  libvlc_media_library_load:=nil;
+  libvlc_media_library_media_list:=nil;
+  libvlc_media_discoverer_new_from_name:=nil;
+  libvlc_media_discoverer_release:=nil;
+  libvlc_media_discoverer_localized_name:=nil;
+  libvlc_media_discoverer_media_list:=nil;
+  libvlc_media_discoverer_event_manager:=nil;
+  libvlc_media_discoverer_is_running:=nil;
+  libvlc_vlm_release:=nil;
+  libvlc_vlm_add_broadcast:=nil;
+  libvlc_vlm_add_vod:=nil;
+  libvlc_vlm_del_media:=nil;
+  libvlc_vlm_set_enabled:=nil;
+  libvlc_vlm_set_output:=nil;
+  libvlc_vlm_set_input:=nil;
+  libvlc_vlm_add_input:=nil;
+  libvlc_vlm_set_loop:=nil;
+  libvlc_vlm_set_mux:=nil;
+  libvlc_vlm_change_media:=nil;
+  libvlc_vlm_play_media:=nil;
+  libvlc_vlm_stop_media:=nil;
+  libvlc_vlm_pause_media:=nil;
+  libvlc_vlm_seek_media:=nil;
+  libvlc_vlm_show_media:=nil;
+  libvlc_vlm_get_media_instance_position:=nil;
+  libvlc_vlm_get_media_instance_time:=nil;
+  libvlc_vlm_get_media_instance_length:=nil;
+  libvlc_vlm_get_media_instance_rate:=nil;
+  libvlc_vlm_get_event_manager:=nil;
+  libvlc_playlist_play:=nil;
+end;
+
+
+Procedure Loadlibvlc(lib : AnsiString; CheckProcNames : Boolean = False);
+
+  Function GetProcAddress(h : TLibHandle; Name : AnsiString) : Pointer;
+  
+  begin
+    Result:=dynlibs.GetProcAddress(h,Name);
+    If (Result=Nil) and CheckProcNames then
+      raise Exception.CreateFmt('Could not find procedure address: %s ',[Name]);
+  end;
+  
+  Procedure EM(FN : String);
+  
+  begin
+    {$ifndef VER2_6}
+    Raise Exception.CreateFmt('Could not load library "%s": %s',[FN,GetLoadErrorStr]);
+    {$else}
+    raise Exception.CreateFmt('Could not load library "%s"',[FN]);
+    {$endif}
+  end;
+  
+  
+  
+Var
+  D : String;
+  
+begin
+  if (hLib<>NilHandle) then
+    begin
+    Inc(LibRefCount);
+    Exit;
+    end;
+  D:=ExtractFilePath(lib);
+  {$ifdef windows}
+  if (LoadLibrary(d+corelibname)=NilHandle) then
+    if (d='') and (LoadLibrary(DefaultlibPath+corelibname)=NilHandle) then
+      EM(DefaultlibPath+corelibname);
+  {$endif}
+  hlib:=LoadLibrary(lib);
+  if (hlib=NilHandle) then
+{$ifndef windows}
+    EM(Lib);
+{$else}
+    if (d='') then
+      begin
+      hlib:=LoadLibrary(DefaultlibPath+ExtractFileName(Lib));
+      if (hlib=NilHandle) then
+        EM(Lib);
+      end;
+{$endif}
+  Inc(LibRefCount);
+  pointer(libvlc_errmsg):=GetProcAddress(hlib,'libvlc_errmsg');
+  pointer(libvlc_clearerr):=GetProcAddress(hlib,'libvlc_clearerr');
+  pointer(libvlc_printerr):=GetProcAddress(hlib,'libvlc_printerr');
+  pointer(libvlc_new):=GetProcAddress(hlib,'libvlc_new');
+  pointer(libvlc_release):=GetProcAddress(hlib,'libvlc_release');
+  pointer(libvlc_retain):=GetProcAddress(hlib,'libvlc_retain');
+  pointer(libvlc_add_intf):=GetProcAddress(hlib,'libvlc_add_intf');
+  pointer(libvlc_set_exit_handler):=GetProcAddress(hlib,'libvlc_set_exit_handler');
+  pointer(libvlc_wait):=GetProcAddress(hlib,'libvlc_wait');
+  pointer(libvlc_set_user_agent):=GetProcAddress(hlib,'libvlc_set_user_agent');
+  pointer(libvlc_get_version):=GetProcAddress(hlib,'libvlc_get_version');
+  pointer(libvlc_get_compiler):=GetProcAddress(hlib,'libvlc_get_compiler');
+  pointer(libvlc_get_changeset):=GetProcAddress(hlib,'libvlc_get_changeset');
+  pointer(libvlc_free):=GetProcAddress(hlib,'libvlc_free');
+  pointer(libvlc_event_attach):=GetProcAddress(hlib,'libvlc_event_attach');
+  pointer(libvlc_event_detach):=GetProcAddress(hlib,'libvlc_event_detach');
+  pointer(libvlc_event_type_name):=GetProcAddress(hlib,'libvlc_event_type_name');
+  pointer(libvlc_get_log_verbosity):=GetProcAddress(hlib,'libvlc_get_log_verbosity');
+  pointer(libvlc_set_log_verbosity):=GetProcAddress(hlib,'libvlc_set_log_verbosity');
+  pointer(libvlc_log_open):=GetProcAddress(hlib,'libvlc_log_open');
+  pointer(libvlc_log_close):=GetProcAddress(hlib,'libvlc_log_close');
+  pointer(libvlc_log_count):=GetProcAddress(hlib,'libvlc_log_count');
+  pointer(libvlc_log_clear):=GetProcAddress(hlib,'libvlc_log_clear');
+  pointer(libvlc_log_get_iterator):=GetProcAddress(hlib,'libvlc_log_get_iterator');
+  pointer(libvlc_log_iterator_free):=GetProcAddress(hlib,'libvlc_log_iterator_free');
+  pointer(libvlc_log_iterator_has_next):=GetProcAddress(hlib,'libvlc_log_iterator_has_next');
+  pointer(libvlc_log_iterator_next):=GetProcAddress(hlib,'libvlc_log_iterator_next');
+  pointer(libvlc_module_description_list_release):=GetProcAddress(hlib,'libvlc_module_description_list_release');
+  pointer(libvlc_audio_filter_list_get):=GetProcAddress(hlib,'libvlc_audio_filter_list_get');
+  pointer(libvlc_video_filter_list_get):=GetProcAddress(hlib,'libvlc_video_filter_list_get');
+  pointer(libvlc_clock):=GetProcAddress(hlib,'libvlc_clock');
+  pointer(libvlc_media_new_location):=GetProcAddress(hlib,'libvlc_media_new_location');
+  pointer(libvlc_media_new_path):=GetProcAddress(hlib,'libvlc_media_new_path');
+  pointer(libvlc_media_new_fd):=GetProcAddress(hlib,'libvlc_media_new_fd');
+  pointer(libvlc_media_new_as_node):=GetProcAddress(hlib,'libvlc_media_new_as_node');
+  pointer(libvlc_media_add_option):=GetProcAddress(hlib,'libvlc_media_add_option');
+  pointer(libvlc_media_add_option_flag):=GetProcAddress(hlib,'libvlc_media_add_option_flag');
+  pointer(libvlc_media_retain):=GetProcAddress(hlib,'libvlc_media_retain');
+  pointer(libvlc_media_release):=GetProcAddress(hlib,'libvlc_media_release');
+  pointer(libvlc_media_get_mrl):=GetProcAddress(hlib,'libvlc_media_get_mrl');
+  pointer(libvlc_media_duplicate):=GetProcAddress(hlib,'libvlc_media_duplicate');
+  pointer(libvlc_media_get_meta):=GetProcAddress(hlib,'libvlc_media_get_meta');
+  pointer(libvlc_media_set_meta):=GetProcAddress(hlib,'libvlc_media_set_meta');
+  pointer(libvlc_media_save_meta):=GetProcAddress(hlib,'libvlc_media_save_meta');
+  pointer(libvlc_media_get_state):=GetProcAddress(hlib,'libvlc_media_get_state');
+  pointer(libvlc_media_get_stats):=GetProcAddress(hlib,'libvlc_media_get_stats');
+  pointer(libvlc_media_subitems):=GetProcAddress(hlib,'libvlc_media_subitems');
+  pointer(libvlc_media_event_manager):=GetProcAddress(hlib,'libvlc_media_event_manager');
+  pointer(libvlc_media_get_duration):=GetProcAddress(hlib,'libvlc_media_get_duration');
+  pointer(libvlc_media_parse):=GetProcAddress(hlib,'libvlc_media_parse');
+  pointer(libvlc_media_parse_async):=GetProcAddress(hlib,'libvlc_media_parse_async');
+  pointer(libvlc_media_is_parsed):=GetProcAddress(hlib,'libvlc_media_is_parsed');
+  pointer(libvlc_media_set_user_data):=GetProcAddress(hlib,'libvlc_media_set_user_data');
+  pointer(libvlc_media_get_user_data):=GetProcAddress(hlib,'libvlc_media_get_user_data');
+  pointer(libvlc_media_get_tracks_info):=GetProcAddress(hlib,'libvlc_media_get_tracks_info');
+  pointer(libvlc_media_player_new):=GetProcAddress(hlib,'libvlc_media_player_new');
+  pointer(libvlc_media_player_new_from_media):=GetProcAddress(hlib,'libvlc_media_player_new_from_media');
+  pointer(libvlc_media_player_release):=GetProcAddress(hlib,'libvlc_media_player_release');
+  pointer(libvlc_media_player_retain):=GetProcAddress(hlib,'libvlc_media_player_retain');
+  pointer(libvlc_media_player_set_media):=GetProcAddress(hlib,'libvlc_media_player_set_media');
+  pointer(libvlc_media_player_get_media):=GetProcAddress(hlib,'libvlc_media_player_get_media');
+  pointer(libvlc_media_player_event_manager):=GetProcAddress(hlib,'libvlc_media_player_event_manager');
+  pointer(libvlc_media_player_is_playing):=GetProcAddress(hlib,'libvlc_media_player_is_playing');
+  pointer(libvlc_media_player_play):=GetProcAddress(hlib,'libvlc_media_player_play');
+  pointer(libvlc_media_player_set_pause):=GetProcAddress(hlib,'libvlc_media_player_set_pause');
+  pointer(libvlc_media_player_pause):=GetProcAddress(hlib,'libvlc_media_player_pause');
+  pointer(libvlc_media_player_stop):=GetProcAddress(hlib,'libvlc_media_player_stop');
+  pointer(libvlc_video_set_callbacks):=GetProcAddress(hlib,'libvlc_video_set_callbacks');
+  pointer(libvlc_video_set_format):=GetProcAddress(hlib,'libvlc_video_set_format');
+  pointer(libvlc_video_set_format_callbacks):=GetProcAddress(hlib,'libvlc_video_set_format_callbacks');
+  pointer(libvlc_media_player_set_nsobject):=GetProcAddress(hlib,'libvlc_media_player_set_nsobject');
+  pointer(libvlc_media_player_get_nsobject):=GetProcAddress(hlib,'libvlc_media_player_get_nsobject');
+  pointer(libvlc_media_player_set_agl):=GetProcAddress(hlib,'libvlc_media_player_set_agl');
+  pointer(libvlc_media_player_get_agl):=GetProcAddress(hlib,'libvlc_media_player_get_agl');
+  pointer(libvlc_media_player_set_xwindow):=GetProcAddress(hlib,'libvlc_media_player_set_xwindow');
+  pointer(libvlc_media_player_get_xwindow):=GetProcAddress(hlib,'libvlc_media_player_get_xwindow');
+  pointer(libvlc_media_player_set_hwnd):=GetProcAddress(hlib,'libvlc_media_player_set_hwnd');
+  pointer(libvlc_media_player_get_hwnd):=GetProcAddress(hlib,'libvlc_media_player_get_hwnd');
+  pointer(libvlc_audio_set_callbacks):=GetProcAddress(hlib,'libvlc_audio_set_callbacks');
+  pointer(libvlc_audio_set_volume_callback):=GetProcAddress(hlib,'libvlc_audio_set_volume_callback');
+  pointer(libvlc_audio_set_format_callbacks):=GetProcAddress(hlib,'libvlc_audio_set_format_callbacks');
+  pointer(libvlc_audio_set_format):=GetProcAddress(hlib,'libvlc_audio_set_format');
+  pointer(libvlc_media_player_get_length):=GetProcAddress(hlib,'libvlc_media_player_get_length');
+  pointer(libvlc_media_player_get_time):=GetProcAddress(hlib,'libvlc_media_player_get_time');
+  pointer(libvlc_media_player_set_time):=GetProcAddress(hlib,'libvlc_media_player_set_time');
+  pointer(libvlc_media_player_get_position):=GetProcAddress(hlib,'libvlc_media_player_get_position');
+  pointer(libvlc_media_player_set_position):=GetProcAddress(hlib,'libvlc_media_player_set_position');
+  pointer(libvlc_media_player_set_chapter):=GetProcAddress(hlib,'libvlc_media_player_set_chapter');
+  pointer(libvlc_media_player_get_chapter):=GetProcAddress(hlib,'libvlc_media_player_get_chapter');
+  pointer(libvlc_media_player_get_chapter_count):=GetProcAddress(hlib,'libvlc_media_player_get_chapter_count');
+  pointer(libvlc_media_player_will_play):=GetProcAddress(hlib,'libvlc_media_player_will_play');
+  pointer(libvlc_media_player_get_chapter_count_for_title):=GetProcAddress(hlib,'libvlc_media_player_get_chapter_count_for_title');
+  pointer(libvlc_media_player_set_title):=GetProcAddress(hlib,'libvlc_media_player_set_title');
+  pointer(libvlc_media_player_get_title):=GetProcAddress(hlib,'libvlc_media_player_get_title');
+  pointer(libvlc_media_player_get_title_count):=GetProcAddress(hlib,'libvlc_media_player_get_title_count');
+  pointer(libvlc_media_player_previous_chapter):=GetProcAddress(hlib,'libvlc_media_player_previous_chapter');
+  pointer(libvlc_media_player_next_chapter):=GetProcAddress(hlib,'libvlc_media_player_next_chapter');
+  pointer(libvlc_media_player_get_rate):=GetProcAddress(hlib,'libvlc_media_player_get_rate');
+  pointer(libvlc_media_player_set_rate):=GetProcAddress(hlib,'libvlc_media_player_set_rate');
+  pointer(libvlc_media_player_get_state):=GetProcAddress(hlib,'libvlc_media_player_get_state');
+  pointer(libvlc_media_player_get_fps):=GetProcAddress(hlib,'libvlc_media_player_get_fps');
+  pointer(libvlc_media_player_has_vout):=GetProcAddress(hlib,'libvlc_media_player_has_vout');
+  pointer(libvlc_media_player_is_seekable):=GetProcAddress(hlib,'libvlc_media_player_is_seekable');
+  pointer(libvlc_media_player_can_pause):=GetProcAddress(hlib,'libvlc_media_player_can_pause');
+  pointer(libvlc_media_player_next_frame):=GetProcAddress(hlib,'libvlc_media_player_next_frame');
+  pointer(libvlc_media_player_navigate):=GetProcAddress(hlib,'libvlc_media_player_navigate');
+  pointer(libvlc_track_description_list_release):=GetProcAddress(hlib,'libvlc_track_description_list_release');
+  pointer(libvlc_track_description_release):=GetProcAddress(hlib,'libvlc_track_description_release');
+  pointer(libvlc_toggle_fullscreen):=GetProcAddress(hlib,'libvlc_toggle_fullscreen');
+  pointer(libvlc_set_fullscreen):=GetProcAddress(hlib,'libvlc_set_fullscreen');
+  pointer(libvlc_get_fullscreen):=GetProcAddress(hlib,'libvlc_get_fullscreen');
+  pointer(libvlc_video_set_key_input):=GetProcAddress(hlib,'libvlc_video_set_key_input');
+  pointer(libvlc_video_set_mouse_input):=GetProcAddress(hlib,'libvlc_video_set_mouse_input');
+  pointer(libvlc_video_get_size):=GetProcAddress(hlib,'libvlc_video_get_size');
+  pointer(libvlc_video_get_height):=GetProcAddress(hlib,'libvlc_video_get_height');
+  pointer(libvlc_video_get_width):=GetProcAddress(hlib,'libvlc_video_get_width');
+  pointer(libvlc_video_get_cursor):=GetProcAddress(hlib,'libvlc_video_get_cursor');
+  pointer(libvlc_video_get_scale):=GetProcAddress(hlib,'libvlc_video_get_scale');
+  pointer(libvlc_video_set_scale):=GetProcAddress(hlib,'libvlc_video_set_scale');
+  pointer(libvlc_video_get_aspect_ratio):=GetProcAddress(hlib,'libvlc_video_get_aspect_ratio');
+  pointer(libvlc_video_set_aspect_ratio):=GetProcAddress(hlib,'libvlc_video_set_aspect_ratio');
+  pointer(libvlc_video_get_spu):=GetProcAddress(hlib,'libvlc_video_get_spu');
+  pointer(libvlc_video_get_spu_count):=GetProcAddress(hlib,'libvlc_video_get_spu_count');
+  pointer(libvlc_video_get_spu_description):=GetProcAddress(hlib,'libvlc_video_get_spu_description');
+  pointer(libvlc_video_set_spu):=GetProcAddress(hlib,'libvlc_video_set_spu');
+  pointer(libvlc_video_set_subtitle_file):=GetProcAddress(hlib,'libvlc_video_set_subtitle_file');
+  pointer(libvlc_video_get_spu_delay):=GetProcAddress(hlib,'libvlc_video_get_spu_delay');
+  pointer(libvlc_video_set_spu_delay):=GetProcAddress(hlib,'libvlc_video_set_spu_delay');
+  pointer(libvlc_video_get_title_description):=GetProcAddress(hlib,'libvlc_video_get_title_description');
+  pointer(libvlc_video_get_chapter_description):=GetProcAddress(hlib,'libvlc_video_get_chapter_description');
+  pointer(libvlc_video_get_crop_geometry):=GetProcAddress(hlib,'libvlc_video_get_crop_geometry');
+  pointer(libvlc_video_set_crop_geometry):=GetProcAddress(hlib,'libvlc_video_set_crop_geometry');
+  pointer(libvlc_video_get_teletext):=GetProcAddress(hlib,'libvlc_video_get_teletext');
+  pointer(libvlc_video_set_teletext):=GetProcAddress(hlib,'libvlc_video_set_teletext');
+  pointer(libvlc_toggle_teletext):=GetProcAddress(hlib,'libvlc_toggle_teletext');
+  pointer(libvlc_video_get_track_count):=GetProcAddress(hlib,'libvlc_video_get_track_count');
+  pointer(libvlc_video_get_track_description):=GetProcAddress(hlib,'libvlc_video_get_track_description');
+  pointer(libvlc_video_get_track):=GetProcAddress(hlib,'libvlc_video_get_track');
+  pointer(libvlc_video_set_track):=GetProcAddress(hlib,'libvlc_video_set_track');
+  pointer(libvlc_video_take_snapshot):=GetProcAddress(hlib,'libvlc_video_take_snapshot');
+  pointer(libvlc_video_set_deinterlace):=GetProcAddress(hlib,'libvlc_video_set_deinterlace');
+  pointer(libvlc_video_get_marquee_int):=GetProcAddress(hlib,'libvlc_video_get_marquee_int');
+  pointer(libvlc_video_get_marquee_string):=GetProcAddress(hlib,'libvlc_video_get_marquee_string');
+  pointer(libvlc_video_set_marquee_int):=GetProcAddress(hlib,'libvlc_video_set_marquee_int');
+  pointer(libvlc_video_set_marquee_string):=GetProcAddress(hlib,'libvlc_video_set_marquee_string');
+  pointer(libvlc_video_get_logo_int):=GetProcAddress(hlib,'libvlc_video_get_logo_int');
+  pointer(libvlc_video_set_logo_int):=GetProcAddress(hlib,'libvlc_video_set_logo_int');
+  pointer(libvlc_video_set_logo_string):=GetProcAddress(hlib,'libvlc_video_set_logo_string');
+  pointer(libvlc_video_get_adjust_int):=GetProcAddress(hlib,'libvlc_video_get_adjust_int');
+  pointer(libvlc_video_set_adjust_int):=GetProcAddress(hlib,'libvlc_video_set_adjust_int');
+  pointer(libvlc_video_get_adjust_float):=GetProcAddress(hlib,'libvlc_video_get_adjust_float');
+  pointer(libvlc_video_set_adjust_float):=GetProcAddress(hlib,'libvlc_video_set_adjust_float');
+  pointer(libvlc_audio_output_list_get):=GetProcAddress(hlib,'libvlc_audio_output_list_get');
+  pointer(libvlc_audio_output_list_release):=GetProcAddress(hlib,'libvlc_audio_output_list_release');
+  pointer(libvlc_audio_output_set):=GetProcAddress(hlib,'libvlc_audio_output_set');
+  pointer(libvlc_audio_output_device_count):=GetProcAddress(hlib,'libvlc_audio_output_device_count');
+  pointer(libvlc_audio_output_device_longname):=GetProcAddress(hlib,'libvlc_audio_output_device_longname');
+  pointer(libvlc_audio_output_device_id):=GetProcAddress(hlib,'libvlc_audio_output_device_id');
+  pointer(libvlc_audio_output_device_set):=GetProcAddress(hlib,'libvlc_audio_output_device_set');
+  pointer(libvlc_audio_output_get_device_type):=GetProcAddress(hlib,'libvlc_audio_output_get_device_type');
+  pointer(libvlc_audio_output_set_device_type):=GetProcAddress(hlib,'libvlc_audio_output_set_device_type');
+  pointer(libvlc_audio_toggle_mute):=GetProcAddress(hlib,'libvlc_audio_toggle_mute');
+  pointer(libvlc_audio_get_mute):=GetProcAddress(hlib,'libvlc_audio_get_mute');
+  pointer(libvlc_audio_set_mute):=GetProcAddress(hlib,'libvlc_audio_set_mute');
+  pointer(libvlc_audio_get_volume):=GetProcAddress(hlib,'libvlc_audio_get_volume');
+  pointer(libvlc_audio_set_volume):=GetProcAddress(hlib,'libvlc_audio_set_volume');
+  pointer(libvlc_audio_get_track_count):=GetProcAddress(hlib,'libvlc_audio_get_track_count');
+  pointer(libvlc_audio_get_track_description):=GetProcAddress(hlib,'libvlc_audio_get_track_description');
+  pointer(libvlc_audio_get_track):=GetProcAddress(hlib,'libvlc_audio_get_track');
+  pointer(libvlc_audio_set_track):=GetProcAddress(hlib,'libvlc_audio_set_track');
+  pointer(libvlc_audio_get_channel):=GetProcAddress(hlib,'libvlc_audio_get_channel');
+  pointer(libvlc_audio_set_channel):=GetProcAddress(hlib,'libvlc_audio_set_channel');
+  pointer(libvlc_audio_get_delay):=GetProcAddress(hlib,'libvlc_audio_get_delay');
+  pointer(libvlc_audio_set_delay):=GetProcAddress(hlib,'libvlc_audio_set_delay');
+  pointer(libvlc_media_list_new):=GetProcAddress(hlib,'libvlc_media_list_new');
+  pointer(libvlc_media_list_release):=GetProcAddress(hlib,'libvlc_media_list_release');
+  pointer(libvlc_media_list_retain):=GetProcAddress(hlib,'libvlc_media_list_retain');
+  pointer(libvlc_media_list_add_file_content):=GetProcAddress(hlib,'libvlc_media_list_add_file_content');
+  pointer(libvlc_media_list_set_media):=GetProcAddress(hlib,'libvlc_media_list_set_media');
+  pointer(libvlc_media_list_media):=GetProcAddress(hlib,'libvlc_media_list_media');
+  pointer(libvlc_media_list_add_media):=GetProcAddress(hlib,'libvlc_media_list_add_media');
+  pointer(libvlc_media_list_insert_media):=GetProcAddress(hlib,'libvlc_media_list_insert_media');
+  pointer(libvlc_media_list_remove_index):=GetProcAddress(hlib,'libvlc_media_list_remove_index');
+  pointer(libvlc_media_list_count):=GetProcAddress(hlib,'libvlc_media_list_count');
+  pointer(libvlc_media_list_item_at_index):=GetProcAddress(hlib,'libvlc_media_list_item_at_index');
+  pointer(libvlc_media_list_index_of_item):=GetProcAddress(hlib,'libvlc_media_list_index_of_item');
+  pointer(libvlc_media_list_is_readonly):=GetProcAddress(hlib,'libvlc_media_list_is_readonly');
+  pointer(libvlc_media_list_lock):=GetProcAddress(hlib,'libvlc_media_list_lock');
+  pointer(libvlc_media_list_unlock):=GetProcAddress(hlib,'libvlc_media_list_unlock');
+  pointer(libvlc_media_list_event_manager):=GetProcAddress(hlib,'libvlc_media_list_event_manager');
+  pointer(libvlc_media_list_player_new):=GetProcAddress(hlib,'libvlc_media_list_player_new');
+  pointer(libvlc_media_list_player_release):=GetProcAddress(hlib,'libvlc_media_list_player_release');
+  pointer(libvlc_media_list_player_retain):=GetProcAddress(hlib,'libvlc_media_list_player_retain');
+  pointer(libvlc_media_list_player_event_manager):=GetProcAddress(hlib,'libvlc_media_list_player_event_manager');
+  pointer(libvlc_media_list_player_set_media_player):=GetProcAddress(hlib,'libvlc_media_list_player_set_media_player');
+  pointer(libvlc_media_list_player_set_media_list):=GetProcAddress(hlib,'libvlc_media_list_player_set_media_list');
+  pointer(libvlc_media_list_player_play):=GetProcAddress(hlib,'libvlc_media_list_player_play');
+  pointer(libvlc_media_list_player_pause):=GetProcAddress(hlib,'libvlc_media_list_player_pause');
+  pointer(libvlc_media_list_player_is_playing):=GetProcAddress(hlib,'libvlc_media_list_player_is_playing');
+  pointer(libvlc_media_list_player_get_state):=GetProcAddress(hlib,'libvlc_media_list_player_get_state');
+  pointer(libvlc_media_list_player_play_item_at_index):=GetProcAddress(hlib,'libvlc_media_list_player_play_item_at_index');
+  pointer(libvlc_media_list_player_play_item):=GetProcAddress(hlib,'libvlc_media_list_player_play_item');
+  pointer(libvlc_media_list_player_stop):=GetProcAddress(hlib,'libvlc_media_list_player_stop');
+  pointer(libvlc_media_list_player_next):=GetProcAddress(hlib,'libvlc_media_list_player_next');
+  pointer(libvlc_media_list_player_previous):=GetProcAddress(hlib,'libvlc_media_list_player_previous');
+  pointer(libvlc_media_list_player_set_playback_mode):=GetProcAddress(hlib,'libvlc_media_list_player_set_playback_mode');
+  pointer(libvlc_media_library_new):=GetProcAddress(hlib,'libvlc_media_library_new');
+  pointer(libvlc_media_library_release):=GetProcAddress(hlib,'libvlc_media_library_release');
+  pointer(libvlc_media_library_retain):=GetProcAddress(hlib,'libvlc_media_library_retain');
+  pointer(libvlc_media_library_load):=GetProcAddress(hlib,'libvlc_media_library_load');
+  pointer(libvlc_media_library_media_list):=GetProcAddress(hlib,'libvlc_media_library_media_list');
+  pointer(libvlc_media_discoverer_new_from_name):=GetProcAddress(hlib,'libvlc_media_discoverer_new_from_name');
+  pointer(libvlc_media_discoverer_release):=GetProcAddress(hlib,'libvlc_media_discoverer_release');
+  pointer(libvlc_media_discoverer_localized_name):=GetProcAddress(hlib,'libvlc_media_discoverer_localized_name');
+  pointer(libvlc_media_discoverer_media_list):=GetProcAddress(hlib,'libvlc_media_discoverer_media_list');
+  pointer(libvlc_media_discoverer_event_manager):=GetProcAddress(hlib,'libvlc_media_discoverer_event_manager');
+  pointer(libvlc_media_discoverer_is_running):=GetProcAddress(hlib,'libvlc_media_discoverer_is_running');
+  pointer(libvlc_vlm_release):=GetProcAddress(hlib,'libvlc_vlm_release');
+  pointer(libvlc_vlm_add_broadcast):=GetProcAddress(hlib,'libvlc_vlm_add_broadcast');
+  pointer(libvlc_vlm_add_vod):=GetProcAddress(hlib,'libvlc_vlm_add_vod');
+  pointer(libvlc_vlm_del_media):=GetProcAddress(hlib,'libvlc_vlm_del_media');
+  pointer(libvlc_vlm_set_enabled):=GetProcAddress(hlib,'libvlc_vlm_set_enabled');
+  pointer(libvlc_vlm_set_output):=GetProcAddress(hlib,'libvlc_vlm_set_output');
+  pointer(libvlc_vlm_set_input):=GetProcAddress(hlib,'libvlc_vlm_set_input');
+  pointer(libvlc_vlm_add_input):=GetProcAddress(hlib,'libvlc_vlm_add_input');
+  pointer(libvlc_vlm_set_loop):=GetProcAddress(hlib,'libvlc_vlm_set_loop');
+  pointer(libvlc_vlm_set_mux):=GetProcAddress(hlib,'libvlc_vlm_set_mux');
+  pointer(libvlc_vlm_change_media):=GetProcAddress(hlib,'libvlc_vlm_change_media');
+  pointer(libvlc_vlm_play_media):=GetProcAddress(hlib,'libvlc_vlm_play_media');
+  pointer(libvlc_vlm_stop_media):=GetProcAddress(hlib,'libvlc_vlm_stop_media');
+  pointer(libvlc_vlm_pause_media):=GetProcAddress(hlib,'libvlc_vlm_pause_media');
+  pointer(libvlc_vlm_seek_media):=GetProcAddress(hlib,'libvlc_vlm_seek_media');
+  pointer(libvlc_vlm_show_media):=GetProcAddress(hlib,'libvlc_vlm_show_media');
+  pointer(libvlc_vlm_get_media_instance_position):=GetProcAddress(hlib,'libvlc_vlm_get_media_instance_position');
+  pointer(libvlc_vlm_get_media_instance_time):=GetProcAddress(hlib,'libvlc_vlm_get_media_instance_time');
+  pointer(libvlc_vlm_get_media_instance_length):=GetProcAddress(hlib,'libvlc_vlm_get_media_instance_length');
+  pointer(libvlc_vlm_get_media_instance_rate):=GetProcAddress(hlib,'libvlc_vlm_get_media_instance_rate');
+  pointer(libvlc_vlm_get_event_manager):=GetProcAddress(hlib,'libvlc_vlm_get_event_manager');
+  pointer(libvlc_playlist_play):=GetProcAddress(hlib,'libvlc_playlist_play');
+end;
+
+
+end.

+ 1762 - 0
packages/libvlc/src/vlc.pp

@@ -0,0 +1,1762 @@
+{
+    Copyright (c) 2012 by Michael Van Canneyt
+    member of the Free Pascal development team
+
+    This is a OOP wrapper around the VLC libraries.
+    
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+unit vlc;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, ctypes, libvlc, syncobjs;
+
+Type
+
+  { TVLCLibrary }
+
+  TVLCLibrary = class(TComponent)
+  private
+    FInstance : plibvlc_instance_t;
+    FLibraryArgs: TStrings;
+    FLibraryPath : String;
+    function GetI: Boolean;
+    function GetLastError: String;
+    Function GetVersion : String;
+    Function GetCompiler : String;
+    Function GetChangeSet : String;
+    Procedure SetLibraryPath(Const AValue : String);
+  Protected
+    Function GetInstance : plibvlc_instance_t; virtual;
+    property Instance : plibvlc_instance_t read GetInstance;
+  public
+    constructor Create (AOwner : TComponent); override;
+    destructor Destroy; override;
+    Procedure Initialize;
+    Procedure Release;
+    property LastError : String read GetLastError;
+    property Version : String read GetVersion;
+    property Compiler : String read GetCompiler;
+    property ChangeSer : String read GetChangeSet;
+    property LibraryPath : String read FLibraryPath write SetLibraryPath;
+    Property LibraryArgs : TStrings read FLibraryArgs Write FLibraryArgs;
+    Property Initialized : Boolean Read GetI;
+  end;
+
+  TVLCLibraryClass = Class of TVLCLibrary;
+
+  TCustomVLCMediaPlayer = Class;
+  TVLCMediaItems = Class;
+
+  { TVLCMediaItem }
+  TSnapShotFormat = (ssfPNG,ssfJPG);
+  TDeinterlaceMode   = (dmBlend, dmDiscard, dmBob, dmLinear, dmMean, dmX, dmYadif, dmYadif2x);
+
+  TVLCMediaItem = Class(TCollectionItem)
+  private
+    FDIM: TDeinterlaceMode;
+    FInstance : plibvlc_media_t;
+    FOpts : Array [0..3] of Boolean; // Keep in sync with property indexes
+    FPath: String;
+    FSS: TSNapshotFormat;
+    FFD: Integer;
+    function GetInstance: plibvlc_media_t;
+    function GetM(AIndex: Integer): Boolean;
+    function GetMD(AMeta : libvlc_meta_t): String;
+    function GetMRL: String;
+    function GetParsed: Boolean;
+    function GetUD: Pointer;
+    procedure SetDIM(AValue: TDeinterlaceMode);
+    procedure SetFSS(AValue: TSNapshotFormat);
+    procedure SetM(AIndex: Integer; AValue: Boolean);
+    Function GetBoolOpt(AIndex : Integer; AValue : Boolean) : String;
+    procedure SetMD(AMeta : libvlc_meta_t; AValue: String);
+    procedure SetUD(AValue: Pointer);
+    function GetState : libvlc_state_t;
+    function GetDuration : TDateTime;
+  Protected
+    Procedure RegisterInstance;
+    Procedure UnRegisterInstance;
+    procedure SetMRL(AValue: String); virtual;
+    procedure SetPath(AValue: String); virtual;
+    procedure SetFD(AValue: Integer); virtual;
+    Function GetVLC : TVLCLibrary; virtual;
+    function GetEventManager : plibvlc_event_manager_t;
+    Procedure SetInstance( Avalue : plibvlc_media_t);
+    Property Instance : plibvlc_media_t Read GetInstance;
+  Public
+    Destructor Destroy; override;
+    Procedure AddOption(Const AValue : String);
+    procedure Parse;
+    procedure ParseAsync;
+    Procedure SaveMetaData;
+    Function GetStats(Var AStats : libvlc_media_stats_t) : Boolean;
+    Function Duplicate : TVLCMediaItem;
+    Property Parsed : Boolean Read GetParsed;
+    Property ShowTitle : Boolean Index 0 Read GetM Write SetM;
+    Property VideoOnTop : Boolean Index 1 Read GetM Write SetM;
+    Property UseOverlay : Boolean Index 2 Read GetM Write SetM;
+    Property FullScreen : Boolean Index 3 Read GetM Write SetM;
+    Property DeinterlaceFilter : Boolean Index 4 Read GetM Write SetM;
+    Property DeInterlaceMode : TDeinterlaceMode Read FDIM Write SetDIM;
+    Property SnapShotFormat : TSNapshotFormat Read FSS Write SetFSS;
+    Property UserData : Pointer Read GetUD Write SetUD;
+    Property State :  libvlc_state_t Read GetState;
+    Property Duration : TDateTime Read GetDuration;
+    Property MetaData[AMeta : libvlc_meta_t] : String Read GetMD Write SetMD;
+    // These must be set prior to using any of the above.
+    Property MRL : String Read GetMRL Write SetMRL;
+    Property Path : String Read FPath Write SetPath;
+    property FileDescriptor : Integer Read FFD Write SetFD;
+  end;
+
+  TVLCMediaItemClass = Class of TVLCMediaItem;
+
+  { TVLCMediaItems }
+  TVLCPlayMode = (pmNormal,pmLoop,pmRepeat);
+
+  TVLCMediaItems = Class(TCollection)
+  Private
+    FPlayer: TCustomVLCMediaPlayer;
+    FPlayMode: TVLCPlayMode;
+    FVLC : TVLCLibrary;
+    FInstance : Plibvlc_media_list_t;
+    function GetI(AIndex : Integer): TVLCMediaItem;
+    function GetInstance: Plibvlc_media_list_t;
+    function GetIsReadOnly: Boolean;
+    procedure SetI(AIndex : Integer; AValue: TVLCMediaItem);
+  Protected
+    Function GetVLC : TVLCLibrary; virtual;
+  Public
+    Constructor Create(ALibrary : TVLCLibrary;AItemClass: TVLCMediaItemClass = Nil); overload;
+    Constructor Create(AInstance : Plibvlc_media_list_t;AItemClass: TVLCMediaItemClass = Nil); overload;
+    Procedure Lock;
+    Procedure Unlock;
+    Property Instance : Plibvlc_media_list_t read GetInstance;
+    Property VLC : TVLCLibrary Read GetVLC Write FVLC;
+    Property MediaItems[AIndex : Integer] : TVLCMediaItem Read GetI Write SetI; default;
+    Property ReadOnly : Boolean Read GetIsReadOnly;
+  end;
+
+  { TCustomVLCMediaPlayer }
+  TBooleanEvent = procedure(Sender : TObject; Const AValue : Boolean) of object;
+  TTitleEvent = procedure(Sender : TObject; Const ATitle : Integer) of object;
+  TSnapshotEvent = procedure(Sender : TObject; Const AfileName : string) of object;
+  TErrorEvent = procedure(Sender : TObject; Const AError : string) of object;
+  TTimeEvent = procedure(Sender : TObject; Const time : TDateTime) of object;
+  TPositionEvent = procedure(Sender : TObject; Const APos : Double)  of object;
+
+  TCustomVLCMediaPlayer = Class(TComponent)
+  private
+    FFitWindow: Boolean;
+    FOnBackward: TNotifyEvent;
+    FOnBuffering: TNotifyEvent;
+    FOnEOF: TNotifyEvent;
+    FOnError: TErrorEvent;
+    FOnForward: TNotifyEvent;
+    FOnLengthChanged: TTimeEvent;
+    FOnMediaChanged: TNotifyEvent;
+    FOnNothingSpecial: TNotifyEvent;
+    FOnOpening: TNotifyEvent;
+    FOnPausableChanged: TBooleanEvent;
+    FOnPause: TNotifyEvent;
+    FOnPlaying: TNotifyEvent;
+    FOnPositionChanged: TPositionEvent;
+    FOnSeekableChanged: TBooleanEvent;
+    FOnSnapShot: TSnapShotEvent;
+    FOnStop: TNotifyEvent;
+    FOnTimeChanged: TTimeEvent;
+    FOnTitleChanged: TTitleEvent;
+    FUseEvents: Boolean;
+    Finstance : Plibvlc_media_player_t;
+    FVLC: TVLCLibrary;
+    FECS : TCriticalSection;
+    function GetAspectRatio: String;
+    function GetAudioMuted: Boolean;
+    function GetAudioTrack: Integer;
+    function GetState: libvlc_state_t;
+    function GetVideoDuration: TDateTime;
+    function GetVideoFPS: Double;
+    function GetVideoFractional: Double;
+    function GetVideoHeight: Cardinal;
+    function GetVideoLength: Int64;
+    function GetVideoPos: Int64;
+    function GetVideoScale: Double;
+    function GetVideoWidth: Cardinal;
+    function GetVLC: TVLCLibrary;
+    procedure SetAspectRatio(AValue: String);
+    procedure SetAudioMuted(AValue: Boolean);
+    procedure SetFitWindow(AValue: Boolean);
+    procedure SetUseEVents(AValue: Boolean);
+    function GetAudioTrackCount : Integer;
+    procedure SetAudioTrack(AValue: Integer);
+    function GetAudioTrackDescriptions(AIndex : Integer) : String;
+    function GetChannel: Integer;
+    procedure SetChannel(AValue : Integer);
+    function GetAudioDelay : Int64;
+    procedure SetAudioDelay (AValue: Int64);
+    function GetPlaying : Boolean;
+    function GetChapter : Integer;
+    procedure SetChapter(AValue : Integer);
+    function GetChapterCount: Integer;
+    Function GetPlayable : Boolean;
+    Function GetPausable : Boolean;
+    Function GetSeekable : Boolean;
+    function GetAudioVolume : Integer;
+    function GetPlayRate: Integer;
+    procedure SetAudioVolume(AValue : Integer);
+    procedure SetPlayRate(AValue: Integer);
+    procedure SetFullScreenMode(AValue: Boolean);
+    function  GetFullScreenMode: Boolean;
+    procedure SetVideoFractional(AValue: Double);
+    procedure SetVideoPos(AValue: Int64);
+    procedure SetVideoScale(AValue: Double);
+  Protected
+    function GetInstance: Plibvlc_media_player_t; virtual;
+    // Called to set parent window. Descendents must override this.
+    Procedure SetParentWindow; virtual;
+    // Called when FitWindow is true.
+    Procedure SetParentWindowSize(AWidth,AHeight : Cardinal); Virtual;
+    procedure DoMediaChanged; virtual;
+    procedure DoNothingSpecial; virtual;
+    procedure DoOnBackward; virtual;
+    procedure DoOnBuffering;virtual;
+    procedure DoOnEOF;virtual;
+    procedure DoOnError;virtual;
+    procedure DoOnForward;virtual;
+    procedure DoOnOpening;virtual;
+    procedure DoOnPause;virtual;
+    procedure DoOnPlaying;virtual;
+    procedure DoOnStop;virtual;
+    procedure DoOnLengthChanged(const ATime: libvlc_time_t); virtual;
+    procedure DoOnPausableChanged(const APausable: Boolean); virtual;
+    procedure DoOnPositionChanged(const Aposition: Double); virtual;
+    procedure DoOnSeekableChanged(const ASeekable: Boolean); virtual;
+    procedure DoOnTimeChanged(const ATime: libvlc_time_t); virtual;
+    procedure DoOnTitleChanged(const ATitle: cint); virtual;
+    procedure DoOnSnapshot(const AFileName: PCChar); virtual;
+    procedure HookupEvents; virtual;
+    procedure UnHookEvents; virtual;
+    procedure HandleVLCEvent(e: Plibvlc_event_t); virtual;
+    Property VLC : TVLCLibrary Read GetVLC Write FVLC;
+    Property Instance : Plibvlc_media_player_t Read GetInstance;
+  Public
+    Destructor Destroy; override;
+    procedure Play;
+    procedure SetMedia(M: TVLCMediaItem);
+    Procedure Play(M : TVLCMediaItem);
+    Procedure PlayFile(Const AFileName : String);
+    Procedure Stop;
+    procedure Pause;
+    procedure Resume;
+    procedure NextFrame;
+    function Snapshot(Const AFileName: String): Boolean;
+    function Snapshot(Const AFileName: String; AWidth, AHeight: Cardinal): Boolean;
+    function GetVideoSize(Var AWidth, AHeight: Cardinal): Boolean;
+  // These can be made public/published in descendents
+  Protected
+    Property Playable : Boolean Read GetPlayable;
+    Property Pausable : Boolean Read GetPausable;
+    Property Seekable : Boolean Read GetSeekable;
+    Property Playing : Boolean Read GetPlaying;
+    Property State : libvlc_state_t Read GetState;
+    Property AudioTrackDescriptions [AIndex : Integer] : String Read GetAudioTrackDescriptions;
+    Property ChapterCount : Integer Read GetChapterCount;
+    Property AudioTrackCount : Integer Read GetAudioTrackCount;
+    Property AudioTrack : Integer Read GetAudioTrack Write SetAudioTrack;
+    Property AudioDelay : Int64 Read GetAudioDelay Write SetAudioDelay;
+    Property AudioVolume : Integer Read GetAudioVolume Write SetAudioVolume;
+    Property AudioMuted : Boolean Read GetAudioMuted Write SetAudioMuted;
+    Property FitWindow : Boolean Read FFitWindow Write SetFitWindow;
+    Property VideoWidth : Cardinal Read GetVideoWidth;
+    Property VideoHeight : Cardinal Read GetVideoHeight;
+    // In MS.
+    Property VideoLength : Int64 Read GetVideoLength;
+    Property VideoDuration : TDateTime Read GetVideoDuration;
+    // In MS
+    Property VideoPosition : Int64 Read GetVideoPos Write SetVideoPos;
+    Property VideoFractionalPosition : Double Read GetVideoFractional Write SetVideoFractional;
+    Property VideoFramesPerSecond : Double Read GetVideoFPS;
+    Property VideoScale : Double Read GetVideoScale Write SetVideoScale;
+    Property AspectRatio : String Read GetAspectRatio Write SetAspectRatio;
+    Property Channel : Integer Read GetChannel Write SetChannel;
+    Property Chapter : Integer Read GetChapter Write SetChapter;
+    Property FullScreenMode : Boolean Read GetFullScreenMode Write SetFullScreenMode;
+    Property UseEvents : Boolean Read FUseEvents Write SetUseEVents;
+    // Events from VLC player
+    Property OnMediaChanged : TNotifyEvent Read FOnMediaChanged Write FOnMediaChanged;
+    Property OnNothingSpecial : TNotifyEvent Read FOnNothingSpecial Write FOnNothingSpecial;
+    Property OnBackward : TNotifyEvent Read FOnBackward Write FOnBackward;
+    Property OnBuffering : TNotifyEvent Read FOnBuffering Write FOnBuffering;
+    Property OnEOF : TNotifyEvent Read FOnEOF Write FOnEOF;
+    Property OnError : TErrorEvent Read FOnError Write FOnError;
+    Property OnForward : TNotifyEvent Read FOnForward Write FOnForward;
+    Property OnOpening : TNotifyEvent Read FOnOpening Write FOnOpening;
+    Property OnPause : TNotifyEvent Read FOnPause Write FOnPause;
+    Property OnPlaying : TNotifyEvent Read FOnPlaying Write FOnPlaying;
+    Property OnStop : TNotifyEvent Read FOnStop Write FOnStop;
+    Property OnLengthChanged : TTimeEvent Read FOnLengthChanged Write FOnLengthChanged;
+    Property OnTimeChanged : TTimeEvent Read FOnTimeChanged Write FOnTimeChanged;
+    Property OnPausableChanged : TBooleanEvent Read FOnPausableChanged Write FOnPausableChanged;
+    Property OnPositionChanged : TPositionEvent Read FOnPositionChanged Write FOnPositionChanged;
+    Property OnSeekableChanged : TBooleanEvent Read FOnSeekableChanged Write FOnSeekableChanged;
+    Property OnTitleChanged : TTitleEvent Read FOnTitleChanged Write FOnTitleChanged;
+    Property OnSnapshot : TSnapShotEvent Read FOnSnapShot Write FOnSnapShot;
+  end;
+
+  EVLC = Class(Exception);
+
+  TVLCMediaPlayer = Class(TCustomVLCMediaPlayer)
+  Public
+    Property Playable ;
+    Property Pausable ;
+    Property Seekable ;
+    Property PLaying ;
+    Property State ;
+    Property AudioTrackDescriptions;
+    Property ChapterCount ;
+    Property AudioTrackCount ;
+    Property AudioTrack ;
+    Property VideoWidth ;
+    Property VideoHeight;
+    Property VideoLength;
+    Property VideoDuration ;
+    Property VideoPosition ;
+    Property VideoFractionalPosition ;
+    Property VideoFramesPerSecond;
+    Property VideoScale : Double;
+    Property AspectRatio : String;
+  Published
+    Property AudioDelay ;
+    Property AudioVolume ;
+    Property AudioMuted ;
+    Property Channel ;
+    Property Chapter ;
+    Property FitWindow;
+    Property FullScreenMode ;
+    Property UseEvents ;
+    Property OnMediaChanged ;
+    Property OnNothingSpecial ;
+    Property OnBackward ;
+    Property OnBuffering ;
+    Property OnEOF ;
+    Property OnError ;
+    Property OnForward ;
+    Property OnOpening ;
+    Property OnPause ;
+    Property OnPlaying ;
+    Property OnStop ;
+    Property OnLengthChanged ;
+    Property OnTimeChanged ;
+    Property OnPausableChanged ;
+    Property OnPositionChanged ;
+    Property OnSeekableChanged ;
+    Property OnTitleChanged ;
+    Property OnSnapshot ;
+  end;
+
+  { TCustomVLCMediaListPlayer }
+
+  TCustomVLCMediaListPlayer = Class(TComponent)
+  Private
+    FMediaItems: TVLCMediaItems;
+    FPlayer: TCustomVLCMediaPlayer;
+    FPlayMode: TVLCPlayMode;
+    FInstance : plibvlc_media_list_player_t;
+    FVLC: TVLCLibrary;
+    function GetInstance: plibvlc_media_list_player_t;
+    function  GetPlaying : Boolean;
+    function  GetState: libvlc_state_t;
+    function GetVLC: TVLCLibrary;
+    procedure SetMediaItems(AValue: TVLCMediaItems);
+    procedure SetPlayer(AValue: TCustomVLCMediaPlayer); virtual;
+    procedure SetPlayMode(AValue: TVLCPlayMode);
+  Protected
+    Function CreateMediaItems : TVLCMediaItems; virtual;
+    Property Instance : plibvlc_media_list_player_t Read GetInstance;
+    Property Player : TCustomVLCMediaPlayer Read FPlayer write SetPlayer;
+    Property PlayMode : TVLCPlayMode read FPlayMode write SetPlayMode;
+    Property Playing : Boolean Read GetPLaying;
+    Property State : libvlc_state_t Read GetState;
+    Property MediaItems : TVLCMediaItems Read FMediaItems Write SetMediaItems;
+    Property VLC : TVLCLibrary Read GetVLC Write FVLC;
+  Public
+    Constructor Create(AOwner : TComponent); override;
+    Destructor Destroy; override;
+    procedure Play(Item : TVLCMediaItem);
+    procedure Play;
+    procedure Pause;
+    procedure Stop;
+    procedure Next;
+    procedure Prev;
+  end;
+
+  TVLCMediaListPlayer = Class(TCustomVLCMediaListPlayer)
+  Public
+    Property VLC : TVLCLibrary;
+  Published
+    Property Player;
+    Property PlayMode;
+    Property Playing;
+    Property State;
+    Property MediaItems;
+  end;
+
+Function VLCLibrary  : TVLCLibrary;
+
+Var
+  VLCLibraryClass : TVLCLibraryClass = TVLCLibrary;
+
+Function VLCTimeToDateTime (T : libvlc_time_t) : TDateTime;
+
+implementation
+
+{ TVLCLibrary }
+Var
+  LVLC : TVLCLibrary;
+
+Function VLCLibrary  : TVLCLibrary;
+
+begin
+  If LVLC=Nil then
+    LVLC:=VLCLibraryClass.Create(Nil);
+  Result:=LVLC;
+end;
+
+Procedure DoneVLC;
+
+begin
+  If Assigned(LVLC) then
+    FreeAndNil(LVLC);
+end;
+
+Function VLCTimeToDateTime (T : libvlc_time_t) : TDateTime;
+
+  Function MD(Var MS : libvlc_time_t; D : Integer) : Word;  inline;
+
+  begin
+    Result:=MS Mod D;
+    MS:=MS div D;
+  end;
+
+var
+  d,h,m,s,ms: word;
+
+begin
+  ms:=MD(T,1000);
+  s:=MD(T,60);
+  m:=MD(T,60);
+  h:=MD(T,24);
+  d:=T;
+  Result:=D+EncodeTime(h,m,s,ms);
+end;
+
+procedure PlayerEventHelper(event: Plibvlc_event_t; data: Pointer); cdecl;
+
+begin
+  if Not Assigned(data) then
+    exit;
+  TCustomVLCMediaPlayer(data).HandleVLCEvent(event);
+end;
+
+{ TCustomVLCMediaListPlayer }
+
+function TCustomVLCMediaListPlayer.GetPlaying: Boolean;
+begin
+  Result:=libvlc_media_list_player_is_playing(Instance)<>0;
+end;
+
+function TCustomVLCMediaListPlayer.GetInstance: plibvlc_media_list_player_t;
+begin
+  if (FInstance=Nil) then
+    begin
+    Finstance:=libvlc_media_list_player_new(VLC.Instance);
+    if Assigned(MediaItems) then
+      begin
+      libvlc_media_list_player_set_media_list(FInstance,MediaItems.Instance);
+      end;
+    If Assigned(FPlayer) then
+      begin
+      libvlc_media_list_player_set_media_player(FInstance, FPlayer.Instance);
+      end;
+    end;
+  Result:=FInstance;
+end;
+
+function TCustomVLCMediaListPlayer.GetState: libvlc_state_t;
+begin
+  Result:=libvlc_media_list_player_get_state(Instance)
+end;
+
+function TCustomVLCMediaListPlayer.GetVLC: TVLCLibrary;
+begin
+  Result:=FVLC;
+  If Result=Nil then
+    Result:=VLCLibrary;
+end;
+
+procedure TCustomVLCMediaListPlayer.Play(Item: TVLCMediaItem);
+begin
+  libvlc_media_list_player_play_item(Instance, item.Instance);
+end;
+
+procedure TCustomVLCMediaListPlayer.SetMediaItems(AValue: TVLCMediaItems);
+begin
+  if FMediaItems=AValue then Exit;
+  FMediaItems.Assign(AValue);
+end;
+
+procedure TCustomVLCMediaListPlayer.SetPlayer(AValue: TCustomVLCMediaPlayer);
+begin
+  if FPlayer=AValue then Exit;
+  FPlayer:=AValue;
+  If Assigned(FInstance) then
+    begin
+    libvlc_media_list_player_set_media_player(FInstance, FPlayer.Instance);
+    end;
+end;
+
+procedure TCustomVLCMediaListPlayer.SetPlayMode(AValue: TVLCPlayMode);
+Const
+  M : Array  [TVLCPlayMode] of libvlc_playback_mode_t
+    = (libvlc_playback_mode_default,
+       libvlc_playback_mode_loop,
+       libvlc_playback_mode_repeat);
+
+begin
+  if FPlayMode=AValue then Exit;
+  FPlayMode:=AValue;
+  libvlc_media_list_player_set_playback_mode(FInstance, M[AValue]);
+end;
+
+function TCustomVLCMediaListPlayer.CreateMediaItems: TVLCMediaItems;
+begin
+  Result:=TVLCMediaItems.Create(TVLCMediaItem);
+end;
+
+constructor TCustomVLCMediaListPlayer.Create(AOwner: TComponent);
+begin
+  inherited Create(AOwner);
+  FMediaItems:=CreateMediaItems;
+end;
+
+destructor TCustomVLCMediaListPlayer.Destroy;
+begin
+  If Assigned(Finstance) then
+    libvlc_media_list_player_release(FInstance);
+  FreeAndNil(FMediaItems);
+  inherited Destroy;
+end;
+
+procedure TCustomVLCMediaListPlayer.Play;
+begin
+  libvlc_media_list_player_play(Instance);
+end;
+
+procedure TCustomVLCMediaListPlayer.Pause;
+begin
+  libvlc_media_list_player_pause(Instance);
+end;
+
+procedure TCustomVLCMediaListPlayer.Stop;
+begin
+  libvlc_media_list_player_stop(Instance);
+end;
+
+procedure TCustomVLCMediaListPlayer.Next;
+begin
+  libvlc_media_list_player_next(Instance);
+end;
+
+procedure TCustomVLCMediaListPlayer.Prev;
+begin
+  libvlc_media_list_player_previous(Instance);
+end;
+
+
+{ TCustomVLCMediaPlayer }
+
+function TCustomVLCMediaPlayer.GetVLC: TVLCLibrary;
+begin
+  Result:=FVLC;
+  if Result=Nil then
+    Result:=VLCLibrary;
+end;
+
+procedure TCustomVLCMediaPlayer.SetAspectRatio(AValue: String);
+
+begin
+  libvlc_video_set_aspect_ratio(Instance,Pcchar(PChar(AValue)));
+end;
+
+function TCustomVLCMediaPlayer.GetAudioMuted: Boolean;
+begin
+  if Assigned(Finstance) then
+    Result:=libvlc_audio_get_mute(instance)<>0
+  else
+    Result:=False;
+end;
+
+function TCustomVLCMediaPlayer.GetAspectRatio: String;
+
+Var
+  P : Pcchar;
+
+begin
+  P:=libvlc_video_get_aspect_ratio(Instance);
+  if (P<>Nil) then
+    Result:=StrPas(PChar(P))
+  else
+    Result:='';
+end;
+
+function TCustomVLCMediaPlayer.GetAudioTrack: Integer;
+begin
+  if Assigned(FInstance) then
+    Result := libvlc_audio_get_track(FINstance)
+  else
+    Result:=-1;
+end;
+
+function TCustomVLCMediaPlayer.GetState: libvlc_state_t;
+begin
+  If Assigned(FInstance) then
+    Result:=libvlc_media_player_get_state(FInstance)
+  else
+    Result:=libvlc_NothingSpecial;
+end;
+
+function TCustomVLCMediaPlayer.GetVideoDuration: TDateTime;
+begin
+  Result:=VLCTimeToDateTime(GetVideoLength);
+end;
+
+function TCustomVLCMediaPlayer.GetVideoFPS: Double;
+begin
+  Result:=libvlc_media_player_get_fps(FInstance);
+end;
+
+function TCustomVLCMediaPlayer.GetVideoFractional: Double;
+begin
+  Result:=libvlc_media_player_get_Position(FInstance);
+end;
+
+function TCustomVLCMediaPlayer.GetVideoHeight: Cardinal;
+begin
+  Result:=libvlc_video_get_height(FInstance);
+end;
+
+function TCustomVLCMediaPlayer.GetVideoLength: Int64;
+begin
+  Result:=libvlc_media_player_get_length(Finstance);
+end;
+
+function TCustomVLCMediaPlayer.GetVideoPos: Int64;
+begin
+  Result:=libvlc_media_player_get_time(FInstance);
+end;
+
+function TCustomVLCMediaPlayer.GetVideoScale: Double;
+begin
+  Result:=libvlc_video_get_scale(Finstance);
+end;
+
+function TCustomVLCMediaPlayer.GetVideoWidth: Cardinal;
+begin
+  Result:=libvlc_video_get_width(FInstance);
+end;
+
+
+procedure TCustomVLCMediaPlayer.SetAudioMuted(AValue: Boolean);
+begin
+  libvlc_audio_set_mute(instance, ord(AValue));
+end;
+
+procedure TCustomVLCMediaPlayer.SetFitWindow(AValue: Boolean);
+
+Var
+  W,H : Cardinal;
+
+begin
+  if FFitWindow=AValue then Exit;
+  FFitWindow:=AValue;
+  If FFitWindow and Playing then
+    begin
+    if GetVideoSize(W,H) then
+      SetParentWindowSize(W,H);
+    end;
+end;
+
+procedure TCustomVLCMediaPlayer.SetUseEVents(AValue: Boolean);
+begin
+  if FUseEvents=AValue then Exit;
+  FUseEvents:=AValue;
+  If Assigned(Finstance) then
+    If AValue then
+      HookupEvents
+    else
+      UnhookEvents;
+end;
+
+function TCustomVLCMediaPlayer.GetAudioTrackCount: Integer;
+begin
+  if Assigned(FInstance) then
+    Result := libvlc_audio_get_track_count(FINstance)
+  else
+    Result:=-1;
+end;
+
+
+procedure TCustomVLCMediaPlayer.SetAudioTrack(AValue: Integer);
+begin
+  if Assigned(FInstance) then
+    begin
+    if (AValue<0) then
+      AValue:=0;
+    libvlc_audio_set_track(FInstance,AValue);
+    end;
+end;
+
+function TCustomVLCMediaPlayer.GetAudioTrackDescriptions(AIndex: Integer): String;
+
+var
+  t : plibvlc_track_description_t;
+
+begin
+  Result := '';
+  If (AIndex>=0) And Assigned(FInstance) then
+    begin
+    T:=libvlc_audio_get_track_description(Finstance);
+    while (AIndex>0) and Assigned(t) do
+      begin
+      Dec(Aindex);
+      t:=t^.p_next;
+      end;
+    If Assigned(t) and Assigned(t^.psz_name) then
+      Result:=StrPas(PChar(t^.psz_name));
+    end;
+end;
+
+function TCustomVLCMediaPlayer.GetChannel: Integer;
+begin
+  If Assigned(Finstance) then
+    Result:=libvlc_audio_get_channel(FInstance)
+ else
+   Result:=-1;
+end;
+
+procedure TCustomVLCMediaPlayer.SetChannel(AValue: Integer);
+begin
+  If Assigned(Finstance) then
+    libvlc_audio_set_channel(Finstance,AValue)
+end;
+
+function TCustomVLCMediaPlayer.GetAudioDelay: Int64;
+begin
+  if Assigned(FInstance) then
+    Result:=libvlc_audio_get_delay(FInstance)
+  else
+    Result:=-1;
+end;
+
+procedure TCustomVLCMediaPlayer.SetAudioDelay(AValue: Int64);
+begin
+  if Assigned(FInstance) then
+    libvlc_audio_set_delay(FInstance,AValue)
+end;
+
+function TCustomVLCMediaPlayer.GetPlaying: Boolean;
+begin
+  Result:=(State=libvlc_Playing);
+end;
+
+function TCustomVLCMediaPlayer.GetChapter: Integer;
+begin
+  if Assigned(FInstance) then
+    Result:=libvlc_media_player_get_chapter(FInstance)
+  else
+    Result:=-1;
+end;
+
+procedure TCustomVLCMediaPlayer.SetChapter(AValue: Integer);
+begin
+  if Assigned(FInstance) then
+    libvlc_media_player_set_chapter(FInstance,AValue);
+end;
+
+function TCustomVLCMediaPlayer.GetChapterCount: Integer;
+begin
+  if Assigned(FInstance) then
+    Result:=libvlc_media_player_get_chapter_count(FInstance)
+  else
+    Result:=-1;
+end;
+
+function TCustomVLCMediaPlayer.GetPlayable: Boolean;
+begin
+  if Assigned(FInstance) then
+    Result:=(libvlc_media_player_will_play(FInstance)<>0)
+  else
+    Result:=False
+end;
+
+function TCustomVLCMediaPlayer.GetPausable: Boolean;
+begin
+  if Assigned(FInstance) then
+    Result:=(libvlc_media_player_can_pause(FInstance)<>0)
+  else
+    Result:=False
+end;
+
+function TCustomVLCMediaPlayer.GetSeekable: Boolean;
+begin
+  if Assigned(FInstance) then
+    Result:=(libvlc_media_player_is_seekable(FInstance)<>0)
+  else
+    Result:=False
+end;
+
+function TCustomVLCMediaPlayer.GetAudioVolume: Integer;
+begin
+  if Assigned(FInstance) then
+    Result:=libvlc_audio_get_volume(FInstance)
+  else
+    Result:=-1
+end;
+
+procedure TCustomVLCMediaPlayer.SetAudioVolume(AValue: Integer);
+begin
+  if Assigned(FInstance) then
+    begin
+    if (AValue<0) then
+      AValue:=0
+    else if (AValue>200) then
+      AValue:=200;
+    libvlc_audio_set_volume(Finstance,AValue);
+    end;
+end;
+
+procedure TCustomVLCMediaPlayer.SetPlayRate(Avalue : Integer);
+begin
+  if Assigned(FInstance) then
+    begin
+    if (Avalue< 1) then
+       AValue:=1
+    else if (AValue>1000) then
+      AValue:=1000;
+    libvlc_media_player_set_rate(FInstance,AValue/100);
+    end;
+end;
+
+function TCustomVLCMediaPlayer.GetPlayRate: Integer;
+begin
+  if Assigned(FInstance) then
+    Result:=Round(libvlc_media_player_get_rate(FInstance)*100)
+  else
+    Result:=-1;
+end;
+
+procedure TCustomVLCMediaPlayer.SetFullScreenMode(AValue: Boolean);
+begin
+  if Assigned(FInstance) then
+    libvlc_set_fullscreen(Finstance,Ord(AValue));
+end;
+
+function TCustomVLCMediaPlayer.GetFullScreenMode: Boolean;
+begin
+  If Assigned(FInstance) then
+    Result:=libvlc_get_fullscreen(Finstance)<>0
+  else
+    Result:=False;
+end;
+
+procedure TCustomVLCMediaPlayer.SetVideoFractional(AValue: Double);
+begin
+  libvlc_media_player_set_position(FInstance,AValue);
+end;
+
+procedure TCustomVLCMediaPlayer.SetVideoPos(AValue: Int64);
+begin
+  libvlc_media_player_set_time(FInstance,AVAlue);
+end;
+
+procedure TCustomVLCMediaPlayer.SetVideoScale(AValue: Double);
+begin
+  libvlc_video_set_scale(Finstance,AVAlue);
+end;
+
+function TCustomVLCMediaPlayer.GetInstance: Plibvlc_media_player_t;
+begin
+  Result:=FInstance;
+  if (FInstance=Nil) then
+    begin
+    FInstance:=libvlc_media_player_new(VLC.Instance);
+    libvlc_video_set_mouse_input(FInstance,1);
+    libvlc_video_set_key_input(FInstance,1);
+    if FUseEvents then
+      HookupEvents;
+    end;
+  Result:=FInstance;
+end;
+
+procedure TCustomVLCMediaPlayer.SetParentWindow;
+begin
+  // Do nothing
+end;
+
+procedure TCustomVLCMediaPlayer.SetParentWindowSize(AWidth, AHeight: Cardinal);
+begin
+  // Do nothing
+end;
+
+Procedure TCustomVLCMediaPlayer.UnHookEvents;
+
+
+  Procedure ClearEvent(M : plibvlc_event_manager_t;t : libvlc_event_e);
+
+  begin
+    libvlc_event_detach(M,ord(t),@PlayerEventHelper,Self);
+  end;
+
+Var
+  M : plibvlc_event_manager_t;
+
+begin
+  M:=libvlc_media_player_event_manager(Instance);
+  if (M<>Nil) then
+    begin
+    ClearEvent(M,libvlc_MediaPlayerMediaChanged);
+    ClearEvent(M,libvlc_MediaPlayerNothingSpecial);
+    ClearEvent(M,libvlc_MediaPlayerOpening);
+    ClearEvent(M,libvlc_MediaPlayerBuffering);
+    ClearEvent(M,libvlc_MediaPlayerPlaying);
+    ClearEvent(M,libvlc_MediaPlayerPaused);
+    ClearEvent(M,libvlc_MediaPlayerStopped);
+    ClearEvent(M,libvlc_MediaPlayerForward);
+    ClearEvent(M,libvlc_MediaPlayerBackward);
+    ClearEvent(M,libvlc_MediaPlayerEndReached);
+    ClearEvent(M,libvlc_MediaPlayerEncounteredError);
+    ClearEvent(M,libvlc_MediaPlayerTimeChanged);
+    ClearEvent(M,libvlc_MediaPlayerPositionChanged);
+    ClearEvent(M,libvlc_MediaPlayerSeekableChanged);
+    ClearEvent(M,libvlc_MediaPlayerPausableChanged);
+    ClearEvent(M,libvlc_MediaPlayerTitleChanged);
+    ClearEvent(M,libvlc_MediaPlayerSnapshotTaken);
+    ClearEvent(M,libvlc_MediaPlayerLengthChanged);
+    FreeAndNil(FECS);
+    end;
+end;
+
+Procedure TCustomVLCMediaPlayer.HookupEvents;
+
+  Procedure AttachEvent( M : plibvlc_event_manager_t;t : libvlc_event_e);
+
+  begin
+    libvlc_event_attach(M,ord(t),@PlayerEventHelper,Self);
+  end;
+
+Var
+  M : plibvlc_event_manager_t;
+
+begin
+  M:=libvlc_media_player_event_manager(Instance);
+  if (M<>Nil) then
+    begin
+    FECS:=TCriticalSection.Create;
+    AttachEvent(M,libvlc_MediaPlayerMediaChanged);
+    AttachEvent(M,libvlc_MediaPlayerNothingSpecial);
+    AttachEvent(M,libvlc_MediaPlayerOpening);
+    AttachEvent(M,libvlc_MediaPlayerBuffering);
+    AttachEvent(M,libvlc_MediaPlayerPlaying);
+    AttachEvent(M,libvlc_MediaPlayerPaused);
+    AttachEvent(M,libvlc_MediaPlayerStopped);
+    AttachEvent(M,libvlc_MediaPlayerForward);
+    AttachEvent(M,libvlc_MediaPlayerBackward);
+    AttachEvent(M,libvlc_MediaPlayerEndReached);
+    AttachEvent(M,libvlc_MediaPlayerEncounteredError);
+    AttachEvent(M,libvlc_MediaPlayerTimeChanged);
+    AttachEvent(M,libvlc_MediaPlayerPositionChanged);
+    AttachEvent(M,libvlc_MediaPlayerSeekableChanged);
+    AttachEvent(M,libvlc_MediaPlayerPausableChanged);
+    AttachEvent(M,libvlc_MediaPlayerTitleChanged);
+    AttachEvent(M,libvlc_MediaPlayerSnapshotTaken);
+    AttachEvent(M,libvlc_MediaPlayerLengthChanged);
+    end;
+end;
+
+procedure TCustomVLCMediaPlayer.DoMediaChanged;
+
+begin
+  If Assigned(FOnMediaChanged) then
+    FOnMediaChanged(Self);
+end;
+
+procedure TCustomVLCMediaPlayer.DoNothingSpecial;
+
+begin
+  If Assigned(FOnNothingSpecial) then
+    FOnNothingSpecial(Self);
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnOpening;
+
+begin
+  If Assigned(FOnOpening) then
+    FOnOpening(Self);
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnPlaying;
+
+begin
+  If Assigned(FOnPlaying) then
+    FOnPlaying(Self);
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnPause;
+
+begin
+  If Assigned(FOnPause) then
+    FOnPause(Self);
+end;
+
+
+procedure TCustomVLCMediaPlayer.DoOnStop;
+
+begin
+  If Assigned(FOnStop) then
+    FOnStop(Self);
+end;
+
+
+procedure TCustomVLCMediaPlayer.DoOnForward;
+
+begin
+  If Assigned(FOnForward) then
+    FOnForward(Self);
+end;
+
+
+procedure TCustomVLCMediaPlayer.DoOnBackward;
+
+begin
+  If Assigned(FOnBackward) then
+    FOnBackward(Self);
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnEOF;
+
+begin
+  If Assigned(FOnEOF) then
+    FOnEOF(Self);
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnBuffering;
+
+begin
+  If Assigned(FOnBuffering) then
+    FOnBuffering(Self);
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnError;
+
+Var
+  P : pcchar;
+  E : String;
+begin
+  p:=libvlc_errmsg();
+  if p<>Nil then
+    E:=StrPas(PChar(P))
+  else
+    E:='';
+  If Assigned(FOnError) then
+    FOnError(Self,E);
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnTimeChanged(Const ATime: libvlc_time_t);
+
+begin
+  If Assigned(FOnTimeChanged) then
+    FOnTimeChanged(Self,VLCTimeToDateTime(ATime));
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnPositionChanged(Const Aposition: Double);
+
+begin
+  If Assigned(FOnPositionChanged) then
+    FOnPositionChanged(Self,APosition);
+end;
+
+
+procedure TCustomVLCMediaPlayer.DoOnSeekableChanged(Const ASeekable : Boolean);
+
+begin
+  If Assigned(FOnSeekableChanged) then
+    FOnSeekableChanged(Self,ASeekable);
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnPausableChanged(Const APausable : Boolean);
+
+begin
+  If Assigned(FOnPausableChanged) then
+    FOnPausableChanged(Self,APausable);
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnTitleChanged(Const ATitle: cint);
+
+begin
+  If Assigned(FOnTitleChanged) then
+    FOnTitleChanged(Self,ATitle);
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnSnapshot(Const AFileName : PCChar);
+
+Var
+  S :String;
+
+begin
+  If Assigned(FOnSnapshot) then
+    begin
+    if Assigned(AFileName) then
+      S:=StrPas(PChar(AFileName))
+    else
+      S:='';
+    FOnSnapShot(Self,S);
+    end;
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnLengthChanged(Const ATime: libvlc_time_t);
+
+begin
+  If Assigned(FOnLengtHChanged) then
+    FOnLengtHChanged(Self,VLCTimeToDateTime(ATime));
+end;
+
+
+
+procedure TCustomVLCMediaPlayer.HandleVLCEvent(e: Plibvlc_event_t);
+
+begin
+  Writeln('Enter : ',Ord(e^._type));
+  FECS.Enter;
+  try
+    case libvlc_event_e(e^._type) of
+      libvlc_MediaPlayerMediaChanged     : DoMediaChanged;
+      libvlc_MediaPlayerNothingSpecial   : DoNothingSpecial;
+      libvlc_MediaPlayerOpening          : DoOnOpening;
+      libvlc_MediaPlayerBuffering        : DoOnBuffering;
+      libvlc_MediaPlayerPlaying          : DoOnPlaying;
+      libvlc_MediaPlayerPaused           : DoOnPause;
+      libvlc_MediaPlayerStopped          : DoOnStop;
+      libvlc_MediaPlayerForward          : DoOnForward;
+      libvlc_MediaPlayerBackward         : DoOnBackward;
+      libvlc_MediaPlayerEndReached       : DoOnEOF;
+      libvlc_MediaPlayerEncounteredError : DoOnError;
+      libvlc_MediaPlayerTimeChanged      : begin
+                                           Writeln('A');
+                                           DoOnTimeChanged(e^.media_player_time_changed.new_time);
+                                           end;
+      libvlc_MediaPlayerPositionChanged  : begin
+                                           Writeln('AA');
+                                           DoOnPositionChanged(e^.media_player_position_changed.new_position);
+      end;
+      libvlc_MediaPlayerSeekableChanged  : begin
+                                           Writeln('AAA');
+                                           DoOnSeekableChanged(e^.media_player_seekable_changed.new_seekable<>0);
+      end;
+      libvlc_MediaPlayerPausableChanged  : begin
+                                           Writeln('AAAA');
+                                           DoOnPausableChanged(e^.media_player_pausable_changed.new_pausable<>0) ;
+      end;
+      libvlc_MediaPlayerTitleChanged     : begin
+                                           Writeln('AAAAA');
+                                           DoOnTitleChanged(e^.media_player_title_changed.new_title);
+      end;
+      libvlc_MediaPlayerSnapshotTaken    : begin
+                                           Writeln('AAAAAA');
+                                           DoOnSnapShot(e^.media_player_snapshot_taken.psz_filename);
+      end;
+      libvlc_MediaPlayerLengthChanged    : begin
+                                           Writeln('AAAAAAA');
+                                           DoOnLengthChanged(e^.media_player_length_changed.new_length);
+      end;
+    else
+      Writeln('Unknown event type ',e^._type);
+    end;
+  finally
+    FECS.Leave;
+  end;
+  Writeln('Leave');
+end;
+
+destructor TCustomVLCMediaPlayer.Destroy;
+begin
+  If Assigned(FInstance) then
+    begin
+    libvlc_media_player_release(FInstance);
+    FInstance:=Nil;
+    end;
+  FreeAndNil(FECS);
+  inherited Destroy;
+end;
+
+procedure TCustomVLCMediaPlayer.SetMedia(M: TVLCMediaItem);
+
+begin
+  libvlc_media_player_set_media(Instance,M.Instance);
+end;
+
+procedure TCustomVLCMediaPlayer.Play;
+
+Var
+  W,H : Cardinal;
+
+begin
+  SetParentWindow;
+  libvlc_media_player_play(Instance);
+  If FitWindow then
+    begin
+    VideoScale:=1.0;
+    if GetVideoSize(W,H) then
+      SetParentWindowSize(W,H);
+    end;
+end;
+
+procedure TCustomVLCMediaPlayer.Play(M: TVLCMediaItem);
+
+begin
+  if Playing then
+    begin
+    Stop;
+    While Playing do
+      Sleep(100);
+    end;
+  SetMedia(M);
+  Play;
+end;
+
+procedure TCustomVLCMediaPlayer.PlayFile(const AFileName: String);
+
+Var
+  M : TVLCMediaItem;
+begin
+  M:=TVLCMediaItem.Create(Nil);
+  try
+    M.Path:=AFileName;
+    Play(M);
+  finally
+    M.Free;
+  end;
+end;
+
+procedure TCustomVLCMediaPlayer.Stop;
+begin
+  if Assigned(FInstance) then
+    libvlc_media_player_stop(FInstance);
+end;
+
+procedure TCustomVLCMediaPlayer.Pause;
+begin
+  if Assigned(FInstance) then
+    libvlc_media_player_pause(FInstance);
+end;
+
+procedure TCustomVLCMediaPlayer.Resume;
+begin
+  if (GetState()=libvlc_Paused)  then
+   if Assigned(FInstance) then
+     libvlc_media_player_play(FInstance);
+end;
+
+procedure TCustomVLCMediaPlayer.NextFrame;
+begin
+  if Assigned(FInstance) then
+   libvlc_media_player_next_frame(Finstance);
+end;
+
+function TCustomVLCMediaPlayer.Snapshot(const AFileName: String): Boolean;
+
+var
+  w,h : Cardinal;
+begin
+  Result:=Assigned(FInstance);
+  if Result then
+    begin
+    w:=0;
+    h:=0;
+    Result:=libvlc_video_get_size(FInstance,0,@W,@H)=0;
+    if Result then
+      Result:=SnapShot(AFileName,W,H);
+    end;
+end;
+
+function TCustomVLCMediaPlayer.Snapshot(const AFileName: String; AWidth,
+  AHeight: Cardinal): Boolean;
+begin
+  Result:=Assigned(FInstance);
+  If Result then
+    Result:=libvlc_video_take_snapshot(FInstance,0,PCChar(PChar(AFileName)),AWidth,AHeight)=0;
+end;
+
+function TCustomVLCMediaPlayer.GetVideoSize(var AWidth, AHeight: Cardinal
+  ): Boolean;
+begin
+  Result:=libvlc_video_get_size(FInstance,0,@AWidth,@AHeight)=0;
+end;
+
+{ TVLCMediaItems }
+
+constructor TVLCMediaItems.Create(ALibrary: TVLCLibrary;AItemClass: TVLCMediaItemClass = Nil);
+begin
+  Inherited Create(AItemClass);
+  FVLC:=ALibrary;
+end;
+
+constructor TVLCMediaItems.Create(AInstance: Plibvlc_media_list_t;
+  AItemClass: TVLCMediaItemClass);
+
+
+Var
+  I : Integer;
+  P : plibvlc_media_t;
+
+begin
+  Inherited Create(AItemClass);
+  FInstance:=AInstance;
+  For I:=0 to libvlc_media_list_count(FInstance)-1 do
+    begin
+    P:=libvlc_media_list_item_at_index(FInstance,I);
+    (Add as TVLCMediaItem).SetInstance(P);
+    end;
+end;
+
+procedure TVLCMediaItems.Lock;
+begin
+  libvlc_media_list_lock(FInstance);
+end;
+
+procedure TVLCMediaItems.Unlock;
+begin
+  libvlc_media_list_lock(FInstance);
+end;
+
+function TVLCMediaItems.GetInstance: Plibvlc_media_list_t;
+Var
+  I :integer;
+begin
+  if FInstance=Nil then
+    begin
+    FInstance:=libvlc_media_list_new(VLC.Instance);
+    For I:=0 to Count-1 do
+      GetI(I).RegisterInstance;
+    end;
+  Result:=Finstance;
+end;
+
+function TVLCMediaItems.GetIsReadOnly: Boolean;
+begin
+  Result:=libvlc_media_list_is_readonly(FInstance)<>0;
+end;
+
+function TVLCMediaItems.GetI(AIndex : Integer): TVLCMediaItem;
+begin
+  Result:=Items[AIndex] as TVLCMediaItem;
+end;
+
+procedure TVLCMediaItems.SetI(AIndex : Integer; AValue: TVLCMediaItem);
+begin
+  Items[AIndex]:=AValue;
+end;
+
+
+function TVLCMediaItems.GetVLC: TVLCLibrary;
+begin
+  Result:=VLCLibrary;
+end;
+
+{ TVLCMediaItem }
+
+function TVLCMediaItem.GetInstance: plibvlc_media_t;
+begin
+  Result:=Finstance;
+  If (Result=Nil) then
+    Raise EVLC.Create('No instance available at this time. Set MRL, Path or FileDescriptor first');
+end;
+
+function TVLCMediaItem.GetM(AIndex: Integer): Boolean;
+begin
+  Result:=FOpts[AIndex];
+end;
+
+function TVLCMediaItem.GetMD(AMeta : libvlc_meta_t): String;
+
+Var
+  P : PCChar;
+
+begin
+  P:=libvlc_media_get_meta(Instance,AMeta);
+  if (P<>Nil) then
+    Result:=StrPas(PChar(p))
+  else
+    Result:='';
+end;
+
+function TVLCMediaItem.GetMRL: String;
+Var
+  P : PCChar;
+
+begin
+  P:=libvlc_media_get_mrl(Instance);
+  if (P<>Nil) then
+    Result:=StrPas(PChar(p))
+  else
+    Result:='';
+end;
+
+function TVLCMediaItem.GetParsed: Boolean;
+begin
+  Result:=libvlc_media_is_parsed(Instance)<>0;
+end;
+
+function TVLCMediaItem.GetUD: Pointer;
+begin
+  Result:=libvlc_media_get_user_data(Instance);
+end;
+
+procedure TVLCMediaItem.SetDIM(AValue: TDeinterlaceMode);
+
+Const
+  DMS : Array[TDeinterlaceMode] of string
+      = ('blend', 'discard', 'bob', 'linear', 'mean', 'x', 'yadif', 'yadif2x');
+begin
+  if (FDIM=AValue) then Exit;
+  FDIM:=AValue;
+  libvlc_media_add_option(Instance, PCChar(PChar('deinterlace-mode='+DMS[AValue])));
+end;
+
+procedure TVLCMediaItem.SetFD(AValue: Integer);
+begin
+  FFD:=AValue;
+  Finstance:=libvlc_media_new_fd(GetVLC.Instance,AValue);
+  If (FInstance=Nil) then
+    Raise EVLC.CreateFmt('Failed to create media item from file descriptor "%d"',[AValue]);
+  RegisterInstance;
+end;
+
+procedure TVLCMediaItem.SetFSS(AValue: TSNapshotFormat);
+
+Const
+  ssfs : Array[TSnapShotFormat] of string = ('png','jpg');
+
+begin
+  if FSS=AValue then Exit;
+  FSS:=AValue;
+  libvlc_media_add_option(Instance, PCChar(PChar('no-snapshot-preview')));
+  libvlc_media_add_option(instance, PCChar(PChar('snapshot-format=' + SSFS[aValue])));
+end;
+
+procedure TVLCMediaItem.SetM(AIndex: Integer; AValue: Boolean);
+
+begin
+  FOpts[AIndex]:=AValue;
+  libvlc_media_add_option(FInstance,PcChar(PChar(GetBoolOpt(AIndex,AValue))));
+end;
+
+function TVLCMediaItem.GetBoolOpt(AIndex: Integer; AValue: Boolean): String;
+begin
+  Case AINdex of
+    0 : Result:='video-title-show';
+    1 : Result:='video-on-top';
+    2 : Result:='overlay';
+    3 : Result:='fullscreen';
+    4 : Result:='deinterlace='+IntToStr(Ord(AValue));
+  end;
+  if (AIndex < 4) and Not AValue then
+    Result:='no-'+Result;
+end;
+
+procedure TVLCMediaItem.SetMD(AMeta : libvlc_meta_t; AValue: String);
+begin
+  libvlc_media_set_meta(Instance,AMeta,Pcchar(PChar(AValue)));
+end;
+
+procedure TVLCMediaItem.SetMRL(AValue: String);
+begin
+  Finstance:=libvlc_media_new_location(GetVLC.Instance,PCChar(AValue));
+  If (FInstance=Nil) then
+    Raise EVLC.CreateFmt('Failed to create media item from MRL : "%s"',[AValue]);
+  RegisterInstance;
+end;
+
+procedure TVLCMediaItem.SetPath(AValue: String);
+begin
+  if FPath=AValue then Exit;
+  FPath:=AValue;
+  FInstance:=libvlc_media_new_path(GetVLC.Instance,PCChar(AValue));
+  if (FInstance=Nil) then
+    Raise EVLC.CreateFmt('Failed to create media item from path : "%s"',[AValue]);
+  RegisterInstance;
+end;
+
+procedure TVLCMediaItem.SetUD(AValue: Pointer);
+begin
+  libvlc_media_set_user_data(Instance,AValue);
+end;
+
+function TVLCMediaItem.GetState: libvlc_state_t;
+begin
+  Result:=libvlc_media_get_state(instance);
+end;
+
+function TVLCMediaItem.GetDuration: TDateTime;
+
+Var
+  d :  libvlc_time_t;
+
+begin
+  d:=libvlc_media_get_duration(Instance);
+  Result:=D
+end;
+
+procedure TVLCMediaItem.RegisterInstance;
+
+Var
+  L : Plibvlc_media_list_t;
+
+begin
+  If Assigned(Collection) and (Collection is TVLCMediaItems) then
+    begin
+    L:=TVLCMediaItems(Collection).FInstance;
+    if (L<>Nil) then
+      begin
+      libvlc_media_list_lock(L);
+      libvlc_media_list_add_media(L, FInstance);
+      libvlc_media_list_unlock(L);
+      end;
+    end;
+end;
+
+procedure TVLCMediaItem.UnRegisterInstance;
+Var
+  L : Plibvlc_media_list_t;
+  i : integer;
+
+begin
+  If Assigned(Collection) and (Collection is TVLCMediaItems) then
+    begin
+    L:=TVLCMediaItems(Collection).FInstance;
+    if L<>Nil then
+      begin
+      libvlc_media_list_lock(L);
+      I:=libvlc_media_list_index_of_item(L,Finstance);
+      if (i>=0) then
+        libvlc_media_list_remove_index(L,i);
+      libvlc_media_list_unlock(L);
+      end;
+    end;
+end;
+
+function TVLCMediaItem.GetVLC: TVLCLibrary;
+begin
+  If Assigned(Collection) and (Collection is TVLCMediaItems) then
+    Result:=TVLCMediaItems(Collection).GetVLC
+  else
+    Result:=VLCLibrary;
+  if not Result.Initialized then
+    Result.Initialize;
+end;
+
+function TVLCMediaItem.GetEventManager: plibvlc_event_manager_t;
+begin
+  Result:=libvlc_media_event_manager(Instance);
+end;
+
+procedure TVLCMediaItem.SetInstance(Avalue: plibvlc_media_t);
+begin
+  FInstance:=AValue;
+end;
+
+destructor TVLCMediaItem.Destroy;
+begin
+  inherited Destroy;
+  if Assigned(FInstance) then
+    begin
+    UnregisterInstance;
+    libvlc_media_release(FInstance);
+    FInstance:=Nil;
+    end;
+end;
+
+procedure TVLCMediaItem.AddOption(const AValue: String);
+begin
+  libvlc_media_add_option(Instance,PCChar(PChar(AValue)));
+end;
+
+procedure TVLCMediaItem.Parse;
+begin
+  libvlc_media_parse(Instance);
+end;
+
+procedure TVLCMediaItem.ParseAsync;
+begin
+  libvlc_media_parse_async(Instance);
+end;
+
+procedure TVLCMediaItem.SaveMetaData;
+begin
+  libvlc_media_save_meta(Instance);
+end;
+
+function TVLCMediaItem.GetStats(var AStats: libvlc_media_stats_t): Boolean;
+begin
+  Result:=libvlc_media_get_stats(Instance,@AStats)<>0;
+end;
+
+function TVLCMediaItem.Duplicate: TVLCMediaItem;
+begin
+  If Assigned(Collection) and (Collection is TVLCMediaItems) then
+    Result:=TVLCMediaItems(Collection).Add as TVLCMediaItem
+  else
+    Result:=TVLCMediaItem.Create(Nil);
+  Result.SetInstance(libvlc_media_duplicate(Instance));
+end;
+
+
+function TVLCLibrary.GetLastError: String;
+
+Var
+  P : PCChar;
+
+begin
+  P:=libvlc_errmsg();
+  if Assigned(P) then
+    Result := StrPas(PChar(P))
+  else
+    Result:='';
+end;
+
+function TVLCLibrary.GetI: Boolean;
+begin
+  Result:=FInstance<>Nil;
+end;
+
+function TVLCLibrary.GetVersion: String;
+Var
+  P : PCChar;
+
+begin
+  P:=libvlc_get_version();
+  if Assigned(P) then
+    Result := StrPas(PChar(P))
+  else
+    Result:='';
+end;
+
+function TVLCLibrary.GetCompiler: String;
+Var
+  P : PCChar;
+
+begin
+  P:=libvlc_get_compiler();
+  if Assigned(P) then
+    Result := StrPas(PChar(P))
+  else
+    Result:='';
+end;
+
+function TVLCLibrary.GetChangeSet: String;
+
+Var
+  P : PCChar;
+
+begin
+  P:=libvlc_get_changeset();
+  if Assigned(P) then
+    Result := StrPas(PChar(P))
+  else
+    Result:='';
+end;
+
+procedure TVLCLibrary.SetLibraryPath(const AValue: String);
+begin
+  If AValue=FLibraryPath then exit;
+  If Assigned(FInstance) then
+    Raise EVLC.Create('VLC already initialized, cannot set librarypath');
+  FLibraryPath:=AVAlue;
+end;
+
+function TVLCLibrary.GetInstance: plibvlc_instance_t;
+
+var
+  args: Array of AnsiString;
+  cargs : array of PAnsiChar;
+  argc,
+  I : integer;
+
+begin
+  If (FInstance=Nil) then
+    begin
+    LibraryArgs.add('--no-video-title-show');
+    SetLength(cArgs,LibraryArgs.Count+2);
+    SetLength(Args,LibraryArgs.Count+1);
+    cargs[0] := PChar(FLibraryPath);
+    For I:=0 to LibraryArgs.Count-1 do
+      begin
+      Args[i]:=LibraryArgs[i];
+      CArgs[i+1]:=PChar(Args[i]);
+      end;
+    argc:=Length(CArgs);
+    cargs[argc-1] := NIL;
+    FInstance := libvlc_new(argc-1, PPcchar(cargs));
+    if (FInstance=Nil) then
+      Raise EVLC.Create('Could not create instance of libvlc');
+    end;
+  Result:=FInstance;
+end;
+
+constructor TVLCLibrary.Create(AOwner: TComponent);
+begin
+  Inherited;
+  FInstance:=Nil;
+  FLibraryPath:=LibName;
+  FLibraryArgs:=TStringList.Create;
+end;
+
+destructor TVLCLibrary.Destroy;
+begin
+  FreeAndNil(FLibraryArgs);
+  Release;
+  inherited Destroy;
+end;
+
+procedure TVLCLibrary.Initialize;
+begin
+  LoadLibVLC(LibraryPath,False);
+  GetInstance;
+end;
+
+procedure TVLCLibrary.Release;
+begin
+  If (FInstance<>Nil) then
+    begin
+    libvlc_release(FInstance);
+    FreeLibVLC;
+    end;
+  FInstance:=Nil;
+end;
+
+Initialization
+
+Finalization
+  DoneVLC;
+end.
+