Ver código fonte

* ldap moved

git-svn-id: trunk@9966 -
marco 17 anos atrás
pai
commit
8a34a03ced

+ 10 - 0
.gitattributes

@@ -3868,6 +3868,16 @@ packages/imagemagick/src/quantize.inc svneol=native#text/plain
 packages/imagemagick/src/semaphore.inc svneol=native#text/plain
 packages/imagemagick/src/statistic.inc svneol=native#text/plain
 packages/imagemagick/src/type.inc svneol=native#text/plain
+packages/ldap/Makefile svneol=native#text/plain
+packages/ldap/Makefile.fpc svneol=native#text/plain
+packages/ldap/fpmake.pp svneol=native#text/plain
+packages/ldap/src/lber.pas svneol=native#text/plain
+packages/ldap/src/lber_typesh.inc svneol=native#text/plain
+packages/ldap/src/lberh.inc svneol=native#text/plain
+packages/ldap/src/ldap.pas svneol=native#text/plain
+packages/ldap/src/ldap_featuresh.inc svneol=native#text/plain
+packages/ldap/src/ldap_schemah.inc svneol=native#text/plain
+packages/ldap/src/ldaph.inc svneol=native#text/plain
 packages/libc/Makefile svneol=native#text/plain
 packages/libc/Makefile.fpc svneol=native#text/plain
 packages/libc/README svneol=native#text/plain

+ 59 - 7
packages/Makefile

@@ -241,7 +241,7 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid  libc  unixutil
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap  libc  unixutil
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
@@ -298,7 +298,7 @@ ifeq ($(FULL_TARGET),i386-symbian)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11
@@ -322,7 +322,7 @@ ifeq ($(FULL_TARGET),m68k-embedded)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11
@@ -343,7 +343,7 @@ ifeq ($(FULL_TARGET),powerpc-embedded)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11
@@ -355,7 +355,7 @@ ifeq ($(FULL_TARGET),sparc-embedded)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11
@@ -370,7 +370,7 @@ ifeq ($(FULL_TARGET),x86_64-embedded)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
@@ -391,7 +391,7 @@ ifeq ($(FULL_TARGET),arm-symbian)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11
@@ -1516,6 +1516,7 @@ TARGET_DIRS_GDBINT=1
 TARGET_DIRS_LIBPNG=1
 TARGET_DIRS_X11=1
 TARGET_DIRS_UUID=1
+TARGET_DIRS_LDAP=1
 TARGET_DIRS_LIBC=1
 TARGET_DIRS_UNIXUTIL=1
 endif
@@ -2034,6 +2035,7 @@ TARGET_DIRS_GDBINT=1
 TARGET_DIRS_LIBPNG=1
 TARGET_DIRS_X11=1
 TARGET_DIRS_UUID=1
+TARGET_DIRS_LDAP=1
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 TARGET_DIRS_BASE=1
@@ -2265,6 +2267,7 @@ TARGET_DIRS_GDBINT=1
 TARGET_DIRS_LIBPNG=1
 TARGET_DIRS_X11=1
 TARGET_DIRS_UUID=1
+TARGET_DIRS_LDAP=1
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 TARGET_DIRS_BASE=1
@@ -2460,6 +2463,7 @@ TARGET_DIRS_GDBINT=1
 TARGET_DIRS_LIBPNG=1
 TARGET_DIRS_X11=1
 TARGET_DIRS_UUID=1
+TARGET_DIRS_LDAP=1
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 TARGET_DIRS_BASE=1
@@ -2592,6 +2596,7 @@ TARGET_DIRS_GDBINT=1
 TARGET_DIRS_LIBPNG=1
 TARGET_DIRS_X11=1
 TARGET_DIRS_UUID=1
+TARGET_DIRS_LDAP=1
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 TARGET_DIRS_BASE=1
@@ -2757,6 +2762,7 @@ TARGET_DIRS_GDBINT=1
 TARGET_DIRS_LIBPNG=1
 TARGET_DIRS_X11=1
 TARGET_DIRS_UUID=1
+TARGET_DIRS_LDAP=1
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 TARGET_DIRS_BASE=1
@@ -2925,6 +2931,7 @@ TARGET_DIRS_GDBINT=1
 TARGET_DIRS_LIBPNG=1
 TARGET_DIRS_X11=1
 TARGET_DIRS_UUID=1
+TARGET_DIRS_LDAP=1
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 TARGET_DIRS_BASE=1
@@ -4603,6 +4610,51 @@ uuid:
 	$(MAKE) -C uuid all
 .PHONY: uuid_all uuid_debug uuid_smart uuid_release uuid_units uuid_examples uuid_shared uuid_install uuid_sourceinstall uuid_exampleinstall uuid_distinstall uuid_zipinstall uuid_zipsourceinstall uuid_zipexampleinstall uuid_zipdistinstall uuid_clean uuid_distclean uuid_cleanall uuid_info uuid_makefiles uuid
 endif
+ifdef TARGET_DIRS_LDAP
+ldap_all:
+	$(MAKE) -C ldap all
+ldap_debug:
+	$(MAKE) -C ldap debug
+ldap_smart:
+	$(MAKE) -C ldap smart
+ldap_release:
+	$(MAKE) -C ldap release
+ldap_units:
+	$(MAKE) -C ldap units
+ldap_examples:
+	$(MAKE) -C ldap examples
+ldap_shared:
+	$(MAKE) -C ldap shared
+ldap_install:
+	$(MAKE) -C ldap install
+ldap_sourceinstall:
+	$(MAKE) -C ldap sourceinstall
+ldap_exampleinstall:
+	$(MAKE) -C ldap exampleinstall
+ldap_distinstall:
+	$(MAKE) -C ldap distinstall
+ldap_zipinstall:
+	$(MAKE) -C ldap zipinstall
+ldap_zipsourceinstall:
+	$(MAKE) -C ldap zipsourceinstall
+ldap_zipexampleinstall:
+	$(MAKE) -C ldap zipexampleinstall
+ldap_zipdistinstall:
+	$(MAKE) -C ldap zipdistinstall
+ldap_clean:
+	$(MAKE) -C ldap clean
+ldap_distclean:
+	$(MAKE) -C ldap distclean
+ldap_cleanall:
+	$(MAKE) -C ldap cleanall
+ldap_info:
+	$(MAKE) -C ldap info
+ldap_makefiles:
+	$(MAKE) -C ldap makefiles
+ldap:
+	$(MAKE) -C ldap all
+.PHONY: ldap_all ldap_debug ldap_smart ldap_release ldap_units ldap_examples ldap_shared ldap_install ldap_sourceinstall ldap_exampleinstall ldap_distinstall ldap_zipinstall ldap_zipsourceinstall ldap_zipexampleinstall ldap_zipdistinstall ldap_clean ldap_distclean ldap_cleanall ldap_info ldap_makefiles ldap
+endif
 ifdef TARGET_DIRS_LIBC
 libc_all:
 	$(MAKE) -C libc all

+ 1 - 1
packages/Makefile.fpc

@@ -16,7 +16,7 @@ dirs_netbsd=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqli
 dirs_openbsd=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc  postgres sqlite pthreads imagemagick \
                gdbint libpng x11
 dirs_linux=fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick \
-               gdbint libpng x11 uuid
+               gdbint libpng x11 uuid ldap
 dirs_win32=winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc postgres sqlite imagemagick \
                gdbint libpng 
 dirs_win64=winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc postgres sqlite imagemagick \

+ 7 - 59
packages/extra/Makefile

@@ -241,7 +241,7 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_DIRS+=chm  fftw opengl gtk gtk2 syslog forms svgalib ggi  libgd utmp bfd gdbm  tcl cdrom imlib gnome1 fpgtk newt  ldap openal mad oggvorbis a52 modplug dts openssl pcap libcurl cairo aspell lua sdl graph
+override TARGET_DIRS+=chm  fftw opengl gtk gtk2 syslog forms svgalib ggi  libgd utmp bfd gdbm  tcl cdrom imlib gnome1 fpgtk newt  openal mad oggvorbis a52 modplug dts openssl pcap libcurl cairo aspell lua sdl graph
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 override TARGET_DIRS+=chm  graph
@@ -298,7 +298,7 @@ ifeq ($(FULL_TARGET),i386-symbian)
 override TARGET_DIRS+=chm
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_DIRS+=chm  fftw opengl gtk gtk2 syslog forms svgalib ggi  libgd utmp bfd gdbm  tcl cdrom imlib gnome1 fpgtk newt  ldap openal mad oggvorbis a52 modplug dts openssl pcap libcurl cairo aspell graph
+override TARGET_DIRS+=chm  fftw opengl gtk gtk2 syslog forms svgalib ggi  libgd utmp bfd gdbm  tcl cdrom imlib gnome1 fpgtk newt  openal mad oggvorbis a52 modplug dts openssl pcap libcurl cairo aspell graph
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 override TARGET_DIRS+=chm  fftw opengl gtk gtk2 syslog forms svgalib ggi  libgd utmp bfd gdbm  fpgtk tcl imlib gnome1 openssl pcap libcurl cairo sdl graph aspell
@@ -322,7 +322,7 @@ ifeq ($(FULL_TARGET),m68k-embedded)
 override TARGET_DIRS+=chm
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_DIRS+=chm  fftw opengl gtk gtk2 syslog forms svgalib ggi  libgd utmp bfd gdbm  tcl cdrom imlib gnome1 fpgtk newt  ldap openal mad oggvorbis a52 modplug dts openssl pcap libcurl cairo aspell sdl graph
+override TARGET_DIRS+=chm  fftw opengl gtk gtk2 syslog forms svgalib ggi  libgd utmp bfd gdbm  tcl cdrom imlib gnome1 fpgtk newt  openal mad oggvorbis a52 modplug dts openssl pcap libcurl cairo aspell sdl graph
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 override TARGET_DIRS+=chm  opengl gtk syslog forms svgalib ggi  libgd utmp bfd gdbm  fpgtk tcl imlib gnome1 openssl pcap libcurl cairo aspell
@@ -343,7 +343,7 @@ ifeq ($(FULL_TARGET),powerpc-embedded)
 override TARGET_DIRS+=chm
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_DIRS+=chm  fftw opengl gtk gtk2 syslog forms svgalib ggi  libgd utmp bfd gdbm  tcl cdrom imlib gnome1 fpgtk newt  ldap openal mad oggvorbis a52 modplug dts openssl pcap libcurl cairo aspell graph
+override TARGET_DIRS+=chm  fftw opengl gtk gtk2 syslog forms svgalib ggi  libgd utmp bfd gdbm  tcl cdrom imlib gnome1 fpgtk newt  openal mad oggvorbis a52 modplug dts openssl pcap libcurl cairo aspell graph
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 override TARGET_DIRS+=chm  opengl gtk syslog forms svgalib ggi  libgd utmp bfd gdbm  fpgtk tcl imlib gnome1 openssl pcap libcurl cairo aspell
@@ -355,7 +355,7 @@ ifeq ($(FULL_TARGET),sparc-embedded)
 override TARGET_DIRS+=chm
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_DIRS+=chm  fftw opengl gtk gtk2 syslog forms svgalib ggi  libgd utmp bfd gdbm  tcl cdrom imlib gnome1 fpgtk newt  ldap openal mad oggvorbis a52 modplug dts openssl pcap libcurl cairo aspell sdl graph
+override TARGET_DIRS+=chm  fftw opengl gtk gtk2 syslog forms svgalib ggi  libgd utmp bfd gdbm  tcl cdrom imlib gnome1 fpgtk newt  openal mad oggvorbis a52 modplug dts openssl pcap libcurl cairo aspell sdl graph
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 override TARGET_DIRS+=chm  fftw opengl gtk gtk2 syslog forms svgalib ggi  libgd utmp bfd gdbm  fpgtk tcl imlib gnome1 openssl pcap libcurl cairo sdl graph aspell
@@ -370,7 +370,7 @@ ifeq ($(FULL_TARGET),x86_64-embedded)
 override TARGET_DIRS+=chm
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_DIRS+=chm  fftw opengl gtk gtk2 syslog forms svgalib ggi  libgd utmp bfd gdbm  tcl cdrom imlib gnome1 fpgtk newt  ldap openal mad oggvorbis a52 modplug dts openssl pcap libcurl cairo aspell graph
+override TARGET_DIRS+=chm  fftw opengl gtk gtk2 syslog forms svgalib ggi  libgd utmp bfd gdbm  tcl cdrom imlib gnome1 fpgtk newt  openal mad oggvorbis a52 modplug dts openssl pcap libcurl cairo aspell graph
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 override TARGET_DIRS+=chm  palmunits
@@ -391,7 +391,7 @@ ifeq ($(FULL_TARGET),arm-symbian)
 override TARGET_DIRS+=chm
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_DIRS+=chm  fftw opengl gtk gtk2 syslog forms svgalib ggi  libgd utmp bfd gdbm  tcl cdrom imlib gnome1 fpgtk newt  ldap openal mad oggvorbis a52 modplug dts openssl pcap libcurl cairo aspell graph
+override TARGET_DIRS+=chm  fftw opengl gtk gtk2 syslog forms svgalib ggi  libgd utmp bfd gdbm  tcl cdrom imlib gnome1 fpgtk newt  openal mad oggvorbis a52 modplug dts openssl pcap libcurl cairo aspell graph
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 override TARGET_DIRS+=chm  fftw opengl gtk gtk2 syslog forms  libgd utmp bfd gdbm  fpgtk tcl imlib gnome1 openssl libcurl cairo aspell
@@ -1498,7 +1498,6 @@ TARGET_DIRS_IMLIB=1
 TARGET_DIRS_GNOME1=1
 TARGET_DIRS_FPGTK=1
 TARGET_DIRS_NEWT=1
-TARGET_DIRS_LDAP=1
 TARGET_DIRS_OPENAL=1
 TARGET_DIRS_MAD=1
 TARGET_DIRS_OGGVORBIS=1
@@ -1722,7 +1721,6 @@ TARGET_DIRS_IMLIB=1
 TARGET_DIRS_GNOME1=1
 TARGET_DIRS_FPGTK=1
 TARGET_DIRS_NEWT=1
-TARGET_DIRS_LDAP=1
 TARGET_DIRS_OPENAL=1
 TARGET_DIRS_MAD=1
 TARGET_DIRS_OGGVORBIS=1
@@ -1840,7 +1838,6 @@ TARGET_DIRS_IMLIB=1
 TARGET_DIRS_GNOME1=1
 TARGET_DIRS_FPGTK=1
 TARGET_DIRS_NEWT=1
-TARGET_DIRS_LDAP=1
 TARGET_DIRS_OPENAL=1
 TARGET_DIRS_MAD=1
 TARGET_DIRS_OGGVORBIS=1
@@ -1934,7 +1931,6 @@ TARGET_DIRS_IMLIB=1
 TARGET_DIRS_GNOME1=1
 TARGET_DIRS_FPGTK=1
 TARGET_DIRS_NEWT=1
-TARGET_DIRS_LDAP=1
 TARGET_DIRS_OPENAL=1
 TARGET_DIRS_MAD=1
 TARGET_DIRS_OGGVORBIS=1
@@ -2016,7 +2012,6 @@ TARGET_DIRS_IMLIB=1
 TARGET_DIRS_GNOME1=1
 TARGET_DIRS_FPGTK=1
 TARGET_DIRS_NEWT=1
-TARGET_DIRS_LDAP=1
 TARGET_DIRS_OPENAL=1
 TARGET_DIRS_MAD=1
 TARGET_DIRS_OGGVORBIS=1
@@ -2113,7 +2108,6 @@ TARGET_DIRS_IMLIB=1
 TARGET_DIRS_GNOME1=1
 TARGET_DIRS_FPGTK=1
 TARGET_DIRS_NEWT=1
-TARGET_DIRS_LDAP=1
 TARGET_DIRS_OPENAL=1
 TARGET_DIRS_MAD=1
 TARGET_DIRS_OGGVORBIS=1
@@ -2168,7 +2162,6 @@ TARGET_DIRS_IMLIB=1
 TARGET_DIRS_GNOME1=1
 TARGET_DIRS_FPGTK=1
 TARGET_DIRS_NEWT=1
-TARGET_DIRS_LDAP=1
 TARGET_DIRS_OPENAL=1
 TARGET_DIRS_MAD=1
 TARGET_DIRS_OGGVORBIS=1
@@ -3061,51 +3054,6 @@ newt:
 	$(MAKE) -C newt all
 .PHONY: newt_all newt_debug newt_smart newt_release newt_units newt_examples newt_shared newt_install newt_sourceinstall newt_exampleinstall newt_distinstall newt_zipinstall newt_zipsourceinstall newt_zipexampleinstall newt_zipdistinstall newt_clean newt_distclean newt_cleanall newt_info newt_makefiles newt
 endif
-ifdef TARGET_DIRS_LDAP
-ldap_all:
-	$(MAKE) -C ldap all
-ldap_debug:
-	$(MAKE) -C ldap debug
-ldap_smart:
-	$(MAKE) -C ldap smart
-ldap_release:
-	$(MAKE) -C ldap release
-ldap_units:
-	$(MAKE) -C ldap units
-ldap_examples:
-	$(MAKE) -C ldap examples
-ldap_shared:
-	$(MAKE) -C ldap shared
-ldap_install:
-	$(MAKE) -C ldap install
-ldap_sourceinstall:
-	$(MAKE) -C ldap sourceinstall
-ldap_exampleinstall:
-	$(MAKE) -C ldap exampleinstall
-ldap_distinstall:
-	$(MAKE) -C ldap distinstall
-ldap_zipinstall:
-	$(MAKE) -C ldap zipinstall
-ldap_zipsourceinstall:
-	$(MAKE) -C ldap zipsourceinstall
-ldap_zipexampleinstall:
-	$(MAKE) -C ldap zipexampleinstall
-ldap_zipdistinstall:
-	$(MAKE) -C ldap zipdistinstall
-ldap_clean:
-	$(MAKE) -C ldap clean
-ldap_distclean:
-	$(MAKE) -C ldap distclean
-ldap_cleanall:
-	$(MAKE) -C ldap cleanall
-ldap_info:
-	$(MAKE) -C ldap info
-ldap_makefiles:
-	$(MAKE) -C ldap makefiles
-ldap:
-	$(MAKE) -C ldap all
-.PHONY: ldap_all ldap_debug ldap_smart ldap_release ldap_units ldap_examples ldap_shared ldap_install ldap_sourceinstall ldap_exampleinstall ldap_distinstall ldap_zipinstall ldap_zipsourceinstall ldap_zipexampleinstall ldap_zipdistinstall ldap_clean ldap_distclean ldap_cleanall ldap_info ldap_makefiles ldap
-endif
 ifdef TARGET_DIRS_OPENAL
 openal_all:
 	$(MAKE) -C openal all

+ 2 - 2
packages/extra/Makefile.fpc

@@ -7,8 +7,8 @@ dirs_linux= fftw \
             opengl gtk gtk2 syslog \
            forms svgalib ggi  libgd \
            utmp bfd gdbm  tcl cdrom \
-           imlib gnome1 fpgtk newt uuid \
-           ldap openal mad oggvorbis a52 \
+           imlib gnome1 fpgtk newt  \
+          openal mad oggvorbis a52 \
            modplug dts openssl pcap libcurl cairo aspell
 dirs_i386_linux= lua sdl graph
 dirs_x86_64_linux=sdl graph

+ 2328 - 0
packages/ldap/Makefile

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

+ 26 - 0
packages/ldap/Makefile.fpc

@@ -0,0 +1,26 @@
+#
+#   Makefile.fpc for LDAP bindings
+#
+
+[package]
+name=ldap
+version=2.0.0
+
+[target]
+units=lber ldap
+
+[require]
+packages=hash
+
+[install]
+fpcpackage=y
+
+[compiler]
+includedir=src
+sourcedir=src tests
+
+[default]
+fpcdir=../..
+
+[rules]
+.NOTPARALLEL:

+ 42 - 0
packages/ldap/fpmake.pp

@@ -0,0 +1,42 @@
+{$ifndef ALLPACKAGES}
+{$mode objfpc}{$H+}
+program fpmake;
+
+uses fpmkunit;
+
+Var
+  P : TPackage;
+  T : TTarget;
+begin
+  With Installer do
+    begin
+{$endif ALLPACKAGES}
+
+    P:=AddPackage('ldap');
+{$ifdef ALLPACKAGES}
+    P.Directory:='ldap';
+{$endif ALLPACKAGES}
+    P.Version:='2.0.0';
+    P.SourcePath.Add('src');
+
+    T:=P.Targets.AddUnit('lber.pas');
+      with T.Dependencies do
+        begin
+          AddInclude('lber_typesh.inc');
+          AddInclude('lberh.inc');
+        end;
+    T:=P.Targets.AddUnit('ldap.pas');
+      with T.Dependencies do
+        begin
+          AddInclude('ldap_featuresh.inc');
+          AddInclude('ldap_schemah.inc');
+          AddInclude('ldaph.inc');
+          AddUnit('lber');
+        end;
+
+
+{$ifndef ALLPACKAGES}
+    Run;
+    end;
+end.
+{$endif ALLPACKAGES}

+ 99 - 0
packages/ldap/src/lber.pas

@@ -0,0 +1,99 @@
+{
+  Translation of the LDAP lber headers for FreePascal
+  Copyright (C) 2006 by Ivo Steinmann
+}
+
+unit lber;
+
+{$mode objfpc}
+
+interface
+
+{$linklib lber}
+
+{$include lber_typesh.inc}
+{$include lberh.inc}
+
+implementation
+
+function LBER_INVALID(t: ber_tag_t): ber_tag_t;
+// #define LBER_INVALID(t)     (((t) & (ber_tag_t) = $080UL) && (((t) & (ber_tag_t) ~ = $0FF))
+begin
+  LBER_INVALID := (t and $80) and (t and $FF);
+end;
+
+function LBER_OPT_ON: Pointer;
+// #define LBER_OPT_ON     ((void *) &ber_pvt_opt_on)
+begin
+  LBER_OPT_ON := @ber_pvt_opt_on;
+end;
+
+function LBER_SBIOD_READ_NEXT(sbiod: PSockbuf_IO_Desc; buf: Pointer; len: ber_len_t): ber_slen_t;
+// #define LBER_SBIOD_READ_NEXT( sbiod, buf, len ) ( (sbiod)->sbiod_next->sbiod_io->sbi_read( (sbiod)->sbiod_next,  buf, len ) )
+begin
+  LBER_SBIOD_READ_NEXT := sbiod^.sbiod_next^.sbiod_io^.sbi_read(sbiod^.sbiod_next, buf, len);
+end;
+
+function LBER_SBIOD_WRITE_NEXT(sbiod: PSockbuf_IO_Desc; buf: Pointer; len: ber_len_t): ber_slen_t;
+// #define LBER_SBIOD_WRITE_NEXT( sbiod, buf, len ) ( (sbiod)->sbiod_next->sbiod_io->sbi_write( (sbiod)->sbiod_next, buf, len ) )
+begin
+  LBER_SBIOD_WRITE_NEXT := sbiod^.sbiod_next^.sbiod_io^.sbi_write(sbiod^.sbiod_next, buf, len);
+end;
+
+function LBER_SBIOD_CTRL_NEXT(sbiod: PSockbuf_IO_Desc; opt: cint; arg: Pointer): cint;
+// #define LBER_SBIOD_CTRL_NEXT( sbiod, opt, arg ) ( (sbiod)->sbiod_next ? ( (sbiod)->sbiod_next->sbiod_io->sbi_ctrl( (sbiod)->sbiod_next, opt, arg ) ) : 0 )
+begin
+  if Assigned(sbiod^.sbiod_next) then
+    LBER_SBIOD_CTRL_NEXT := sbiod^.sbiod_next^.sbiod_io^.sbi_ctrl(sbiod^.sbiod_next, opt, arg) else
+    LBER_SBIOD_CTRL_NEXT := 0;
+end;
+
+function ber_bvstr(const str: pcchar): PBerval;
+begin
+  ber_bvstr := ber_str2bv(str, 0, false, nil);
+end;
+
+function ber_bvstrdup(const str: pcchar): PBerval;
+begin
+  ber_bvstrdup := ber_str2bv(str, 0, true, nil);
+end;
+
+function memcmp(p1, p2: Pointer; len: cint): cint;
+var
+  I: cint;
+begin
+  for I := 0 to len -1 do
+  begin
+    if pbyte(p1)^ < pbyte(p2)^ then
+    begin
+      memcmp := -1;
+      Exit;
+    end;
+
+    if pbyte(p1)^ > pbyte(p2)^ then
+    begin
+      memcmp := 1;
+      Exit;
+    end;
+
+    inc(p1, 1);
+    inc(p2, 1);
+  end;
+
+  memcmp := 0;
+end;
+
+function ber_bvcmp(v1, v2: PBerval): cint;
+// #define ber_bvcmp(v1,v2) ((v1)->bv_len < (v2)->bv_len ? -1 : ((v1)->bv_len > (v2)->bv_len ? 1 : memcmp((v1)->bv_val, (v2)->bv_val, (v1)->bv_len) ))
+begin
+  if v1^.bv_len < v2^.bv_len then ber_bvcmp := -1 else
+  if v1^.bv_len > v2^.bv_len then ber_bvcmp :=  1 else
+    ber_bvcmp := memcmp(v1^.bv_val, v2^.bv_val, v1^.bv_len);
+end;
+
+function ber_errno: cint;
+begin
+  ber_errno := ber_errno_addr^;
+end;
+
+end.

+ 67 - 0
packages/ldap/src/lber_typesh.inc

@@ -0,0 +1,67 @@
+(* include/lber_types.h.  Generated by configure.  *)
+(* $OpenLDAP: pkg/ldap/include/lber_types.h.in,v 1.10.2.3 2005/01/20 17:00:58 kurt Exp $ *)
+(* This work is part of OpenLDAP Software <http://www.openldap.org/>.
+ *
+ * Copyright 1998-2005 The OpenLDAP Foundation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.
+ *
+ * A copy of this license is available in file LICENSE in the
+ * top-level directory of the distribution or, alternatively, at
+ * <http://www.OpenLDAP.org/license.html>.
+ *)
+
+(*
+ * LBER types
+ *)
+
+uses
+  ctypes;
+
+type
+  ppcchar                           = ^pcchar;
+  pppcchar                          = ^ppcchar;
+
+(* LBER Boolean, enum, integers (32 bits or larger) *)
+  LBER_INT_T                        = cint;
+
+(* LBER tags (32 bits or larger) *)
+  LBER_TAG_T                        = clong;
+
+(* LBER socket descriptor *)
+  LBER_SOCKET_T                     = cint;
+
+(* LBER lengths (32 bits or larger) *)
+  LBER_LEN_T                        = clong;
+
+(* ------------------------------------------------------------ *)
+
+(* Booleans, enumerations, and integers *)
+  pber_int_t                        = ^ber_int_t;
+  ber_int_t                         = cint;      // LBER_INT_T;
+
+(* signed and unsigned versions *)
+  pber_sint_t                       = ^ber_sint_t;
+  ber_sint_t                        = csint;     // signed LBER_INT_T
+
+  pber_uint_t                       = ^ber_uint_t;
+  ber_uint_t                        = cuint;     // unsigned LBER_INT_T
+
+(* tags *)
+  pber_tag_t                        = ^ber_tag_t;
+  ber_tag_t                         = culong;    // unsigned LBER_TAG_T
+
+(* "socket" descriptors *)
+  pber_socket_t                     = ^ber_socket_t;
+  ber_socket_t                      = cint;      // LBER_SOCKET_T
+
+(* lengths *)
+  pber_len_t                        = ^ber_len_t;
+  ber_len_t                         = culong;    // unsigned LBER_LEN_T
+
+(* signed lengths *)
+  pber_slen_t                       = ^ber_slen_t;
+  ber_slen_t                        = clong;     // signed LBER_LEN_T;

+ 427 - 0
packages/ldap/src/lberh.inc

@@ -0,0 +1,427 @@
+(* $OpenLDAP: pkg/ldap/include/lber.h,v 1.83.2.11 2005/01/20 17:00:58 kurt Exp $ *)
+(* This work is part of OpenLDAP Software <http://www.openldap.org/>.
+ *
+ * Copyright 1998-2005 The OpenLDAP Foundation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.
+ *
+ * A copy of this license is available in file LICENSE in the
+ * top-level directory of the distribution or, alternatively, at
+ * <http://www.OpenLDAP.org/license.html>.
+ *)
+(* Portions Copyright (c) 1990 Regents of the University of Michigan.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that this notice is preserved and that due credit is given
+ * to the University of Michigan at Ann Arbor. The name of the University
+ * may not be used to endorse or promote products derived from this
+ * software without specific prior written permission. This software
+ * is provided ``as is'' without express or implied warranty.
+ *)
+
+(* Overview of LBER tag construction
+ *
+ *  Bits
+ *  ______
+ *  8 7 | CLASS
+ *  0 0 = UNIVERSAL
+ *  0 1 = APPLICATION
+ *  1 0 = CONTEXT-SPECIFIC
+ *  1 1 = PRIVATE
+ *      _____
+ *      | 6 | DATA-TYPE
+ *        0 = PRIMITIVE
+ *        1 = CONSTRUCTED
+ *          ___________
+ *          | 5 ... 1 | TAG-NUMBER
+ *)
+
+const
+(* BER classes and mask *)
+  LBER_CLASS_UNIVERSAL              = ber_tag_t($00);
+  LBER_CLASS_APPLICATION            = ber_tag_t($40);
+  LBER_CLASS_CONTEXT                = ber_tag_t($80);
+  LBER_CLASS_PRIVATE                = ber_tag_t($c0);
+  LBER_CLASS_MASK                   = ber_tag_t($c0);
+
+(* BER encoding type and mask *)
+  LBER_PRIMITIVE                    = ber_tag_t($00);
+  LBER_CONSTRUCTED                  = ber_tag_t($20);
+  LBER_ENCODING_MASK                = ber_tag_t($20);
+
+  LBER_BIG_TAG_MASK                 = ber_tag_t($1f);
+  LBER_MORE_TAG_MASK                = ber_tag_t($80);
+
+(*
+ * Note that LBER_ERROR and LBER_DEFAULT are values that can never appear
+ * as valid BER tags, and so it is safe to use them to report errors.  In
+ * fact, any tag for which the following is true is invalid:
+ *)
+function LBER_INVALID(t: ber_tag_t): ber_tag_t;
+
+const
+  LBER_ERROR                        = ber_tag_t(-1);
+  LBER_DEFAULT                      = ber_tag_t(-1);
+
+(* general BER types we know about *)
+  LBER_BOOLEAN                      = ber_tag_t($01);
+  LBER_INTEGER                      = ber_tag_t($02);
+  LBER_BITSTRING                    = ber_tag_t($03);
+  LBER_OCTETSTRING                  = ber_tag_t($04);
+  LBER_NULL                         = ber_tag_t($05);
+  LBER_ENUMERATED                   = ber_tag_t($0a);
+  LBER_SEQUENCE                     = ber_tag_t($30);    (* constructed *)
+  LBER_SET                          = ber_tag_t($31);    (* constructed *)
+
+(* LBER BerElement options *)
+  LBER_USE_DER                      = $01;
+
+(* get/set options for BerElement *)
+  LBER_OPT_BER_OPTIONS              = $01;
+  LBER_OPT_BER_DEBUG                = $02;
+  LBER_OPT_BER_REMAINING_BYTES      = $03;
+  LBER_OPT_BER_TOTAL_BYTES          = $04;
+  LBER_OPT_BER_BYTES_TO_WRITE       = $05;
+  LBER_OPT_BER_MEMCTX               = $06;
+
+  LBER_OPT_DEBUG_LEVEL              = LBER_OPT_BER_DEBUG;
+  LBER_OPT_REMAINING_BYTES          = LBER_OPT_BER_REMAINING_BYTES;
+  LBER_OPT_TOTAL_BYTES              = LBER_OPT_BER_TOTAL_BYTES;
+  LBER_OPT_BYTES_TO_WRITE           = LBER_OPT_BER_BYTES_TO_WRITE;
+
+  LBER_OPT_LOG_PRINT_FN             = $8001;
+  LBER_OPT_MEMORY_FNS               = $8002;
+  LBER_OPT_ERROR_FN                 = $8003;
+  LBER_OPT_LOG_PRINT_FILE           = $8004;
+
+(* get/set Memory Debug options *)
+  LBER_OPT_MEMORY_INUSE             = $8005;  (* for memory debugging *)
+  LBER_OPT_LOG_PROC                 = $8006;  (* for external logging function *)
+
+
+type
+  BER_ERRNO_FN                      = function: pcint; cdecl;
+
+  BER_LOG_PRINT_FN                  = procedure(const buf: pcchar); cdecl;
+
+  BER_MEMALLOC_FN                   = function(size: ber_len_t): Pointer; cdecl;
+  BER_MEMCALLOC_FN                  = function(n: ber_len_t; size: ber_len_t): Pointer; cdecl;
+  BER_MEMREALLOC_FN                 = function(p: Pointer; size: ber_len_t): Pointer; cdecl;
+  BER_MEMFREE_FN                    = function(p: Pointer): Pointer; cdecl;
+
+  plber_memory_fns                  = ^lber_memory_fns;
+  lber_memory_fns                   = record
+    bmf_malloc  : BER_MEMALLOC_FN;
+    bmf_calloc  : BER_MEMCALLOC_FN;
+    bmf_realloc : BER_MEMREALLOC_FN;
+    bmf_free    : BER_MEMFREE_FN;
+  end;
+
+  PBerMemoryFunctions               = ^BerMemoryFunctions;
+  BerMemoryFunctions                = lber_memory_fns;
+
+const
+(* LBER Sockbuf_IO options *)
+  LBER_SB_OPT_GET_FD                = 1;
+  LBER_SB_OPT_SET_FD                = 2;
+  LBER_SB_OPT_HAS_IO                = 3;
+  LBER_SB_OPT_SET_NONBLOCK          = 4;
+  LBER_SB_OPT_GET_SSL               = 7;
+  LBER_SB_OPT_DATA_READY            = 8;
+  LBER_SB_OPT_SET_READAHEAD         = 9;
+  LBER_SB_OPT_DRAIN                 = 10;
+  LBER_SB_OPT_NEEDS_READ            = 11;
+  LBER_SB_OPT_NEEDS_WRITE           = 12;
+  LBER_SB_OPT_GET_MAX_INCOMING      = 13;
+  LBER_SB_OPT_SET_MAX_INCOMING      = 14;
+(* Largest option used by the library *)
+  LBER_SB_OPT_OPT_MAX               = 14;
+
+(* LBER IO operations stacking levels *)
+  LBER_SBIOD_LEVEL_PROVIDER         = 10;
+  LBER_SBIOD_LEVEL_TRANSPORT        = 20;
+  LBER_SBIOD_LEVEL_APPLICATION      = 30;
+
+(* get/set options for Sockbuf *)
+  LBER_OPT_SOCKBUF_DESC             = $1000;
+  LBER_OPT_SOCKBUF_OPTIONS          = $1001;
+  LBER_OPT_SOCKBUF_DEBUG            = $1002;
+
+  LBER_OPT_SUCCESS                  =  0;
+  LBER_OPT_ERROR                    = -1;
+
+(* on/off values *)
+const
+  LBER_OPT_OFF                      = Pointer(0);
+
+var
+  ber_pvt_opt_on: cchar; cvar; external;
+
+function LBER_OPT_ON: Pointer;
+
+(* Structure for LBER IO operarion descriptor *)
+type
+  PBerElement                       = Pointer;
+
+  PSockbuf                          = Pointer;
+
+  PSeqorset                         = Pointer;
+
+  PSockbuf_IO                       = ^Sockbuf_IO;
+
+  PSockbuf_IO_Desc                  = ^Sockbuf_IO_Desc;
+  Sockbuf_IO_Desc                   = record
+    sbiod_level     : cint;
+    sbiod_sb        : PSockbuf;
+    sbiod_io        : PSockbuf_IO;
+    sbiod_pvt       : Pointer;
+    sbiod_next      : PSockbuf_IO_Desc;
+  end;
+
+(* Structure for LBER IO operation functions *)
+  Sockbuf_IO                        = record
+    sbi_setup       : function(sbiod: PSockbuf_IO_Desc; arg: Pointer): cint; cdecl;
+    sbi_remove      : function(sbiod: PSockbuf_IO_Desc): cint; cdecl;
+    sbi_ctrl        : function(sbiod: PSockbuf_IO_Desc; opt: cint; arg: Pointer): cint; cdecl;
+    sbi_read        : function(sbiod: PSockbuf_IO_Desc; buf: Pointer; len: ber_len_t): ber_slen_t; cdecl;
+    sbi_write       : function(sbiod: PSockbuf_IO_Desc; buf: Pointer; len: ber_len_t): ber_slen_t; cdecl;
+    sbi_close       : function(sbiod: PSockbuf_IO_Desc): cint; cdecl;
+  end;
+
+(* Helper macros for LBER IO functions *)
+function LBER_SBIOD_READ_NEXT(sbiod: PSockbuf_IO_Desc; buf: Pointer; len: ber_len_t): ber_slen_t;
+
+function LBER_SBIOD_WRITE_NEXT(sbiod: PSockbuf_IO_Desc; buf: Pointer; len: ber_len_t): ber_slen_t;
+
+function LBER_SBIOD_CTRL_NEXT(sbiod: PSockbuf_IO_Desc; opt: cint; arg: Pointer): cint;
+
+
+(* structure for returning a sequence of octet strings + length *)
+type
+  PPPBerval                         = ^PPBerval;
+  PPBerval                          = ^PBerval;
+  PBerval                           = ^Berval;
+  Berval                            = record
+    bv_len  : ber_len_t;
+    bv_val  : pcchar;
+  end;
+  
+  PBerVarray                        = ^BerVarray;
+  BerVarray                         = ^PBerval;  (* To distinguish from a single bv *)
+
+
+(* this should be moved to lber-cint.h *)
+
+(*
+ * in bprint.c:
+ *)
+procedure ber_error_print(const data: pcchar); cdecl; external;
+
+procedure ber_bprint(const data: pcchar; len: ber_len_t); cdecl; external;
+
+procedure ber_dump(ber: PBerElement; inout : cint); cdecl; external;
+
+procedure ber_sos_dump(sos: PSeqorset); cdecl; external;
+
+
+(*
+ * in decode.c:
+ *)
+type
+  BERDecodeCallback = function(ber: PBerElement; data: Pointer; mode: cint): cint; cdecl;
+
+
+function ber_get_tag(ber: PBerElement): ber_tag_t; cdecl; external;
+
+function ber_skip_tag(ber: PBerElement; var len: ber_len_t): ber_tag_t; cdecl; external;
+
+function ber_peek_tag(ber: PBerElement; var len: ber_len_t): ber_tag_t; cdecl; external;
+
+function ber_get_int(ber: PBerElement; var num: ber_int_t): ber_tag_t; cdecl; external;
+
+function ber_get_enum(ber: PBerElement; var num: ber_int_t): ber_tag_t; cdecl; external;
+
+function ber_get_stringb(ber: PBerElement; buf: pcchar; var len: ber_len_t): ber_tag_t; cdecl; external;
+
+function ber_get_stringbv(ber: PBerElement; bv: PBerval; alloc: cbool): ber_tag_t; cdecl; external;
+
+function ber_get_stringa(ber: PBerElement; var buf: pcchar): ber_tag_t; cdecl; external;
+
+function ber_get_stringal(ber: PBerElement; var bv: PBerval): ber_tag_t; cdecl; external;
+
+function ber_get_bitstringa(ber: PBerElement; var buf: pcchar; var len: ber_len_t): ber_tag_t; cdecl; external;
+
+function ber_get_null(ber: PBerElement): ber_tag_t; cdecl; external;
+
+function ber_get_Boolean(ber: PBerElement; var boolval: ber_int_t): ber_tag_t; cdecl; external;
+
+function ber_first_element(ber: PBerElement; var len: ber_len_t; var last: pcchar): ber_tag_t; cdecl; external;
+
+function ber_next_element(ber: PBerElement; var len: ber_len_t; const last: pcchar): ber_tag_t; cdecl; external;
+
+function ber_scanf(ber: PBerElement;const fmt: pcchar): ber_tag_t; cdecl; varargs; external;
+
+
+(*
+ * in encode.c
+ *)
+type
+  BEREncodeCallback = function(ber: PBerElement; data: Pointer): cint;
+
+
+function ber_put_enum(ber: PBerElement; num: ber_int_t; tag: ber_tag_t): cint; cdecl; external;
+
+function ber_put_int(ber: PBerElement; num: ber_int_t; tag: ber_tag_t): cint; cdecl; external;
+
+function ber_put_ostring(ber: PBerElement; const str: pcchar; len: ber_len_t; tag: ber_tag_t): cint; cdecl; external;
+
+function ber_put_berval(ber: PBerElement; bv: PBerval; tag: ber_tag_t): cint; cdecl; external;
+
+function ber_put_string(ber: PBerElement; const str: pcchar; tag: ber_tag_t): cint; cdecl; external;
+
+function ber_put_bitstring(ber: PBerElement; const str: pcchar; bitlen: ber_len_t; tag: ber_tag_t): cint; cdecl; external;
+
+function ber_put_null(ber: PBerElement; tag: ber_tag_t): cint; cdecl; external;
+
+function ber_put_boolean(ber: PBerElement; boolval: ber_int_t; tag: ber_tag_t): cint; cdecl; external;
+
+function ber_start_seq(ber: PBerElement; tag: ber_tag_t): cint; cdecl; external;
+
+function ber_start_set(ber: PBerElement; tag: ber_tag_t): cint; cdecl; external;
+
+function ber_put_seq(ber: PBerElement): cint; cdecl; external;
+
+function ber_put_set(ber: PBerElement): cint; cdecl; external;
+
+function ber_printf(ber: PBerElement; const fmt: pcchar): cint; cdecl; varargs; external;
+
+
+(*
+ * in io.c:
+ *)
+
+function ber_read(ber: PBerElement; buf: pcchar; len: ber_len_t): ber_slen_t; cdecl; external;
+
+function ber_write(ber: PBerElement; const buf: pcchar; len: ber_len_t; nosos: cint): ber_slen_t; cdecl; external;
+
+procedure ber_free(ber: PBerElement; freebuf: cbool); cdecl; external;
+
+procedure ber_free_buf(ber: PBerElement); cdecl; external;
+
+function ber_flush(sb: PSockbuf; ber: PBerElement; freeit: cbool): cint; cdecl; external;
+
+function ber_alloc: PBerElement; cdecl; external; deprecated;
+
+function der_alloc: PBerElement; cdecl; external; deprecated;
+
+function ber_alloc_t(beroptions: cint): PBerElement; cdecl; external;
+
+function ber_dup(ber: PBerElement): PBerElement; cdecl; external;
+
+function ber_get_next(sb: PSockbuf; var len: ber_len_t; ber: PBerElement): ber_tag_t; cdecl; external;
+
+procedure ber_init2(ber: PBerElement; bv: PBerval; options: cint); cdecl; external;
+
+procedure ber_init_w_nullc(ber: PBerElement; options: cint); cdecl; external; deprecated;
+
+procedure ber_reset(ber: PBerElement; was_writing: cbool); cdecl; external;
+
+function ber_init(bv: PBerval): PBerElement; cdecl; external;
+
+function ber_flatten(ber: PBerElement; var bvPtr: PBerval): cint; cdecl; external;
+
+function ber_flatten2(ber: PBerElement; bv: PBerval; alloc: cbool): cint; cdecl; external;
+
+function ber_remaining(ber: PBerElement): cint; cdecl; external;
+
+
+(*
+ * LBER ber accessor functions
+ *)
+
+function ber_get_option(item: Pointer; option: cint; outvalue: Pointer): cint; cdecl; external;
+
+function ber_set_option(item: Pointer; option: cint; const invalue: Pointer): cint; cdecl; external;
+
+
+(*
+ * LBER sockbuf.c
+ *)
+
+function ber_sockbuf_alloc: PSockbuf; cdecl; external;
+
+procedure ber_sockbuf_free(sb: PSockbuf); cdecl; external;
+
+function ber_sockbuf_add_io(sb: PSockbuf; sbio: PSockbuf_IO; layer: cint; arg: Pointer): cint; cdecl; external;
+
+function ber_sockbuf_remove_io(sb: PSockbuf; sbio: PSockbuf_IO; layer: cint): cint; cdecl; external;
+
+function ber_sockbuf_ctrl(sb: PSockbuf; opt: cint; arg: Pointer): cint; cdecl; external;
+
+var
+  ber_sockbuf_io_tcp                : Sockbuf_IO; cvar; external;
+  ber_sockbuf_io_readahead          : Sockbuf_IO; cvar; external;
+  ber_sockbuf_io_fd                 : Sockbuf_IO; cvar; external;
+  ber_sockbuf_io_debug              : Sockbuf_IO; cvar; external;
+{$IFDEF LDAP_CONNECTIONLESS}
+  ber_sockbuf_io_udp                : Sockbuf_IO; cvar; external;
+{$ENDIF}
+
+
+(*
+ * LBER memory.c
+ *)
+
+function ber_memalloc(s: ber_len_t): Pointer; cdecl; external;
+
+function ber_memrealloc(p: Pointer; s: ber_len_t): Pointer; cdecl; external;
+
+function ber_memcalloc(n: ber_len_t; s: ber_len_t): Pointer; cdecl; external;
+
+procedure ber_memfree(p: Pointer); cdecl; external;
+
+procedure ber_memvfree(vector: PPointer); cdecl; external;
+
+procedure ber_bvfree(bv: PBerval); cdecl; external;
+
+procedure ber_bvecfree(bv: PPBerval); cdecl; external;
+
+function ber_bvecadd(var bvec: PPBerval; bv: PBerval): cint; cdecl; external;
+
+function ber_dupbv(dst: PBerval; src: PBerval): PBerval; cdecl; external;
+
+function ber_bvdup(src: PBerval): PBerval; cdecl; external;
+
+function ber_str2bv(const str: pcchar; len: ber_len_t; duplicate: cbool; bv: PBerval): PBerval; cdecl; external;
+
+function ber_mem2bv(const str: pcchar; len: ber_len_t; duplicate: cbool; bv: PBerval): PBerval; cdecl; external;
+
+function ber_bvstr(const str: pcchar): PBerval;
+
+function ber_bvstrdup(const str: pcchar): PBerval;
+
+function ber_strdup(const str: pcchar): pcchar; cdecl; external;
+
+procedure ber_bvarray_free(p: BerVarray); cdecl; external;
+
+function ber_bvarray_add(p: PBerVarray; bv: PBerval): cint; cdecl; external;
+
+function ber_bvcmp(v1, v2: PBerval): cint;
+
+
+(*
+ * error.c
+ *)
+
+function ber_errno_addr: pcint; cdecl; external;
+
+function ber_errno: cint;
+
+const
+  LBER_ERROR_NONE                   = $0;
+  LBER_ERROR_PARAM                  = $1;
+  LBER_ERROR_MEMORY                 = $2;

+ 78 - 0
packages/ldap/src/ldap.pas

@@ -0,0 +1,78 @@
+{
+  Translation of the LDAP headers for FreePascal
+  Copyright (C) 2006 by Ivo Steinmann
+}
+
+unit ldap;
+
+{$mode objfpc}
+
+interface
+
+uses
+  ctypes,
+  lber;
+
+{$linklib ldap}
+
+{$include ldap_featuresh.inc}
+{$include ldap_schemah.inc}
+{$include ldaph.inc}
+
+implementation
+
+function LDAP_OPT_ON: Pointer;
+// #define LDAP_OPT_ON     ((void *) &ber_pvt_opt_on)
+begin
+  LDAP_OPT_ON := @ber_pvt_opt_on;
+end;
+
+function LDAP_RANGE(n, x, y: ber_int_t): Boolean;
+// #define LDAP_RANGE(n,x,y)   (((x) <= (n)) && ((n) <= (y)))
+begin
+  LDAP_RANGE := (x <= n) and (n <= y);
+end;
+
+function LDAP_ATTR_ERROR(n: ber_int_t): Boolean;
+// #define LDAP_ATTR_ERROR(n)  LDAP_RANGE((n),0x10,0x15) (* 16-21 *)
+begin
+  LDAP_ATTR_ERROR := LDAP_RANGE(n, $10, $15);
+end;
+
+function LDAP_NAME_ERROR(n: ber_int_t): Boolean;
+// #define LDAP_NAME_ERROR(n)  LDAP_RANGE((n),0x20,0x24) (* 32-34,36 *)
+begin
+  LDAP_NAME_ERROR := LDAP_RANGE(n, $20, $24);
+end;
+
+function LDAP_SECURITY_ERROR(n: ber_int_t): Boolean;
+// #define LDAP_SECURITY_ERROR(n)  LDAP_RANGE((n),0x2F,0x32) (* 47-50 *)
+begin
+  LDAP_SECURITY_ERROR := LDAP_RANGE(n, $2F, $32);
+end;
+
+function LDAP_SERVICE_ERROR(n: ber_int_t): Boolean;
+// #define LDAP_SERVICE_ERROR(n)   LDAP_RANGE((n),0x33,0x36) (* 51-54 *)
+begin
+  LDAP_SERVICE_ERROR := LDAP_RANGE(n, $33, $36);
+end;
+
+function LDAP_UPDATE_ERROR(n: ber_int_t): Boolean;
+// #define LDAP_UPDATE_ERROR(n)    LDAP_RANGE((n),0x40,0x47) (* 64-69,71 *)
+begin
+  LDAP_UPDATE_ERROR := LDAP_RANGE(n, $40, $47);
+end;
+
+function LDAP_API_ERROR(n: ber_int_t): Boolean;
+// #define LDAP_API_ERROR(n)       LDAP_RANGE((n),0x51,0x61) (* 81-97 *)}
+begin
+  LDAP_API_ERROR := n < 0;
+end;
+
+function LDAP_API_RESULT(n: ber_int_t): Boolean;
+// #define LDAP_API_RESULT(n)      (((n) == LDAP_SUCCESS) || LDAP_RANGE((n),0x51,0x61)) (* 0,81-97 *)
+begin
+  LDAP_API_RESULT := n <= 0;
+end;
+
+end.

+ 59 - 0
packages/ldap/src/ldap_featuresh.inc

@@ -0,0 +1,59 @@
+(* include/ldap_features.h.  Generated automatically by configure.  *)
+(* $OpenLDAP: pkg/ldap/include/ldap_features.h.in,v 1.13.2.1 2003/02/09 17:02:17 kurt Exp $ *)
+(*
+ * Copyright 1998-2003 The OpenLDAP Foundation, Redwood City, California, USA
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.  A copy of this license is available at
+ * http://www.OpenLDAP.org/license.html or in file LICENSE in the
+ * top-level directory of the distribution.
+ *)
+
+(*
+ * LDAP Features
+ *)
+
+(* OpenLDAP API version macros *)
+const
+  LDAP_VENDOR_VERSION               = 20228;
+  LDAP_VENDOR_VERSION_MAJOR         = 2;
+  LDAP_VENDOR_VERSION_MINOR         = 2;
+  LDAP_VENDOR_VERSION_PATCH         = 28;
+
+(*
+** WORK IN PROGRESS!
+**
+** OpenLDAP reentrancy/thread-safeness should be dynamically
+** checked using ldap_get_option().
+**
+** The -lldap implementation is not thread-safe.
+**
+** The -lldap_r implementation is:
+**      LDAP_API_FEATURE_THREAD_SAFE (basic thread safety)
+** but also be:
+**      LDAP_API_FEATURE_SESSION_THREAD_SAFE
+**      LDAP_API_FEATURE_OPERATION_THREAD_SAFE
+**
+** The preprocessor flag LDAP_API_FEATURE_X_OPENLDAP_THREAD_SAFE
+** can be used to determine if -lldap_r is available at compile
+** time.  You must define LDAP_THREAD_SAFE if and only if you
+** link with -lldap_r.
+**
+** If you fail to define LDAP_THREAD_SAFE when linking with
+** -lldap_r or define LDAP_THREAD_SAFE when linking with -lldap,
+** provided header definations and declarations may be incorrect.
+**
+*)
+
+(* is -lldap_r available or not *)
+{$DEFINE LDAP_API_FEATURE_X_OPENLDAP_THREAD_SAFE}
+
+(* LDAP v2 Kerberos Bind *)
+//{$UNDEF LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND}
+
+(* LDAP v2 Referrals *)
+//{$UNDEF LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS}
+
+

+ 255 - 0
packages/ldap/src/ldap_schemah.inc

@@ -0,0 +1,255 @@
+(* $OpenLDAP: pkg/ldap/include/ldap_schema.h,v 1.32.2.3 2005/01/20 17:00:59 kurt Exp $ *)
+(* This work is part of OpenLDAP Software <http://www.openldap.org/>.
+ *
+ * Copyright 1998-2005 The OpenLDAP Foundation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.
+ *
+ * A copy of this license is available in file LICENSE in the
+ * top-level directory of the distribution or, alternatively, at
+ * <http://www.OpenLDAP.org/license.html>.
+ *)
+
+(* ldap-schema.h - Header for basic schema handling functions that can be
+ *      used by both clients and servers.
+ * these routines should be renamed ldap_x_...
+ *)
+
+
+(* Codes for parsing errors *)
+
+const
+  LDAP_SCHERR_OUTOFMEM              = 1;
+  LDAP_SCHERR_UNEXPTOKEN            = 2;
+  LDAP_SCHERR_NOLEFTPAREN           = 3;
+  LDAP_SCHERR_NORIGHTPAREN          = 4;
+  LDAP_SCHERR_NODIGIT               = 5;
+  LDAP_SCHERR_BADNAME               = 6;
+  LDAP_SCHERR_BADDESC               = 7;
+  LDAP_SCHERR_BADSUP                = 8;
+  LDAP_SCHERR_DUPOPT                = 9;
+  LDAP_SCHERR_EMPTY                 = 10;
+  LDAP_SCHERR_MISSING               = 11;
+  LDAP_SCHERR_OUT_OF_ORDER          = 12;
+
+type
+  pldap_schema_extension_item       = ^ldap_schema_extension_item;
+  ldap_schema_extension_item        = record
+    lsei_name   : pcchar;
+    lsei_values : ppcchar;
+  end;
+
+  PPLDAPSchemaExtensionItem         = ^PLDAPSchemaExtensionItem;
+  PLDAPSchemaExtensionItem          = ^LDAPSchemaExtensionItem;
+  LDAPSchemaExtensionItem           = ldap_schema_extension_item;
+
+  pldap_syntax                      = ^ldap_syntax;
+  ldap_syntax                       = record
+    syn_oid         : pcchar;        (* REQUIRED *)
+    syn_names       : ppcchar;       (* OPTIONAL *)
+    syn_desc        : pcchar;        (* OPTIONAL *)
+    syn_extensions  : PPLDAPSchemaExtensionItem; (* OPTIONAL *)
+  end;
+
+  PLDAPSyntax                       = ^ldap_syntax;
+  LDAPSyntax                        = ldap_syntax;
+
+  pldap_matchingrule                = ^ldap_matchingrule;
+  ldap_matchingrule                 = record
+    mr_oid          : pcchar;        (* REQUIRED *)
+    mr_names        : ppcchar;       (* OPTIONAL *)
+    mr_desc         : pcchar;        (* OPTIONAL *)
+    mr_obsolete     : cint;         (* OPTIONAL *)
+    mr_syntax_oid   : pcchar;        (* REQUIRED *)
+    mr_extensions   : PPLDAPSchemaExtensionItem; (* OPTIONAL *)
+  end;
+
+  PLDAPMatchingRule                 = ^LDAPMatchingRule;
+  LDAPMatchingRule                  = ldap_matchingrule;
+
+  pldap_matchingruleuse             = ^ldap_matchingruleuse;
+  ldap_matchingruleuse              = record
+    mru_oid         : pcchar;        (* REQUIRED *)
+    mru_names       : ppcchar;       (* OPTIONAL *)
+    mru_desc        : pcchar;        (* OPTIONAL *)
+    mru_obsolete    : cint;         (* OPTIONAL *)
+    mru_applies_oids: ppcchar;       (* REQUIRED *)
+    mru_extensions  : PPLDAPSchemaExtensionItem; (* OPTIONAL *)
+  end;
+
+  PLDAPMatchingRuleUse              = ^LDAPMatchingRuleUse;
+  LDAPMatchingRuleUse               = ldap_matchingruleuse;
+
+  pldap_attributetype               = ^ldap_attributetype;
+  ldap_attributetype                = record
+    at_oid          : pcchar;        (* REQUIRED *)
+    at_names        : ppcchar;       (* OPTIONAL *)
+    at_desc         : pcchar;        (* OPTIONAL *)
+    at_obsolete     : cint;         (* 0=no, 1=yes *)
+    at_sup_oid      : pcchar;        (* OPTIONAL *)
+    at_equality_oid : pcchar;        (* OPTIONAL *)
+    at_ordering_oid : pcchar;        (* OPTIONAL *)
+    at_substr_oid   : pcchar;        (* OPTIONAL *)
+    at_syntax_oid   : pcchar;        (* OPTIONAL *)
+    at_syntax_len   : cint;         (* OPTIONAL *)
+    at_single_value : cint;         (* 0=no, 1=yes *)
+    at_collective   : cint;         (* 0=no, 1=yes *)
+    at_no_user_mod  : cint;         (* 0=no, 1=yes *)
+    at_usage        : cint;         (* 0=userApplications, 1=directoryOperation, 2=distributedOperation, 3=dSAOperation *)
+    at_extensions   : PPLDAPSchemaExtensionItem; (* OPTIONAL *)
+  end;
+
+  PLDAPAttributeType                = ^LDAPAttributeType;
+  LDAPAttributeType                 = ldap_attributetype;
+
+  pldap_objectclass                 = ^ldap_objectclass;
+  ldap_objectclass                  = record
+    oc_oid          : pcchar;        (* REQUIRED *)
+    oc_names        : ppcchar;       (* OPTIONAL *)
+    oc_desc         : pcchar;        (* OPTIONAL *)
+    oc_obsolete     : cint;         (* 0=no, 1=yes *)
+    oc_sup_oids     : ppcchar;       (* OPTIONAL *)
+    oc_kind         : cint;         (* 0=ABSTRACT, 1=STRUCTURAL, 2=AUXILIARY *)
+    oc_at_oids_must : ppcchar;       (* OPTIONAL *)
+    oc_at_oids_may  : ppcchar;       (* OPTIONAL *)
+    oc_extensions   : PPLDAPSchemaExtensionItem; (* OPTIONAL *)
+  end;
+
+  PLDAPObjectClass                  = ^LDAPObjectClass;
+  LDAPObjectClass                   = ldap_objectclass;
+
+  pldap_contentrule                 = ^ldap_contentrule;
+  ldap_contentrule                  = record
+    cr_oid          : pcchar;        (* REQUIRED *)
+    cr_names        : ppcchar;       (* OPTIONAL *)
+    cr_desc         : pcchar;        (* OPTIONAL *)
+    cr_sup_oids     : ppcchar;       (* OPTIONAL *)
+    cr_obsolete     : cint;         (* 0=no, 1=yes *)
+    cr_oc_oids_aux  : ppcchar;       (* OPTIONAL *)
+    cr_at_oids_must : ppcchar;       (* OPTIONAL *)
+    cr_at_oids_may  : ppcchar;       (* OPTIONAL *)
+    cr_at_oids_not  : ppcchar;       (* OPTIONAL *)
+    cr_extensions   : PPLDAPSchemaExtensionItem; (* OPTIONAL *)
+  end;
+
+  PLDAPContentRule                  = ^LDAPContentRule;
+  LDAPContentRule                   = ldap_contentrule;
+
+  pldap_nameform                    = ^ldap_nameform;
+  ldap_nameform                     = record
+    nf_oid          : pcchar;        (* REQUIRED *)
+    nf_names        : ppcchar;       (* OPTIONAL *)
+    nf_desc         : pcchar;        (* OPTIONAL *)
+    nf_obsolete     : cint;         (* 0=no, 1=yes *)
+    nf_objectclass  : pcchar;        (* REQUIRED *)
+    nf_at_oids_must : ppcchar;       (* REQUIRED *)
+    nf_at_oids_may  : ppcchar;       (* OPTIONAL *)
+    nf_extensions   : PPLDAPSchemaExtensionItem; (* OPTIONAL *)
+  end;
+
+  PLDAPNameForm                     = ^LDAPNameForm;
+  LDAPNameForm                      = ldap_nameform;
+
+  pldap_structurerule               = ^ldap_structurerule;
+  ldap_structurerule                = record
+    sr_ruleid       : cint;          (* REQUIRED *)
+    sr_names        : ppcchar;        (* OPTIONAL *)
+    sr_desc         : pcchar;         (* OPTIONAL *)
+    sr_obsolete     : cint;          (* 0=no, 1=yes *)
+    sr_nameform     : pcchar;         (* REQUIRED *)
+    sr_nsup_ruleids : cint;          (* number of sr_sup_ruleids *)
+    sr_sup_ruleids  : pcint;         (* OPTIONAL *)
+    sr_extensions   : PPLDAPSchemaExtensionItem; (* OPTIONAL *)
+  end;
+
+  PLDAPStructureRule                = ^LDAPStructureRule;
+  LDAPStructureRule                 = ldap_structurerule;
+
+
+(*
+ * Misc macros
+ *)
+const
+  LDAP_SCHEMA_NO                    = 0;
+  LDAP_SCHEMA_YES                   = 1;
+
+  LDAP_SCHEMA_USER_APPLICATIONS     = 0;
+  LDAP_SCHEMA_DIRECTORY_OPERATION   = 1;
+  LDAP_SCHEMA_DISTRIBUTED_OPERATION = 2;
+  LDAP_SCHEMA_DSA_OPERATION         = 3;
+
+  LDAP_SCHEMA_ABSTRACT              = 0;
+  LDAP_SCHEMA_STRUCTURAL            = 1;
+  LDAP_SCHEMA_AUXILIARY             = 2;
+
+
+(*
+ * Flags that control how liberal the parsing routines are.
+ *)
+const
+  LDAP_SCHEMA_ALLOW_NONE            = $00;      (* Strict parsing               *)
+  LDAP_SCHEMA_ALLOW_NO_OID          = $01;      (* Allow missing oid            *)
+  LDAP_SCHEMA_ALLOW_QUOTED          = $02;      (* Allow bogus extra quotes     *)
+  LDAP_SCHEMA_ALLOW_DESCR           = $04;      (* Allow descr instead of OID   *)
+  LDAP_SCHEMA_ALLOW_DESCR_PREFIX    = $08;      (* Allow descr as OID prefix    *)
+  LDAP_SCHEMA_ALLOW_OID_MACRO       = $10;      (* Allow OID macros in slapd    *)
+  LDAP_SCHEMA_ALLOW_OUT_OF_ORDER_FIELDS = $20;  (* Allow fields in most any order *)
+  LDAP_SCHEMA_ALLOW_ALL             = $3f;      (* Be very liberal in parsing   *)
+  LDAP_SCHEMA_SKIP                  = $80;      (* Don't malloc any result      *)
+
+
+function ldap_syntax2name(syn: PLDAPSyntax): pcchar; cdecl; external;
+function ldap_matchingrule2name(mr: PLDAPMatchingRule): pcchar; cdecl; external;
+function ldap_matchingruleuse2name(mru: PLDAPMatchingRuleUse): pcchar; cdecl; external;
+function ldap_attributetype2name(_at: PLDAPAttributeType): pcchar; cdecl; external;
+function ldap_objectclass2name(oc: PLDAPObjectClass): pcchar; cdecl; external;
+function ldap_contentrule2name(cr: PLDAPContentRule): pcchar; cdecl; external;
+function ldap_nameform2name(nf: PLDAPNameForm): pcchar; cdecl; external;
+function ldap_structurerule2name(sr: PLDAPStructureRule): pcchar; cdecl; external;
+
+procedure ldap_syntax_free(syn: PLDAPSyntax); cdecl; external;
+procedure ldap_matchingrule_free(mr: PLDAPMatchingRule); cdecl; external;
+procedure ldap_matchingruleuse_free(mru: PLDAPMatchingRuleUse); cdecl; external;
+procedure ldap_attributetype_free(_at: PLDAPAttributeType); cdecl; external;
+procedure ldap_objectclass_free(oc: PLDAPObjectClass); cdecl; external;
+procedure ldap_contentrule_free(cr: PLDAPContentRule); cdecl; external;
+procedure ldap_nameform_free(nf: PLDAPNameForm); cdecl; external;
+procedure ldap_structurerule_free(sr: PLDAPStructureRule); cdecl; external;
+
+function ldap_str2structurerule(const s: pcchar; code: pcint; const errp: ppcchar; flags: cuint): PLDAPStructureRule; cdecl; external;
+function ldap_str2nameform(const s: pcchar; code: pcint; const errp: ppcchar; flags: cuint): PLDAPNameForm; cdecl; external;
+function ldap_str2contentrule(const s: pcchar; code: pcint; const errp: ppcchar; flags: cuint): PLDAPContentRule; cdecl; external;
+function ldap_str2objectclass(const s: pcchar; code: pcint; const errp: ppcchar; flags: cuint): PLDAPObjectClass; cdecl; external;
+function ldap_str2attributetype(const s: pcchar; code: pcint; const errp: ppcchar; flags: cuint): PLDAPAttributeType; cdecl; external;
+function ldap_str2syntax(const s: pcchar; code: pcint; const errp: ppcchar; flags: cuint): PLDAPSyntax; cdecl; external;
+function ldap_str2matchingrule(const s: pcchar; code: pcint; const errp: ppcchar; flags: cuint): PLDAPMatchingRule; cdecl; external;
+function ldap_str2matchingruleuse(const s: pcchar; code: pcint; const errp: ppcchar; flags: cuint): PLDAPMatchingRuleUse; cdecl; external;
+
+function ldap_structurerule2str(sr: PLDAPStructureRule): pcchar; cdecl; external;
+function ldap_structurerule2bv(sr: PLDAPStructureRule; bv: PBerval): PBerval; cdecl; external;
+
+function ldap_nameform2str(nf: PLDAPNameForm): pcchar; cdecl; external;
+function ldap_nameform2bv(nf: PLDAPNameForm; bv: PBerval): PBerval; cdecl; external;
+
+function ldap_contentrule2str(cr: PLDAPContentRule): pcchar; cdecl; external;
+function ldap_contentrule2bv(cr: PLDAPContentRule; bv: PBerval): PBerval; cdecl; external;
+
+function ldap_objectclass2str(oc: PLDAPObjectClass): pcchar; cdecl; external;
+function ldap_objectclass2bv(oc: PLDAPObjectClass; bv: PBerval): PBerval; cdecl; external;
+
+function ldap_attributetype2str(_at: PLDAPAttributeType): pcchar; cdecl; external;
+function ldap_attributetype2bv(_at: PLDAPAttributeType; bv: PBerval): PBerval; cdecl; external;
+
+function ldap_syntax2str(syn: PLDAPSyntax): pcchar; cdecl; external;
+function ldap_syntax2bv(syn: PLDAPSyntax; bv: PBerval): PBerval; cdecl; external;
+
+function ldap_matchingrule2str(mr: PLDAPMatchingRule): pcchar; cdecl; external;
+function ldap_matchingrule2bv(mr: PLDAPMatchingRule; bv: PBerval): PBerval; cdecl; external;
+
+function ldap_matchingruleuse2str(mru: PLDAPMatchingRuleUse): pcchar; cdecl; external;
+function ldap_matchingruleuse2bv(mru: PLDAPMatchingRuleUse; bv: PBerval): PBerval; cdecl; external;
+
+function ldap_scherr2str(code: cint): pcchar; cdecl; external;

+ 1805 - 0
packages/ldap/src/ldaph.inc

@@ -0,0 +1,1805 @@
+(* $OpenLDAP: pkg/ldap/include/ldap.h,v 1.168.2.16 2003/03/05 23:48:31 kurt Exp $ *)
+(*
+ * Copyright 1998-2003 The OpenLDAP Foundation, Redwood City, California, USA
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.  A copy of this license is available at
+ * http://www.OpenLDAP.org/license.html or in file LICENSE in the
+ * top-level directory of the distribution.
+ *)
+(* Portions
+ * Copyright (c) 1990 Regents of the University of Michigan.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that this notice is preserved and that due credit is given
+ * to the University of Michigan at Ann Arbor. The name of the University
+ * may not be used to endorse or promote products derived from this
+ * software without specific prior written permission. This software
+ * is provided ``as is'' without express or implied warranty.
+ *)
+
+const
+  LDAP_VERSION1                     = 1;
+  LDAP_VERSION2                     = 2;
+  LDAP_VERSION3                     = 3;
+
+  LDAP_VERSION_MIN                  = LDAP_VERSION2;
+  LDAP_VERSION                      = LDAP_VERSION2;
+  LDAP_VERSION_MAX                  = LDAP_VERSION3;
+
+(*
+ * We'll use 2000+draft revision for our API version number
+ * As such, the number will be above the old RFC but below
+ * whatever number does finally get assigned
+ *)
+const
+  LDAP_API_VERSION                  = 3001;
+  LDAP_VENDOR_NAME                  = 'OpenLDAP';
+
+(* OpenLDAP API Features *)
+  LDAP_API_FEATURE_X_OPENLDAP       = LDAP_VENDOR_VERSION;
+
+{$IF defined(LDAP_API_FEATURE_X_OPENLDAP_REENTRANT) or (defined(LDAP_THREAD_SAFE) and defined(LDAP_API_FEATURE_X_OPENLDAP_THREAD_SAFE))}
+    (* -lldap may or may not be thread safe *)
+    (* -lldap_r, if available, is always thread safe *)
+  {$DEFINE LDAP_API_FEATURE_THREAD_SAFE}
+{$IFEND}
+{$IF defined(LDAP_THREAD_SAFE) and defined(LDAP_API_FEATURE_X_OPENLDAP_THREAD_SAFE)}
+  //{$DEFINE LDAP_API_FEATURE_SESSION_SAFE}
+  //{$DEFINE LDAP_API_OPERATION_SESSION_SAFE}
+{$IFEND}
+
+  LDAP_PORT                         = 389;     (* ldap:///     default LDAP port *)
+  LDAPS_PORT                        = 636;     (* ldaps:///    default LDAP over TLS port *)
+
+  LDAP_ROOT_DSE                     = '';
+  LDAP_NO_ATTRS                     = '1.1';
+  LDAP_ALL_USER_ATTRIBUTES          = '*';
+  LDAP_ALL_OPERATIONAL_ATTRIBUTES   = '+'; (* OpenLDAP extension *)
+
+  LDAP_MAXINT                       = 2147483647;
+
+(*
+ * LDAP_OPTions defined by draft-ldapext-ldap-c-api-02
+ * 0x0000 - 0x0fff reserved for api options
+ * 0x1000 - 0x3fff reserved for api extended options
+ * 0x4000 - 0x7fff reserved for private and experimental options
+ *)
+  LDAP_OPT_API_INFO                 = $0000;
+  LDAP_OPT_DESC                     = $0001; (* deprecated *)
+  LDAP_OPT_DEREF                    = $0002;
+  LDAP_OPT_SIZELIMIT                = $0003;
+  LDAP_OPT_TIMELIMIT                = $0004;
+(* $05 - $07 not defined by current draft *)
+  LDAP_OPT_REFERRALS                = $0008;
+  LDAP_OPT_RESTART                  = $0009;
+(* $0a - $10 not defined by current draft *)
+  LDAP_OPT_PROTOCOL_VERSION         = $0011;
+  LDAP_OPT_SERVER_CONTROLS          = $0012;
+  LDAP_OPT_CLIENT_CONTROLS          = $0013;
+(* $14 not defined by current draft *)
+  LDAP_OPT_API_FEATURE_INFO         = $0015;
+
+(* $16 - $2f not defined by current draft *)
+  LDAP_OPT_HOST_NAME                = $0030;
+  LDAP_OPT_RESULT_CODE              = $0031;
+  LDAP_OPT_ERROR_NUMBER             = LDAP_OPT_RESULT_CODE;
+  LDAP_OPT_ERROR_STRING             = $0032;
+  LDAP_OPT_MATCHED_DN               = $0033;
+
+(* $34 - $0fff not defined by current draft *)
+
+(* private and experimental options *)
+(* OpenLDAP specific options *)
+  LDAP_OPT_DEBUG_LEVEL              = $5001;  (* debug level *)
+  LDAP_OPT_TIMEOUT                  = $5002;  (* default timeout *)
+  LDAP_OPT_REFHOPLIMIT              = $5003;  (* ref hop limit *)
+  LDAP_OPT_NETWORK_TIMEOUT          = $5005;  (* socket level timeout *)
+  LDAP_OPT_URI                      = $5006;
+  LDAP_OPT_REFERRAL_URLS            = $5007;  (* Referral URLs *)
+
+(* OpenLDAP TLS options *)
+  LDAP_OPT_X_TLS                    = $6000;
+  LDAP_OPT_X_TLS_CTX                = $6001;  (* SSL CTX *)
+  LDAP_OPT_X_TLS_CACERTFILE         = $6002;
+  LDAP_OPT_X_TLS_CACERTDIR          = $6003;
+  LDAP_OPT_X_TLS_CERTFILE           = $6004;
+  LDAP_OPT_X_TLS_KEYFILE            = $6005;
+  LDAP_OPT_X_TLS_REQUIRE_CERT       = $6006;
+(*   LDAP_OPT_X_TLS_PROTOCOL        = $6007; *)
+  LDAP_OPT_X_TLS_CIPHER_SUITE       = $6008;
+  LDAP_OPT_X_TLS_RANDOM_FILE        = $6009;
+  LDAP_OPT_X_TLS_SSL_CTX            = $600a;
+  LDAP_OPT_X_TLS_CRLCHECK           = $600b;
+  LDAP_OPT_X_TLS_CONNECT_CB         = $6600c;
+  LDAP_OPT_X_TLS_CONNECT_ARG        = $6600d;
+  LDAP_OPT_X_TLS_DHFILE             = $6600e;
+
+  LDAP_OPT_X_TLS_NEVER              = 0;
+  LDAP_OPT_X_TLS_HARD               = 1;
+  LDAP_OPT_X_TLS_DEMAND             = 2;
+  LDAP_OPT_X_TLS_ALLOW              = 3;
+  LDAP_OPT_X_TLS_TRY                = 4;
+
+(* OpenLDAP SASL options *)
+  LDAP_OPT_X_SASL_MECH              = $6100;
+  LDAP_OPT_X_SASL_REALM             = $6101;
+  LDAP_OPT_X_SASL_AUTHCID           = $6102;
+  LDAP_OPT_X_SASL_AUTHZID           = $6103;
+  LDAP_OPT_X_SASL_SSF               = $6104; (* read-only *)
+  LDAP_OPT_X_SASL_SSF_EXTERNAL      = $6105; (* write-only *)
+  LDAP_OPT_X_SASL_SECPROPS          = $6106; (* write-only *)
+  LDAP_OPT_X_SASL_SSF_MIN           = $6107;
+  LDAP_OPT_X_SASL_SSF_MAX           = $6108;
+  LDAP_OPT_X_SASL_MAXBUFSIZE        = $6109;
+
+(* Private API Extensions -- reserved for application use *)
+  LDAP_OPT_PRIVATE_EXTENSION_BASE   = $7000;  (* Private API inclusive *)
+
+(*
+ * ldap_get_option() and ldap_set_option() return values.
+ * As later versions may return other values indicating
+ * failure, current applications should only compare returned
+ * value against LDAP_OPT_SUCCESS.
+ *)
+  LDAP_OPT_SUCCESS                  =  0;
+  LDAP_OPT_ERROR                    = -1;
+
+(* on/off values *)
+  LDAP_OPT_OFF                      = Pointer(0);
+
+function LDAP_OPT_ON: Pointer;
+
+const
+  LDAP_API_INFO_VERSION             = 1;
+
+type
+  PLDAPAPIInfo                      = ^LDAPAPIInfo;
+  LDAPAPIInfo                       = record
+    ldapai_info_version     : cint;      (* version of LDAPAPIInfo (1) *)
+    ldapai_api_version      : cint;      (* revision of API supported *)
+    ldapai_protocol_version : cint;      (* highest LDAP version supported *)
+    ldapai_extensions       : ppcchar;   (* names of API extensions *)
+    ldapai_vendor_name      : pcchar;    (* name of supplier *)
+    ldapai_vendor_version   : cint;      (* supplier-specific version * 100 *)
+  end;
+
+const
+  LDAP_FEATURE_INFO_VERSION         = 1; (* version of api feature structure *)
+
+type
+  pldap_apifeature_info             = ^ldap_apifeature_info;
+  ldap_apifeature_info              = record
+    ldapaif_info_version    : cint;      (* version of this struct (1) *)
+    ldapaif_name            : pcchar;    (* matches LDAP_API_FEATURE_... less the prefix *)
+    ldapaif_version         : cint;      (* matches the value LDAP_API_FEATURE_... *)
+  end;
+
+  PLDAPAPIFeatureInfo               = ^LDAPAPIFeatureInfo;
+  LDAPAPIFeatureInfo                = ldap_apifeature_info;
+
+  PPPLDAPControl                    = ^PPLDAPControl;
+  PPLDAPControl                     = ^PLDAPControl;
+  PLDAPControl                      = ^LDAPControl;
+  LDAPControl                       = record
+    ldctl_oid               : pcchar;
+    ldctl_value             : berval;
+    ldctl_iscritical        : cchar;
+  end;
+
+const
+(* LDAP Controls *)
+(*  standard track controls *)
+  LDAP_CONTROL_MANAGEDSAIT          = '2.16.840.1.113730.3.4.2'; (* RFC 3296 *)
+  LDAP_CONTROL_SUBENTRIES           = '1.3.6.1.4.1.4203.1.10.1'; (* RFC 3672 *)
+  LDAP_CONTROL_PAGEDRESULTS         = '1.2.840.113556.1.4.319';  (* RFC 2696 *)
+
+  LDAP_CONTROL_VALUESRETURNFILTER   = '1.2.826.0.1.3344810.2.3'; (* RFC 3876 *)
+  LDAP_CONTROL_X_VALUESRETURNFILTER = '1.2.826.0.1.334810.2.3';  (* bad OID *)
+
+  LDAP_CONTROL_ASSERT               = '1.3.6.1.1.12';
+  LDAP_CONTROL_PRE_READ             = '1.3.6.1.1.13.1';
+  LDAP_CONTROL_POST_READ            = '1.3.6.1.1.13.2';
+
+(*  standard track - not implemented in slapd(8) *)
+  LDAP_CONTROL_SORTREQUEST          = '1.2.840.113556.1.4.473'; (* RFC 2891 *)
+  LDAP_CONTROL_SORTRESPONSE         = '1.2.840.113556.1.4.474'; (* RFC 2891 *)
+
+(* but not yet formalized controls *)
+  LDAP_CONTROL_PROXY_AUTHZ          = '2.16.840.1.113730.3.4.18';
+
+(* various works in progress *)
+  LDAP_CONTROL_NOOP                 = '1.3.6.1.4.1.4203.666.5.2';
+
+(* LDAP VLV *)(* not implemented in slapd(8) *)
+  LDAP_CONTROL_VLVREQUEST           = '2.16.840.1.113730.3.4.9';
+  LDAP_CONTROL_VLVRESPONSE          = '2.16.840.1.113730.3.4.10';
+
+(* LDAP Sync -- draft-zeilenga-ldup-sync *)(* submitted for publication *)
+  LDAP_SYNC_OID                     = '1.3.6.1.4.1.4203.1.9.1';
+  LDAP_CONTROL_SYNC                 = LDAP_SYNC_OID + '.1';
+  LDAP_CONTROL_SYNC_STATE           = LDAP_SYNC_OID + '.2';
+  LDAP_CONTROL_SYNC_DONE            = LDAP_SYNC_OID + '.3';
+  LDAP_SYNC_INFO                    = LDAP_SYNC_OID + '.4';
+
+  LDAP_SYNC_NONE                    = $00;
+  LDAP_SYNC_REFRESH_ONLY            = $01;
+  LDAP_SYNC_RESERVED                = $02;
+  LDAP_SYNC_REFRESH_AND_PERSIST     = $03;
+
+  LDAP_SYNC_REFRESH_PRESENTS        = 0;
+  LDAP_SYNC_REFRESH_DELETES         = 1;
+
+  LDAP_TAG_SYNC_NEW_COOKIE          = ber_tag_t($80);
+  LDAP_TAG_SYNC_REFRESH_DELETE      = ber_tag_t($a1);
+  LDAP_TAG_SYNC_REFRESH_PRESENT     = ber_tag_t($a2);
+  LDAP_TAG_SYNC_ID_SET              = ber_tag_t($a3);
+
+  LDAP_TAG_SYNC_COOKIE              = ber_tag_t($04);
+  LDAP_TAG_REFRESHDELETES           = ber_tag_t($01);
+  LDAP_TAG_REFRESHDONE              = ber_tag_t($01);
+  LDAP_TAG_RELOAD_HINT              = ber_tag_t($01);
+
+  LDAP_SYNC_PRESENT                 = 0;
+  LDAP_SYNC_ADD                     = 1;
+  LDAP_SYNC_MODIFY                  = 2;
+  LDAP_SYNC_DELETE                  = 3;
+
+(* MS ActiveDirectory controls (for compatibility) *)
+  LDAP_CONTROL_X_DOMAIN_SCOPE       = '1.2.840.113556.1.4.1339';
+  LDAP_CONTROL_X_PERMISSIVE_MODIFY  = '1.2.840.113556.1.4.1413';
+
+(* LDAP Unsolicited Notifications *)
+  LDAP_NOTICE_OF_DISCONNECTION      = '1.3.6.1.4.1.1466.20036'; (* RFC 2251 *)
+  LDAP_NOTICE_DISCONNECT            = LDAP_NOTICE_OF_DISCONNECTION;
+
+(* LDAP Extended Operations *)
+  LDAP_EXOP_START_TLS               = '1.3.6.1.4.1.1466.20037';    (* RFC 2830 *)
+
+  LDAP_EXOP_MODIFY_PASSWD           = '1.3.6.1.4.1.4203.1.11.1';   (* RFC 3062 *)
+  LDAP_TAG_EXOP_MODIFY_PASSWD_ID    = ber_tag_t($80);
+  LDAP_TAG_EXOP_MODIFY_PASSWD_OLD   = ber_tag_t($81);
+  LDAP_TAG_EXOP_MODIFY_PASSWD_NEW   = ber_tag_t($82);
+  LDAP_TAG_EXOP_MODIFY_PASSWD_GEN   = ber_tag_t($80);
+
+  LDAP_EXOP_X_WHO_AM_I              = '1.3.6.1.4.1.4203.1.11.3';
+  LDAP_EXOP_X_CANCEL                = '1.3.6.1.4.1.4203.666.6.3';
+
+(* LDAP Features *)
+  LDAP_FEATURE_ALL_OP_ATTRS         = '1.3.6.1.4.1.4203.1.5.1';    (* RFC 3673 *)
+  LDAP_FEATURE_OBJECTCLASS_ATTRS    = '1.3.6.1.4.1.4203.1.5.2'; (*  @objectClass - new number to be assigned *)
+  LDAP_FEATURE_ABSOLUTE_FILTERS     = '1.3.6.1.4.1.4203.1.5.3';  (* (&) (|) *)
+  LDAP_FEATURE_LANGUAGE_TAG_OPTIONS = '1.3.6.1.4.1.4203.1.5.4';
+  LDAP_FEATURE_LANGUAGE_RANGE_OPTIONS = '1.3.6.1.4.1.4203.1.5.5';
+  LDAP_FEATURE_MODIFY_INCREMENT     = '1.3.6.1.1.14';
+
+(*
+ * specific LDAP instantiations of BER types we know about
+ *)
+
+(* Overview of LBER tag construction
+ *
+ *  Bits
+ *  ______
+ *  8 7 | CLASS
+ *  0 0 = UNIVERSAL
+ *  0 1 = APPLICATION
+ *  1 0 = CONTEXT-SPECIFIC
+ *  1 1 = PRIVATE
+ *      _____
+ *      | 6 | DATA-TYPE
+ *        0 = PRIMITIVE
+ *        1 = CONSTRUCTED
+ *          ___________
+ *          | 5 ... 1 | TAG-NUMBER
+ *)
+
+(* general stuff *)
+  LDAP_TAG_MESSAGE                  = ber_tag_t($30); (* constructed + 16 *)
+  LDAP_TAG_MSGID                    = ber_tag_t($02); (* integer *)
+
+  LDAP_TAG_LDAPDN                   = ber_tag_t($04); (* octet string *)
+  LDAP_TAG_LDAPCRED                 = ber_tag_t($04); (* octet string *)
+
+  LDAP_TAG_CONTROLS                 = ber_tag_t($a0); (* context specific + constructed + 0 *)
+  LDAP_TAG_REFERRAL                 = ber_tag_t($a3); (* context specific + constructed + 3 *)
+
+  LDAP_TAG_NEWSUPERIOR              = ber_tag_t($80); (* context-specific + primitive + 0 *)
+
+  LDAP_TAG_EXOP_REQ_OID             = ber_tag_t($80); (* context specific + primitive *)
+  LDAP_TAG_EXOP_REQ_VALUE           = ber_tag_t($81); (* context specific + primitive *)
+  LDAP_TAG_EXOP_RES_OID             = ber_tag_t($8a); (* context specific + primitive *)
+  LDAP_TAG_EXOP_RES_VALUE           = ber_tag_t($8b); (* context specific + primitive *)
+
+  LDAP_TAG_IM_RES_OID               = ber_tag_t($80); (* context specific + primitive *)
+  LDAP_TAG_IM_RES_VALUE             = ber_tag_t($81); (* context specific + primitive *)
+
+  LDAP_TAG_SASL_RES_CREDS           = ber_tag_t($87); (* context specific + primitive *)
+
+
+(* possible operations a client can invoke *)
+  LDAP_REQ_BIND                     = ber_tag_t($60); (* application + constructed *)
+  LDAP_REQ_UNBIND                   = ber_tag_t($42); (* application + primitive   *)
+  LDAP_REQ_SEARCH                   = ber_tag_t($63); (* application + constructed *)
+  LDAP_REQ_MODIFY                   = ber_tag_t($66); (* application + constructed *)
+  LDAP_REQ_ADD                      = ber_tag_t($68); (* application + constructed *)
+  LDAP_REQ_DELETE                   = ber_tag_t($4a); (* application + primitive   *)
+  LDAP_REQ_MODDN                    = ber_tag_t($6c); (* application + constructed *)
+  LDAP_REQ_MODRDN                   = LDAP_REQ_MODDN;
+  LDAP_REQ_RENAME                   = LDAP_REQ_MODDN;
+  LDAP_REQ_COMPARE                  = ber_tag_t($6e); (* application + constructed *)
+  LDAP_REQ_ABANDON                  = ber_tag_t($50); (* application + primitive   *)
+  LDAP_REQ_EXTENDED                 = ber_tag_t($77); (* application + constructed *)
+
+(* possible result types a server can return *)
+  LDAP_RES_BIND                     = ber_tag_t($61); (* application + constructed *)
+  LDAP_RES_SEARCH_ENTRY             = ber_tag_t($64); (* application + constructed *)
+  LDAP_RES_SEARCH_REFERENCE         = ber_tag_t($73); (* V3: application + constructed *)
+  LDAP_RES_SEARCH_RESULT            = ber_tag_t($65); (* application + constructed *)
+  LDAP_RES_MODIFY                   = ber_tag_t($67); (* application + constructed *)
+  LDAP_RES_ADD                      = ber_tag_t($69); (* application + constructed *)
+  LDAP_RES_DELETE                   = ber_tag_t($6b); (* application + constructed *)
+  LDAP_RES_MODDN                    = ber_tag_t($6d); (* application + constructed *)
+  LDAP_RES_MODRDN                   = LDAP_RES_MODDN; (* application + constructed *)
+  LDAP_RES_RENAME                   = LDAP_RES_MODDN; (* application + constructed *)
+  LDAP_RES_COMPARE                  = ber_tag_t($6f); (* application + constructed *)
+  LDAP_RES_EXTENDED                 = ber_tag_t($78); (* V3: application + constructed *)
+  LDAP_RES_INTERMEDIATE             = ber_tag_t($79); (* V3+: application + constructed *)
+
+  LDAP_RES_ANY                      = -1;
+  LDAP_RES_UNSOLICITED              =  0;
+
+
+(* sasl methods *)
+  LDAP_SASL_SIMPLE                  = pcchar(0);
+  LDAP_SASL_NULL                    = '';
+
+
+(* authentication methods available *)
+  LDAP_AUTH_NONE                    = ber_tag_t($00); (* no authentication          *)
+  LDAP_AUTH_SIMPLE                  = ber_tag_t($80); (* context specific + primitive *)
+  LDAP_AUTH_SASL                    = ber_tag_t($a3); (* context specific + constructed *)
+  LDAP_AUTH_KRBV4                   = ber_tag_t($ff); (* means do both of the following *)
+  LDAP_AUTH_KRBV41                  = ber_tag_t($81); (* context specific + primitive *)
+  LDAP_AUTH_KRBV42                  = ber_tag_t($82); (* context specific + primitive *)
+
+
+(* filter types *)
+  LDAP_FILTER_AND                   = ber_tag_t($a0); (* context specific + constructed *)
+  LDAP_FILTER_OR                    = ber_tag_t($a1); (* context specific + constructed *)
+  LDAP_FILTER_NOT                   = ber_tag_t($a2); (* context specific + constructed *)
+  LDAP_FILTER_EQUALITY              = ber_tag_t($a3); (* context specific + constructed *)
+  LDAP_FILTER_SUBSTRINGS            = ber_tag_t($a4); (* context specific + constructed *)
+  LDAP_FILTER_GE                    = ber_tag_t($a5); (* context specific + constructed *)
+  LDAP_FILTER_LE                    = ber_tag_t($a6); (* context specific + constructed *)
+  LDAP_FILTER_PRESENT               = ber_tag_t($87); (* context specific + primitive   *)
+  LDAP_FILTER_APPROX                = ber_tag_t($a8); (* context specific + constructed *)
+  LDAP_FILTER_EXT                   = ber_tag_t($a9); (* context specific + constructed *)
+
+(* extended filter component types *)
+  LDAP_FILTER_EXT_OID               = ber_tag_t($81); (* context specific *)
+  LDAP_FILTER_EXT_TYPE              = ber_tag_t($82); (* context specific *)
+  LDAP_FILTER_EXT_VALUE             = ber_tag_t($83); (* context specific *)
+  LDAP_FILTER_EXT_DNATTRS           = ber_tag_t($84); (* context specific *)
+
+(* substring filter component types *)
+  LDAP_SUBSTRING_INITIAL            = ber_tag_t($80); (* context specific *)
+  LDAP_SUBSTRING_ANY                = ber_tag_t($81); (* context specific *)
+  LDAP_SUBSTRING_FINAL              = ber_tag_t($82); (* context specific *)
+
+(* search scopes *)
+  LDAP_SCOPE_DEFAULT                = ber_int_t(-1);     (* OpenLDAP extension *)
+  LDAP_SCOPE_BASE                   = ber_int_t($0000);
+  LDAP_SCOPE_BASEOBJECT             = LDAP_SCOPE_BASE;
+  LDAP_SCOPE_ONELEVEL               = ber_int_t($0001);
+  LDAP_SCOPE_ONE                    = LDAP_SCOPE_ONELEVEL;
+  LDAP_SCOPE_SUBTREE                = ber_int_t($0002);
+  LDAP_SCOPE_SUB                    = LDAP_SCOPE_SUBTREE;
+
+
+(*
+ * possible error codes we can return
+ *)
+
+function LDAP_RANGE(n, x, y: ber_int_t): Boolean;
+
+const
+  LDAP_SUCCESS                      = $00;
+  LDAP_OPERATIONS_ERROR             = $01;
+  LDAP_PROTOCOL_ERROR               = $02;
+  LDAP_TIMELIMIT_EXCEEDED           = $03;
+  LDAP_SIZELIMIT_EXCEEDED           = $04;
+  LDAP_COMPARE_FALSE                = $05;
+  LDAP_COMPARE_TRUE                 = $06;
+  LDAP_AUTH_METHOD_NOT_SUPPORTED    = $07;
+  LDAP_STRONG_AUTH_NOT_SUPPORTED    = LDAP_AUTH_METHOD_NOT_SUPPORTED;
+  LDAP_STRONG_AUTH_REQUIRED         = $08;
+  LDAP_PARTIAL_RESULTS              = $09;   (* LDAPv2+ (not LDAPv3) *)
+
+  LDAP_REFERRAL                     = $0a; (* LDAPv3 *)
+  LDAP_ADMINLIMIT_EXCEEDED          = $0b; (* LDAPv3 *)
+  LDAP_UNAVAILABLE_CRITICAL_EXTENSION = $0c; (* LDAPv3 *)
+  LDAP_CONFIDENTIALITY_REQUIRED     = $0d; (* LDAPv3 *)
+  LDAP_SASL_BIND_IN_PROGRESS        = $0e; (* LDAPv3 *)
+
+function LDAP_ATTR_ERROR(n: ber_int_t): Boolean;
+
+const
+  LDAP_NO_SUCH_ATTRIBUTE            = $10;
+  LDAP_UNDEFINED_TYPE               = $11;
+  LDAP_INAPPROPRIATE_MATCHING       = $12;
+  LDAP_CONSTRAINT_VIOLATION         = $13;
+  LDAP_TYPE_OR_VALUE_EXISTS         = $14;
+  LDAP_INVALID_SYNTAX               = $15;
+
+function LDAP_NAME_ERROR(n: ber_int_t): Boolean;
+
+const
+  LDAP_NO_SUCH_OBJECT               = $20;
+  LDAP_ALIAS_PROBLEM                = $21;
+  LDAP_INVALID_DN_SYNTAX            = $22;
+  LDAP_IS_LEAF                      = $23; (* not LDAPv3 *)
+  LDAP_ALIAS_DEREF_PROBLEM          = $24;
+
+function LDAP_SECURITY_ERROR(n: ber_int_t): Boolean;
+
+const
+  LDAP_PROXY_AUTHZ_FAILURE          = $2F; (* LDAPv3 proxy authorization *)
+  LDAP_INAPPROPRIATE_AUTH           = $30;
+  LDAP_INVALID_CREDENTIALS          = $31;
+  LDAP_INSUFFICIENT_ACCESS          = $32;
+
+function LDAP_SERVICE_ERROR(n: ber_int_t): Boolean;
+
+const
+  LDAP_BUSY                         = $33;
+  LDAP_UNAVAILABLE                  = $34;
+  LDAP_UNWILLING_TO_PERFORM         = $35;
+  LDAP_LOOP_DETECT                  = $36;
+
+function LDAP_UPDATE_ERROR(n: ber_int_t): Boolean;
+
+const
+  LDAP_NAMING_VIOLATION             = $40;
+  LDAP_OBJECT_CLASS_VIOLATION       = $41;
+  LDAP_NOT_ALLOWED_ON_NONLEAF       = $42;
+  LDAP_NOT_ALLOWED_ON_RDN           = $43;
+  LDAP_ALREADY_EXISTS               = $44;
+  LDAP_NO_OBJECT_CLASS_MODS         = $45;
+  LDAP_RESULTS_TOO_LARGE            = $46; (* CLDAP *)
+  LDAP_AFFECTS_MULTIPLE_DSAS        = $47; (* LDAPv3 *)
+
+  LDAP_OTHER                        = $50;
+
+(* for the LDAP Sync operation *)
+  LDAP_SYNC_REFRESH_REQUIRED        = $4100;
+
+(* for the LDAP No-Op control *)
+  LDAP_NO_OPERATION                 = $410e;
+
+(* for the Assertion control *)
+  LDAP_ASSERTION_FAILED             = $410f;
+
+(* for the Cancel operation *)
+  LDAP_CANCELLED                    = $4110;
+  LDAP_NO_SUCH_OPERATION            = $4111;
+  LDAP_TOO_LATE                     = $4112;
+  LDAP_CANNOT_CANCEL                = $4113;
+
+(* API Error Codes
+ *
+ * Based on draft-ietf-ldap-c-api-xx
+ * but with new negative code values
+ *)
+
+function LDAP_API_ERROR(n: ber_int_t): Boolean;
+function LDAP_API_RESULT(n: ber_int_t): Boolean;
+
+const
+  LDAP_SERVER_DOWN                  = -1;
+  LDAP_LOCAL_ERROR                  = -2;
+  LDAP_ENCODING_ERROR               = -3;
+  LDAP_DECODING_ERROR               = -4;
+  LDAP_TIMEOUT                      = -5;
+  LDAP_AUTH_UNKNOWN                 = -6;
+  LDAP_FILTER_ERROR                 = -7;
+  LDAP_USER_CANCELLED               = -8;
+  LDAP_PARAM_ERROR                  = -9;
+  LDAP_NO_MEMORY                    = -10;
+  LDAP_CONNECT_ERROR                = -11;
+  LDAP_NOT_SUPPORTED                = -12;
+  LDAP_CONTROL_NOT_FOUND            = -13;
+  LDAP_NO_RESULTS_RETURNED          = -14;
+  LDAP_MORE_RESULTS_TO_RETURN       = -15;
+  LDAP_CLIENT_LOOP                  = -16;
+  LDAP_REFERRAL_LIMIT_EXCEEDED      = -17;
+
+
+(*
+ * This structure represents both ldap messages and ldap responses.
+ * These are really the same, except in the case of search responses,
+ * where a response has multiple messages.
+ *)
+
+type
+//typedef struct ldapmsg LDAPMessage;
+  pldapmsg                          = Pointer;
+
+  PPLDAPMessage                     = ^PLDAPMessage;
+  PLDAPMessage                      = pldapmsg;
+
+
+(* for modifications *)
+const
+  LDAP_MOD_OP                       = $0007;
+  LDAP_MOD_ADD                      = $0000;
+  LDAP_MOD_DELETE                   = $0001;
+  LDAP_MOD_REPLACE                  = $0002;
+  LDAP_MOD_INCREMENT                = $0003; (* OpenLDAP extension *)
+  LDAP_MOD_BVALUES                  = $0080;
+
+type
+  PPPLDAPMod                        = ^PPLDAPMod;
+  PPLDAPMod                         = ^PLDAPMod;
+  PLDAPMod                          = ^LDAPMod;
+  LDAPMod                           = record
+    mod_op      : cint;
+
+(* IMPORTANT: do not use code 0x1000 (or above),
+ * it is used internally by the backends!
+ * (see ldap/servers/slapd/slap.h)
+ *)
+
+    mod_type    : pcchar;
+
+    case cint of
+      0: (mod_vals    : record
+           case cint of
+             0: (modv_strvals  : ppcchar);
+             1: (modv_bvals    : PPBerval);
+         end);
+      1: (case cint of
+           0: (mod_values      : ppcchar);
+           1: (mod_bvalues     : PPBerval));
+  end;
+
+
+(*
+ * structure representing an ldap session which can
+ * encompass connections to multiple servers (in the
+ * face of referrals).
+ *)
+  PLDAP                             = Pointer;
+
+const
+  LDAP_DEREF_NEVER                  = $00;
+  LDAP_DEREF_SEARCHING              = $01;
+  LDAP_DEREF_FINDING                = $02;
+  LDAP_DEREF_ALWAYS                 = $03;
+
+  LDAP_NO_LIMIT                     = 0;
+
+(* how many messages to retrieve results for *)
+  LDAP_MSG_ONE                      = $00;
+  LDAP_MSG_ALL                      = $01;
+  LDAP_MSG_RECEIVED                 = $02;
+
+(*
+ * types for ldap URL handling
+ *)
+
+type
+  pldap_url_desc                    = ^ldap_url_desc;
+  ldap_url_desc                     = record
+    lud_next        : pldap_url_desc;
+    lud_scheme      : pcchar;
+    lud_host        : pcchar;
+    lud_port        : cint;
+    lud_dn          : pcchar;
+    lud_attrs       : ppcchar;
+    lud_scope       : cint;
+    lud_filter      : pcchar;
+    lud_exts        : pcchar;
+    lud_crit_exts   : cint;
+  end;
+
+  PLDAPURLDesc                      = ^LDAPURLDesc;
+  LDAPURLDesc                       = ldap_url_desc;
+
+const
+  LDAP_URL_SUCCESS                  = $00;    (* Success *)
+  LDAP_URL_ERR_MEM                  = $01;    (* can't allocate memory space *)
+  LDAP_URL_ERR_PARAM                = $02;    (* parameter is bad *)
+
+  LDAP_URL_ERR_BADSCHEME            = $03;    (* URL doesn't begin with "ldap[si]://" *)
+  LDAP_URL_ERR_BADENCLOSURE         = $04;    (* URL is missing trailing ">" *)
+  LDAP_URL_ERR_BADURL               = $05;    (* URL is bad *)
+  LDAP_URL_ERR_BADHOST              = $06;    (* host port is bad *)
+  LDAP_URL_ERR_BADATTRS             = $07;    (* bad (or missing) attributes *)
+  LDAP_URL_ERR_BADSCOPE             = $08;    (* scope string is invalid (or missing) *)
+  LDAP_URL_ERR_BADFILTER            = $09;    (* bad or missing filter *)
+  LDAP_URL_ERR_BADEXTS              = $0a;    (* bad or missing extensions *)
+
+(*
+ * The API draft spec says we should declare (or cause to be declared)
+ * 'struct timeval'.   We don't.  See IETF LDAPext discussions.
+ *)
+type
+  ptimeval                          = Pointer;
+
+(*
+ * in options.c:
+ *)
+function ldap_get_option(
+    ld              : PLDAP;
+    option          : cint;
+    outvalue        : Pointer
+  ): cint; cdecl; external;
+
+function ldap_set_option(
+    ld              : PLDAP;
+    option          : cint;
+    const invalue   : Pointer
+  ): cint; cdecl; external;
+
+(* V3 REBIND Function Callback Prototype *)
+type
+  LDAP_REBIND_PROC = function(ld: PLDAP; const url: pcchar; request: ber_tag_t; msgid: ber_int_t; params: Pointer): cint; cdecl;
+
+function ldap_set_rebind_proc(
+    ld              : PLDAP;
+    rebind_proc     : LDAP_REBIND_PROC;
+    params          : Pointer
+  ): cint; cdecl; external;
+
+(* V3 referral selection Function Callback Prototype *)
+type
+  LDAP_NEXTREF_PROC = function(ld: PLDAP; refsp: pppcchar; cntp: pcint; params: Pointer): cint; cdecl;
+
+
+function ldap_set_nextref_proc(
+    ld              : PLDAP;
+    nextref_proc    : LDAP_NEXTREF_PROC;
+    params          : Pointer
+  ): cint; cdecl; external;
+
+
+(*
+ * in controls.c:
+ *)
+
+function ldap_create_control(
+    const requestOID: pcchar;
+    ber             : PBerElement;
+    iscritical      : cint;
+    var ctrlp       : PLDAPControl
+  ): cint; cdecl; external;
+
+function ldap_find_control(
+    const oid       : pcchar;
+    ctrls           : PPLDAPControl
+  ): PLDAPControl; cdecl; external;
+
+procedure ldap_control_free(
+    ctrl            : PLDAPControl
+  ); cdecl; external;
+
+procedure ldap_controls_free(
+    ctrls           : PPLDAPControl
+  ); cdecl; external;
+
+
+(*
+ * in dnssrv.c:
+ *)
+
+function ldap_domain2dn(
+    const domain    : pcchar;
+    var dn          : pcchar
+  ): cint; cdecl; external;
+
+function ldap_dn2domain(
+    const dn        : pcchar;
+    var domain      : pcchar
+  ): cint; cdecl; external;
+
+function ldap_domain2hostlist(
+    const domain    : pcchar;
+    var hostlist    : pcchar
+  ): cint; cdecl; external;
+
+
+(*
+ * in extended.c:
+ *)
+
+function ldap_extended_operation(
+    ld              : PLDAP;
+    const reqoid    : pcchar;
+    reqdata         : PBerval;
+    serverctrls     : PPLDAPControl;
+    clientctrls     : PPLDAPControl;
+    var msgidp      : cint
+  ): cint; cdecl; external;
+
+function ldap_extended_operation_s(
+    ld              : PLDAP;
+    const reqoid    : pcchar;
+    reqdata         : PBerval;
+    serverctrls     : PPLDAPControl;
+    clientctrls     : PPLDAPControl;
+    var retoidp     : pcchar;
+    var retdatap    : PBerval
+  ): cint; cdecl; external;
+
+function ldap_parse_extended_result(
+    ld              : PLDAP;
+    res             : PLDAPMessage;
+    var retoidp     : pcchar;
+    var retdatap    : PBerval;
+    freeit          : cbool
+  ): cint; cdecl; external;
+
+function ldap_parse_intermediate(
+    ld              : PLDAP;
+    res             : PLDAPMessage;
+    var retoidp     : pcchar;
+    var retdatap    : PBerval;
+    serverctrls     : PPPLDAPControl;
+    freeit          : cbool
+  ): cint; cdecl; external;
+
+
+(*
+ * in groupings.c:
+ *)
+(*#ifdef LDAP_EXOP_GROUPING_CREATE
+
+LDAP_F( int )
+ldap_grouping_create LDAP_P((
+    LDAP            *ld,
+    LDAP_CONST cchar *grpoid,
+    struct berval   *grpdata,
+    LDAPControl     **serverctrls,
+    LDAPControl     **clientctrls,
+    int             *msgidp ));
+
+LDAP_F( int )
+ldap_grouping_create_s LDAP_P((
+    LDAP            *ld,
+    LDAP_CONST cchar *grpoid,
+    struct berval   *grpdata,
+    LDAPControl     **serverctrls,
+    LDAPControl     **clientctrls,
+    struct berval   **retgrpcookiep,
+    struct berval   **retgrpdatap ));
+
+LDAP_F( int )
+ldap_parse_grouping_create_result LDAP_P((
+    LDAP            *ld,
+    LDAPMessage     *res,
+    struct berval   **retgrpcookiep,
+    struct berval   **retgrpdatap,
+    LDAPControl     ***serverctrls,
+    int             freeit ));
+
+LDAP_F( int )
+ldap_grouping_end LDAP_P((
+    LDAP            *ld,
+    LDAP_CONST cchar *grpoid,
+    struct berval   *grpdata,
+    LDAPControl     **serverctrls,
+    LDAPControl     **clientctrls,
+    int             *msgidp ));
+
+LDAP_F( int )
+ldap_grouping_end_s LDAP_P((
+    LDAP            *ld,
+    LDAP_CONST cchar *grpoid,
+    struct berval   *grpdata,
+    LDAPControl     **serverctrls,
+    LDAPControl     **clientctrls,
+    struct berval   **retgrpdatap ));
+
+LDAP_F( int )
+ldap_parse_grouping_end_result LDAP_P((
+    LDAP            *ld,
+    LDAPMessage     *res,
+    struct berval   **retgrpdatap,
+    LDAPControl     ***serverctrls,
+    int             freeit ));
+
+LDAP_F( int )
+ldap_grouping_action_operation LDAP_P((
+    LDAP            *ld,
+    LDAP_CONST cchar *grpoid,
+    struct berval   *grpdata,
+    LDAPControl     **serverctrls,
+    LDAPControl     **clientctrls,
+    int             *msgidp ));
+
+LDAP_F( int )
+ldap_grouping_action_operation_s LDAP_P((
+    LDAP            *ld,
+    LDAP_CONST cchar *grpoid,
+    struct berval   *grpdata,
+    LDAPControl     **serverctrls,
+    LDAPControl     **clientctrls,
+    struct berval   **retgrpcookiep,
+    struct berval   **retgrpdatap ));
+
+LDAP_F( int )
+ldap_parse_grouping_action_result LDAP_P((
+    LDAP            *ld,
+    LDAPMessage     *res,
+    struct berval   **retgrpcookiep,
+    struct berval   **retgrpdatap,
+    LDAPControl     ***serverctrls,
+    int             freeit ));
+
+LDAP_F( int )
+ldap_parse_grouping_end_notice LDAP_P((
+    LDAP            *ld,
+    LDAPMessage     *res,
+    struct berval   **retdatap,
+    struct berval   **retgrpcookiep,
+    struct berval   **retgrpdatap,
+    int             freeit ));
+
+LDAP_F( int )
+ldap_parse_grouping_info_notice LDAP_P((
+    LDAP            *ld,
+    LDAPMessage     *res,
+    struct berval   **retdatap,
+    struct berval   **retgrpcookiep,
+    struct berval   **retgrpdatap,
+    int             freeit ));
+#endif
+*)
+
+
+(*
+ * in abandon.c:
+ *)
+
+function ldap_abandon_ext(
+    ld              : PLDAP;
+    msgid           : cint;
+    serverctrls     : PPLDAPControl;
+    clientctrls     : PPLDAPControl
+  ): cint; cdecl; external;
+
+
+(*
+ * in add.c:
+ *)
+
+function ldap_add_ext(
+    ld              : PLDAP;
+    const dn        : pcchar;
+    attrs           : PPLDAPMod;
+    serverctrls     : PPLDAPControl;
+    clientctrls     : PPLDAPControl;
+    var msgidp      : cint
+  ): cint; cdecl; external;
+
+function ldap_add_ext_s(
+    ld              : PLDAP;
+    const dn        : pcchar;
+    attrs           : PPLDAPMod;
+    serverctrls     : PPLDAPControl;
+    clientctrls     : PPLDAPControl
+  ): cint; cdecl; external;
+
+
+(*
+ * in sasl.c:
+ *)
+
+function ldap_sasl_bind(
+    ld              : PLDAP;
+    const dn        : pcchar;
+    const mechanism : pcchar;
+    cred            : PBerval;
+    serverctrls     : PPLDAPControl;
+    clientctrls     : PPLDAPControl;
+    var msgidp      : cint
+  ): cint; cdecl; external;
+
+function ldap_sasl_bind_s(
+    ld              : PLDAP;
+    const dn        : pcchar;
+    const mechanism : pcchar;
+    cred            : PBerval;
+    serverctrls     : PPLDAPControl;
+    clientctrls     : PPLDAPControl;
+    servercredp     : PPBerval
+  ): cint; cdecl; external;
+
+(* Interaction flags (should be passed about in a control)
+ *  Automatic (default): use defaults, prompt otherwise
+ *  Interactive: prompt always
+ *  Quiet: never prompt
+ *)
+const
+  LDAP_SASL_AUTOMATIC               = 0;
+  LDAP_SASL_INTERACTIVE             = 1;
+  LDAP_SASL_QUIET                   = 2;
+
+(*
+ * V3 SASL Interaction Function Callback Prototype
+ *  when using Cyrus SASL, interact is pointer to sasl_interact_t
+ *  should likely passed in a control (and provided controls)
+ *)
+type
+  LDAP_SASL_INTERACT_PROC = function(ld: PLDAP; flags: cuint; defaults, interact: Pointer): cint; cdecl;
+
+function ldap_sasl_interactive_bind_s(
+    ld              : PLDAP;
+    const dn        : pcchar;
+    const mechanism : pcchar;
+    serverctrls     : PPLDAPControl;
+    clientctrls     : PPLDAPControl;
+    flags           : cuint;
+    proc            : LDAP_SASL_INTERACT_PROC;
+    defaults        : Pointer
+  ): cint; cdecl; external;
+
+function ldap_parse_sasl_bind_result(
+    ld              : PLDAP;
+    res             : PLDAPMessage;
+    var servercredp : PBerval;
+    freeit          : cbool
+  ): cint; cdecl; external;
+
+
+(*
+ * in compare.c:
+ *)
+
+function ldap_compare_ext(
+    ld              : PLDAP;
+    const dn        : pcchar;
+    const attr      : pcchar;
+    bvalue          : PBerval;
+    serverctrls     : PPLDAPControl;
+    clientctrls     : PPLDAPControl;
+    var msgidp      : cint
+  ): cint; cdecl; external;
+
+function ldap_compare_ext_s(
+    ld              : PLDAP;
+    const dn        : pcchar;
+    const attr      : pcchar;
+    bvalue          : PBerval;
+    serverctrls     : PPLDAPControl;
+    clientctrls     : PPLDAPControl
+  ): cint; cdecl; external;
+
+
+(*
+ * in delete.c:
+ *)
+
+function ldap_delete_ext(
+    ld              : PLDAP;
+    const dn        : pcchar;
+    serverctrls     : PPLDAPControl;
+    clientctrls     : PPLDAPControl;
+    var msgidp      : cint
+  ): cint; cdecl; external;
+
+function ldap_delete_ext_s(
+    ld              : PLDAP;
+    const dn        : pcchar;
+    serverctrls     : PPLDAPControl;
+    clientctrls     : PPLDAPControl
+  ): cint; cdecl; external;
+
+
+(*
+ * in error.c:
+ *)
+
+function ldap_parse_result(
+    ld              : PLDAP;
+    res             : PLDAPMessage;
+    errcodep        : pcint;
+    matcheddnp      : ppcchar;
+    errmsgp         : ppcchar;
+    referralsp      : pppcchar;
+    serverctrls     : PPPLDAPControl;
+    freeit          : cbool
+  ): cint; cdecl; external;
+
+function ldap_err2string(
+    err             : cint
+  ): pcchar; cdecl; external;
+
+
+(*
+ * in modify.c:
+ *)
+
+function ldap_modify_ext(
+    ld              : PLDAP;
+    const dn        : pcchar;
+    mods            : PPLDAPMod;
+    serverctrls     : PPLDAPControl;
+    clientctrls     : PPLDAPControl;
+    var msgidp      : cint
+  ): cint; cdecl; external;
+
+function ldap_modify_ext_s(
+    ld              : PLDAP;
+    const dn        : pcchar;
+    mods            : PPLDAPMod;
+    serverctrls     : PPLDAPControl;
+    clientctrls     : PPLDAPControl
+  ): cint; cdecl; external;
+
+
+(*
+ * in modrdn.c:
+ *)
+
+function ldap_rename(
+    ld              : PLDAP;
+    const dn        : pcchar;
+    const newrdn    : pcchar;
+    const newSuperior: pcchar;
+    deleteoldrdn    : cbool;
+    sctrls          : PPLDAPControl;
+    cctrls          : PPPLDAPControl;
+    var msgidp      : cint
+  ): cint; cdecl; external;
+
+function ldap_rename_s(
+    ld              : PLDAP;
+    const dn        : pcchar;
+    const newrdn    : pcchar;
+    const newSuperior: pcchar;
+    deleteoldrdn    : cbool;
+    sctrls          : PPLDAPControl;
+    cctrls          : PPLDAPControl
+  ): cint; cdecl; external;
+
+
+(*
+ * in open.c:
+ *)
+
+function ldap_create(
+    var ld          : PLDAP
+  ): cint; cdecl; external;
+
+function ldap_initialize(
+    var ld          : PLDAP;
+    const url       : pcchar
+  ): cint; cdecl; external;
+
+
+(*
+ * in tls.c
+ *)
+
+function ldap_tls_inplace(
+    ld              : PLDAP
+  ): cint; cdecl; external;
+
+function ldap_install_tls(
+    ld              : PLDAP
+  ): cint; cdecl; external;
+
+function ldap_start_tls(
+    ld              : PLDAP;
+    serverctrls     : PPLDAPControl;
+    clientctrls     : PPLDAPControl;
+    var msgidp      : cint
+  ): cint; cdecl; external;
+
+function ldap_start_tls_s(
+    ld              : PLDAP;
+    serverctrls     : PPLDAPControl;
+    clientctrls     : PPLDAPControl
+  ): cint; cdecl; external;
+
+
+(*
+ * in messages.c:
+ *)
+
+function ldap_first_message(
+    ld              : PLDAP;
+    chain           : PLDAPMessage
+  ): PLDAPMessage; cdecl; external;
+
+function ldap_next_message(
+    ld              : PLDAP;
+    msg             : PLDAPMessage
+  ): PLDAPMessage; cdecl; external;
+
+function ldap_count_messages(
+    ld              : PLDAP;
+    chain           : PLDAPMessage
+  ): cint; cdecl; external;
+
+
+(*
+ * in references.c:
+ *)
+
+function ldap_first_reference(
+    ld              : PLDAP;
+    chain           : PLDAPMessage
+  ): PLDAPMessage; cdecl; external;
+
+function ldap_next_reference(
+    ld              : PLDAP;
+    ref             : PLDAPMessage
+  ): PLDAPMessage; cdecl; external;
+
+function ldap_count_references(
+    ld              : PLDAP;
+    chain           : PLDAPMessage
+  ): cint; cdecl; external;
+
+function ldap_parse_reference(
+    ld              : PLDAP;
+    ref             : PLDAPMessage;
+    var referralsp  : ppcchar;
+    serverctrls     : PPPLDAPControl;
+    freeit          : cbool
+  ): cint; cdecl; external;
+
+
+(*
+ * in getentry.c:
+ *)
+
+function ldap_first_entry(
+    ld              : PLDAP;
+    chain           : PLDAPMessage
+  ): PLDAPMessage; cdecl; external;
+
+function ldap_next_entry(
+    ld              : PLDAP;
+    entry           : PLDAPMessage
+  ): PLDAPMessage; cdecl; external;
+
+function ldap_count_entries(
+    ld              : PLDAP;
+    chain           : PLDAPMessage
+  ): cint; cdecl; external;
+
+function ldap_get_entry_controls(
+    ld              : PLDAP;
+    entry           : PLDAPMessage;
+    var serverctrls : PPLDAPControl
+  ): cint; cdecl; external;
+
+
+(*
+ * in addentry.c
+ *)
+
+function ldap_delete_result_entry(
+    list            : PPLDAPMessage;
+    e               : PLDAPMessage
+  ): PLDAPMessage; cdecl; external;
+
+procedure ldap_add_result_entry(
+    list            : PPLDAPMessage;
+    e               : PLDAPMessage
+  ); cdecl; external;
+
+
+(*
+ * in getdn.c
+ *)
+
+function ldap_get_dn(
+    ld              : PLDAP;
+    entry           : PLDAPMessage
+  ): pcchar; cdecl; external;
+
+const
+  LDAP_AVA_NULL                     = $0000;
+  LDAP_AVA_STRING                   = $0001;
+  LDAP_AVA_BINARY                   = $0002;
+  LDAP_AVA_NONPRINTABLE             = $0004;
+  LDAP_AVA_FREE_ATTR                = $0010;
+  LDAP_AVA_FREE_VALUE               = $0020;
+
+type
+  pldap_ava                         = ^ldap_ava;
+  ldap_ava                          = record
+    la_attr     : berval;
+    la_value    : berval;
+    la_flags    : cuint;
+    la_private  : Pointer;
+  end;
+
+  PLDAPAVA                          = ^LDAPAVA;
+  LDAPAVA                           = ldap_ava;
+
+  PLDAPRDN                          = ^LDAPRDN;
+  LDAPRDN                           = ^PLDAPAVA;
+
+  PLDAPDN                           = ^LDAPDN;
+  LDAPDN                            = ^LDAPRDN;
+
+const
+(* DN formats *)
+  LDAP_DN_FORMAT_LDAP               = $0000;
+  LDAP_DN_FORMAT_LDAPV3             = $0010;
+  LDAP_DN_FORMAT_LDAPV2             = $0020;
+  LDAP_DN_FORMAT_DCE                = $0030;
+  LDAP_DN_FORMAT_UFN                = $0040; (* dn2str only *)
+  LDAP_DN_FORMAT_AD_CANONICAL       = $0050; (* dn2str only *)
+  LDAP_DN_FORMAT_LBER               = $00F0; (* for testing only *)
+  LDAP_DN_FORMAT_MASK               = $00F0;
+
+(* DN flags *)
+  LDAP_DN_PRETTY                    = $0100;
+  LDAP_DN_SKIP                      = $0200;
+  LDAP_DN_P_NOLEADTRAILSPACES       = $1000;
+  LDAP_DN_P_NOSPACEAFTERRDN         = $2000;
+  LDAP_DN_PEDANTIC                  = $F000;
+
+procedure ldap_rdnfree(rdn: LDAPRDN); cdecl; external;
+procedure ldap_dnfree(rdn: LDAPDN); cdecl; external;
+
+function ldap_bv2dn(
+    bv              : PBerval;
+    var dn          : LDAPDN;
+    flags           : cuint
+  ): cint; cdecl; external;
+
+function ldap_str2dn(
+    const str       : pcchar;
+    var dn          : LDAPDN;
+    flags           : cuint
+  ): cint; cdecl; external;
+
+function ldap_dn2bv(
+    dn              : LDAPDN;
+    bv              : PBerval;
+    flags           : cuint
+  ): cint; cdecl; external;
+
+function ldap_dn2str(
+    dn              : LDAPDN;
+    var str         : pcchar;
+    flags           : cuint
+  ): cint; cdecl; external;
+
+function ldap_bv2rdn(
+    bv              : PBerval;
+    var rdn         : LDAPRDN;
+    var next        : pcchar;
+    flags           : cuint
+  ): cint; cdecl; external;
+
+function ldap_str2rdn(
+    const str       : pcchar;
+    var rdn         : LDAPRDN;
+    var next        : pcchar;
+    flags           : cuint
+  ): cint; cdecl; external;
+
+function ldap_rdn2bv(
+    rdn             : LDAPRDN;
+    bv              : PBerval;
+    flags           : cuint
+  ): cint; cdecl; external;
+
+function ldap_rdn2str(
+    rdn             : LDAPRDN;
+    var str         : pcchar;
+    flags           : cuint
+  ): cint; cdecl; external;
+
+function ldap_dn_normalize(
+    const _in       : pcchar;
+    iflags          : cuint;
+    var _out        : pcchar;
+    oflags          : cuint
+  ): cint; cdecl; external;
+
+
+type
+  LDAPDN_rewrite_func = function(dn: LDAPDN; flags: cuint; ctx: Pointer): cint; cdecl;
+
+function ldap_X509dn2bv(
+    x509_name       : Pointer;
+    dn              : PBerval;
+    func            : LDAPDN_rewrite_func;
+    flags           : cuint
+  ): cint; cdecl; external;
+
+function ldap_get_dn_ber(
+    ld              : PLDAP;
+    e               : PLDAPMessage;
+    var berout      : PBerElement;
+    dn              : PBerval
+  ): cint; cdecl; external;
+
+function ldap_get_attribute_ber(
+    ld              : PLDAP;
+    e               : PLDAPMessage;
+    ber             : PBerElement;
+    attr            : PBerval;
+    var vals        : PBerval
+  ): cint; cdecl; external;
+
+
+(*
+ * in getattr.c
+ *)
+
+function ldap_first_attribute(
+    ld              : PLDAP;
+    entry           : PLDAPMessage;
+    var ber         : PBerElement
+  ): pcchar; cdecl; external;
+
+function ldap_next_attribute(
+    ld              : PLDAP;
+    entry           : PLDAPMessage;
+    ber             : PBerElement
+  ): pcchar; cdecl; external;
+
+
+(*
+ * in getvalues.c
+ *)
+
+function ldap_get_values_len(
+    ld              : PLDAP;
+    entry           : PLDAPMessage;
+    const target    : pcchar
+  ): PPBerval; cdecl; external;
+
+function ldap_count_values_len(
+    vals            : PPBerval
+  ): cint; cdecl; external;
+
+procedure ldap_value_free_len(
+    vals            : PPBerval
+  ); cdecl; external;
+
+
+(*
+ * in result.c:
+ *)
+
+function ldap_result(
+    ld              : PLDAP;
+    msgid           : cint;
+    all             : cint;
+    timeout         : ptimeval;
+    var result      : PLDAPMessage
+  ): cint; cdecl; external;
+
+function ldap_msgtype(
+    lm              : PLDAPMessage
+  ): cint; cdecl; external;
+
+function ldap_msgid(
+    lm              : PLDAPMessage
+  ): cint; cdecl; external;
+
+function ldap_msgfree(
+    lm              : PLDAPMessage
+  ): cint; cdecl; external;
+
+function ldap_msgdelete(
+    ld              : PLDAP;
+    msgid           : cint
+  ): cint; cdecl; external;
+
+
+(*
+ * in search.c:
+ *)
+
+function ldap_search_ext(
+    ld              : PLDAP;
+    const base      : pcchar;
+    scope           : cint;
+    const filter    : pcchar;
+    attrs           : ppcchar;
+    attrsonly       : cbool;
+    serverctrls     : PPLDAPControl;
+    clientctrls     : PPLDAPControl;
+    timout          : ptimeval;
+    sizelimit       : cint;
+    var msgidp      : cint
+  ): cint; cdecl; external;
+
+function ldap_search_ext_s(
+    ld              : PLDAP;
+    const base      : pcchar;
+    scope           : cint;
+    const filter    : pcchar;
+    attrs           : ppcchar;
+    attrsonly       : cbool;
+    serverctrls     : PPLDAPControl;
+    clientctrls     : PPLDAPControl;
+    timout          : ptimeval;
+    sizelimit       : cint;
+    var res         : PLDAPMessage
+  ): cint; cdecl; external;
+
+
+(*
+ * in unbind.c
+ *)
+
+function ldap_unbind_ext(
+    ld              : PLDAP;
+    serverctrls     : PPLDAPControl;
+    clientctrls     : PPLDAPControl
+  ): cint; cdecl; external;
+
+function ldap_unbind_ext_s(
+    ld              : PLDAP;
+    serverctrls     : PPLDAPControl;
+    clientctrls     : PPLDAPControl
+  ): cint; cdecl; external;
+
+
+(*
+ * in filter.c
+ *)
+
+function ldap_put_vrFilter(
+    ber             : PBerElement;
+    const vrf       : pcchar
+  ): cint; cdecl; external;
+
+
+(*
+ * in free.c
+ *)
+
+function ldap_memalloc(
+    s               : ber_len_t
+  ): Pointer; cdecl; external;
+
+function ldap_memrealloc(
+    p               : Pointer;
+    s               : ber_len_t
+  ): Pointer; cdecl; external;
+
+function ldap_memcalloc(
+    n               : ber_len_t;
+    s               : ber_len_t
+  ): Pointer; cdecl; external;
+
+procedure ldap_memfree(
+    p               : Pointer
+  ); cdecl; external;
+
+procedure ldap_memvfree(
+    v               : PPointer
+  ); cdecl; external;
+
+function ldap_strdup(
+    const str       : pcchar
+  ): pcchar; cdecl; external;
+
+procedure ldap_mods_free(
+    mods            : PPLDAPMod;
+    freemods        : cbool
+  ); cdecl; external;
+
+
+(*
+ * in url.c
+ *)
+
+function ldap_is_ldap_url(
+    const url       : pcchar
+  ): cint; cdecl; external;
+
+function ldap_is_ldaps_url(
+    const url       : pcchar
+  ): cint; cdecl; external;
+
+function ldap_is_ldapi_url(
+    const url       : pcchar
+  ): cint; cdecl; external;
+
+function ldap_url_parse(
+    const url       : pcchar;
+    var ludpp       : PLDAPURLDesc
+  ): cint; cdecl; external;
+
+function ldap_url_desc2str(
+    ludpp           : PLDAPURLDesc
+  ): pcchar; cdecl; external;
+
+procedure ldap_free_urldesc(
+    ludpp           : PLDAPURLDesc
+  ); cdecl; external;
+
+
+(*
+ * LDAP Cancel Extended Operation <draft-zeilenga-ldap-cancel-xx.txt>
+ *  in cancel.c
+ *)
+const
+  LDAP_API_FEATURE_CANCEL           = 1000;
+
+function ldap_cancel(
+    ld              : PLDAP;
+    cancelid        : cint;
+    sctrl           : PPLDAPControl;
+    cctrl           : PPLDAPControl;
+    var msgidp      : cint
+  ): cint; cdecl; external;
+
+
+function ldap_cancel_s(
+    ld              : PLDAP;
+    cancelid        : cint;
+    sctrl           : PPLDAPControl;
+    cctrl           : PPLDAPControl
+  ): cint; cdecl; external;
+
+
+(*
+ * LDAP Server Side Sort
+ *  in sortctrl.c
+ *)
+
+const
+  LDAP_API_FEATURE_SERVER_SIDE_SORT = 1000;
+
+(* structure for a sort-key *)
+type
+  PPLDAPSortKey                     = ^PLDAPSortKey;
+  PLDAPSortKey                      = ^LDAPSortKey;
+  LDAPSortKey                       = record
+    attributeType   : pcchar;
+    orderingRule    : pcchar;
+    reverseOrder    : cbool;
+  end;
+
+
+function ldap_create_sort_keylist(
+    var sortKeyList : PPLDAPSortKey;
+    keyString       : pcchar
+  ): cint; cdecl; external;
+
+procedure ldap_free_sort_keylist(
+    sortKeyList     : PPLDAPSortKey
+  ); cdecl; external;
+
+function ldap_create_sort_control(
+    ld              : PLDAP;
+    keyList         : PPLDAPSortKey;
+    ctl_iscritical  : cbool;
+    var ctrlp       : PLDAPControl
+  ): cint; cdecl; external;
+
+function ldap_parse_sort_control(
+    ld              : PLDAP;
+    ctrlp           : PPLDAPControl;
+    var result      : culong;
+    var attribute   : pcchar
+  ): cint; cdecl; external;
+
+
+(*
+ * LDAP Virtual List View
+ *  in vlvctrl.c
+ *)
+const
+  LDAP_API_FEATURE_VIRTUAL_LIST_VIEW = 1000;
+
+(* structure for virtual list *)
+type
+  PLDAPVLVInfo                      = ^LDAPVLVInfo;
+  LDAPVLVInfo                       = record
+    ldvlv_version       : cint;
+    ldvlv_before_count  : culong;
+    ldvlv_after_count   : culong;
+    ldvlv_offset        : culong;
+    ldvlv_count         : culong;
+    ldvlv_attrvalue     : PBerval;
+    ldvlv_context       : PBerval;
+    ldvlv_extradata     : Pointer;
+  end;
+
+function ldap_create_vlv_control(
+    ld              : PLDAP;
+    ldvlistp        : PLDAPVLVInfo;
+    var ctrlp       : PLDAPControl
+  ): cint; cdecl; external;
+
+function ldap_parse_vlv_control(
+    ld              : PLDAP;
+    ctrls           : PPLDAPControl;
+    var target_posp : culong;
+    var list_countp : culong;
+    var contextp    : PBerval;
+    var errcodep    : cint
+  ): cint; cdecl; external;
+
+
+(*
+ * LDAP Transactions
+ *  in txn.c
+ *)
+
+(*
+#ifdef LDAP_GROUP_TRANSACTION
+LDAP_F( int )
+ldap_parse_txn_create LDAP_P((
+    LDAP *ld,
+    LDAPMessage *res,
+    struct berval **cookie ));
+
+LDAP_F( int )
+ldap_txn_create LDAP_P((
+    LDAP *ld,
+    LDAPControl     **sctrls,
+    LDAPControl     **cctrls,
+    int             *msgidp ));
+
+LDAP_F( int )
+ldap_txn_create_s LDAP_P((
+    LDAP *ld,
+    struct berval **cookie,
+    LDAPControl **sctrls,
+    LDAPControl **cctrls ));
+
+LDAP_F( int )
+ldap_txn_end LDAP_P((
+    LDAP *ld,
+    struct berval *cookie,
+    int commit,
+    LDAPControl     **sctrls,
+    LDAPControl     **cctrls,
+    int             *msgidp ));
+
+LDAP_F( int )
+ldap_txn_end_s LDAP_P((
+    LDAP *ld,
+    struct berval *cookie,
+    int commit,
+    LDAPControl **sctrls,
+    LDAPControl **cctrls ));
+#endif*)
+
+
+(*
+ * LDAP Who Am I?
+ *  in whoami.c
+ *)
+const
+  LDAP_API_FEATURE_WHOAMI           = 1000;
+
+function ldap_parse_whoami(
+    ld              : PLDAP;
+    res             : PLDAPMessage;
+    var authzid     : PBerval
+  ): cint; cdecl; external;
+
+function ldap_whoami(
+    ld              : PLDAP;
+    sctrl           : PPLDAPControl;
+    cctrl           : PPLDAPControl;
+    var msgidp      : cint
+  ): cint; cdecl; external;
+
+function ldap_whoami_s(
+    ld              : PLDAP;
+    var authzid     : PBerval;
+    sctrl           : PPLDAPControl;
+    cctrl           : PPLDAPControl
+  ): cint; cdecl; external;
+
+
+(*
+ * LDAP Password Modify
+ *  in passwd.c
+ *)
+const
+  LDAP_API_FEATURE_PASSWD_MODIFY    = 1000;
+
+function ldap_parse_passwd(
+    ld              : PLDAP;
+    res             : PLDAPMessage;
+    newpasswd       : PBerval
+  ): cint; cdecl; external;
+
+function ldap_passwd(
+    ld              : PLDAP;
+    user            : PBerval;
+    oldpw           : PBerval;
+    newpw           : PBerval;
+    sctrl           : PPLDAPControl;
+    cctrl           : PPLDAPControl;
+    var msgidp      : cint
+  ): cint; cdecl; external;
+
+function ldap_passwd_s(
+    ld              : PLDAP;
+    user            : PBerval;
+    oldpw           : PBerval;
+    newpw           : PBerval;
+    newpasswd       : PBerval;
+    sctrl           : PPLDAPControl;
+    cctrl           : PPLDAPControl
+  ): cint; cdecl; external;
+
+
+(*
+ * LDAP Password Policy controls
+ *  in ppolicy.c
+ *)
+
+(*
+#ifdef LDAP_CONTROL_PASSWORDPOLICYREQUEST
+#define LDAP_API_FEATURE_PASSWORD_POLICY 1000
+
+typedef enum passpolicyerror_enum {
+       PP_passwordExpired = 0,
+       PP_accountLocked = 1,
+       PP_changeAfterReset = 2,
+       PP_passwordModNotAllowed = 3,
+       PP_mustSupplyOldPassword = 4,
+       PP_insufficientPasswordQuality = 5,
+       PP_passwordTooShort = 6,
+       PP_passwordTooYoung = 7,
+       PP_passwordInHistory = 8,
+       PP_noError = 65535
+} LDAPPasswordPolicyError;
+
+LDAP_F( int )
+ldap_create_passwordpolicy_control LDAP_P((
+        LDAP *ld,
+        LDAPControl **ctrlp ));
+
+LDAP_F( int )
+ldap_parse_passwordpolicy_control LDAP_P((
+        LDAP *ld,
+        LDAPControl *ctrl,
+        int *expirep,
+        int *gracep,
+        LDAPPasswordPolicyError *errorp ));
+
+LDAP_F( const cchar * )
+ldap_passwordpolicy_err2txt LDAP_P(( LDAPPasswordPolicyError ));
+#endif*)
+
+
+(*
+ * hacks for NTLM
+ *)
+const
+  LDAP_AUTH_NTLM_REQUEST            = ber_tag_t($8a);
+  LDAP_AUTH_NTLM_RESPONSE           = ber_tag_t($8b);
+
+function ldap_ntlm_bind(
+    ld              : PLDAP;
+    const dn        : pcchar;
+    tag             : ber_tag_t;
+    cred            : PBerval;
+    sctrl           : PPLDAPControl;
+    cctrl           : PPLDAPControl;
+    var msgidp      : cint
+  ): cint; cdecl; external;
+
+function ldap_parse_ntlm_bind_result(
+    ld              : PLDAP;
+    res             : PLDAPMessage;
+    challenge       : PBerval
+  ): cint; cdecl; external;