Browse Source

merge with trunk

git-svn-id: branches/tg74/avx2@28420 -
tg74 11 years ago
parent
commit
6a73d76dc3
100 changed files with 4033 additions and 1518 deletions
  1. 343 87
      .gitattributes
  2. 34 8
      Makefile
  3. 9 3
      Makefile.fpc
  4. 24 7
      ide/Makefile
  5. 2 2
      ide/Makefile.fpc
  6. 13 0
      ide/Makefile.fpc.fpcmake
  7. 29 5
      ide/compiler/Makefile
  8. 20 5
      ide/fakegdb/Makefile
  9. 17 1
      ide/fp.pas
  10. 3 3
      ide/fpevalw.pas
  11. 1 1
      ide/fphelp.pas
  12. 2 2
      ide/fpide.pas
  13. 27 14
      ide/fpmake.pp
  14. 1 1
      ide/fpmwnd.inc
  15. 1 1
      ide/fpswitch.pas
  16. 2 1
      ide/fpsymbol.pas
  17. 22 1
      ide/fpviews.pas
  18. 59 3
      ide/vesa.pas
  19. 2 2
      ide/wconstse.inc
  20. 255 6
      installer/Makefile
  21. 1 1
      installer/Makefile.fpc
  22. 14 1
      installer/install.dat
  23. 19 7
      packages/Makefile
  24. 2 2
      packages/Makefile.fpc
  25. 57 49
      packages/Makefile.fpc.fpcmake
  26. 24 7
      packages/a52/Makefile
  27. 2 2
      packages/a52/Makefile.fpc
  28. 24 7
      packages/amunits/Makefile
  29. 2 2
      packages/amunits/Makefile.fpc
  30. 1 1
      packages/amunits/src/otherlibs/mui.pas
  31. 29 5
      packages/amunits/src/utilunits/Makefile
  32. 2 2
      packages/amunits/src/utilunits/linklist.pas
  33. 24 7
      packages/aspell/Makefile
  34. 2 2
      packages/aspell/Makefile.fpc
  35. 24 7
      packages/bfd/Makefile
  36. 2 2
      packages/bfd/Makefile.fpc
  37. 24 7
      packages/bzip2/Makefile
  38. 2 2
      packages/bzip2/Makefile.fpc
  39. 1 1
      packages/bzip2/fpmake.pp
  40. 24 7
      packages/cairo/Makefile
  41. 2 2
      packages/cairo/Makefile.fpc
  42. 1 0
      packages/cairo/fpmake.pp
  43. 401 63
      packages/cairo/src/cairo.pp
  44. 12 4
      packages/cairo/src/cairoft.pp
  45. 303 0
      packages/cairo/src/cairogobject.pp
  46. 16 10
      packages/cairo/src/cairowin32.pp
  47. 19 5
      packages/cairo/src/cairoxlib.pp
  48. 24 7
      packages/cdrom/Makefile
  49. 2 2
      packages/cdrom/Makefile.fpc
  50. 26 5
      packages/cdrom/examples/Makefile
  51. 24 7
      packages/chm/Makefile
  52. 2 2
      packages/chm/Makefile.fpc
  53. 5 3
      packages/chm/src/chmcmd.lpr
  54. 95 27
      packages/chm/src/chmfilewriter.pas
  55. 2 2
      packages/chm/src/chmreader.pas
  56. 8 8
      packages/chm/src/chmwriter.pas
  57. 24 7
      packages/cocoaint/Makefile
  58. 2 2
      packages/cocoaint/Makefile.fpc
  59. 24 7
      packages/dblib/Makefile
  60. 2 2
      packages/dblib/Makefile.fpc
  61. 75 24
      packages/dblib/src/dblib.pp
  62. 24 7
      packages/dbus/Makefile
  63. 2 2
      packages/dbus/Makefile.fpc
  64. 26 5
      packages/dbus/examples/Makefile
  65. 24 7
      packages/dts/Makefile
  66. 2 2
      packages/dts/Makefile.fpc
  67. 24 7
      packages/fastcgi/Makefile
  68. 2 2
      packages/fastcgi/Makefile.fpc
  69. 24 7
      packages/fcl-async/Makefile
  70. 2 2
      packages/fcl-async/Makefile.fpc
  71. 24 7
      packages/fcl-base/Makefile
  72. 2 2
      packages/fcl-base/Makefile.fpc
  73. 34 5
      packages/fcl-base/examples/Makefile
  74. 2 0
      packages/fcl-base/fpmake.pp
  75. 260 270
      packages/fcl-base/src/contnrs.pp
  76. 49 16
      packages/fcl-base/src/custapp.pp
  77. 1 1
      packages/fcl-base/src/fpexprpars.pp
  78. 7 4
      packages/fcl-base/src/fpmimetypes.pp
  79. 84 0
      packages/fcl-base/src/inifiles.pp
  80. 1 1
      packages/fcl-base/src/nullstream.pp
  81. 9 3
      packages/fcl-base/src/rttiutils.pp
  82. 24 7
      packages/fcl-db/Makefile
  83. 2 2
      packages/fcl-db/Makefile.fpc
  84. 1 1
      packages/fcl-db/examples/dbftool.lpi
  85. 34 36
      packages/fcl-db/examples/dbftool.lpr
  86. 60 0
      packages/fcl-db/examples/sqlite3loadlib.lpr
  87. 99 0
      packages/fcl-db/examples/sqlparser.pp
  88. 9 4
      packages/fcl-db/fpmake.pp
  89. 36 5
      packages/fcl-db/src/base/Makefile
  90. 295 178
      packages/fcl-db/src/base/bufdataset.pas
  91. 33 11
      packages/fcl-db/src/base/database.inc
  92. 143 127
      packages/fcl-db/src/base/dataset.inc
  93. 12 6
      packages/fcl-db/src/base/datasource.inc
  94. 147 102
      packages/fcl-db/src/base/db.pas
  95. 1 1
      packages/fcl-db/src/base/dbcoll.pp
  96. 71 36
      packages/fcl-db/src/base/dsparams.inc
  97. 136 127
      packages/fcl-db/src/base/fields.inc
  98. 79 56
      packages/fcl-db/src/base/sqlscript.pp
  99. 1 1
      packages/fcl-db/src/base/xmldatapacketreader.pp
  100. 32 5
      packages/fcl-db/src/codegen/Makefile

File diff suppressed because it is too large
+ 343 - 87
.gitattributes


+ 34 - 8
Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013/05/28]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: help
 default: help
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -321,8 +321,8 @@ endif
 endif
 endif
 override PACKAGE_NAME=fpc
 override PACKAGE_NAME=fpc
 override PACKAGE_VERSION=2.7.1
 override PACKAGE_VERSION=2.7.1
-REQUIREDVERSION=2.6.2
-REQUIREDVERSION2=2.6.0
+REQUIREDVERSION=2.6.4
+REQUIREDVERSION2=2.6.2
 ifndef inOS2
 ifndef inOS2
 override FPCDIR:=$(BASEDIR)
 override FPCDIR:=$(BASEDIR)
 export FPCDIR
 export FPCDIR
@@ -370,6 +370,9 @@ endif
 ifeq ($(CPU_TARGET),i8086)
 ifeq ($(CPU_TARGET),i8086)
 PPSUF=8086
 PPSUF=8086
 endif
 endif
+ifeq ($(CPU_TARGET),avr)
+PPSUF=avr
+endif
 ifdef CROSSCOMPILE
 ifdef CROSSCOMPILE
 ifneq ($(CPU_TARGET),jvm)
 ifneq ($(CPU_TARGET),jvm)
 PPPRE=ppcross
 PPPRE=ppcross
@@ -442,8 +445,11 @@ else
 FPCMAKENEW=$(BASEDIR)/utils/fpcm/bin/$(SOURCESUFFIX)/fpcmake$(SRCEXEEXT)
 FPCMAKENEW=$(BASEDIR)/utils/fpcm/bin/$(SOURCESUFFIX)/fpcmake$(SRCEXEEXT)
 endif
 endif
 endif
 endif
+ifneq ($(OPT),)
+OPTNEW+=$(OPT)
+endif
 CLEANOPTS=FPC=$(PPNEW)
 CLEANOPTS=FPC=$(PPNEW)
-BUILDOPTS=FPC=$(PPNEW) FPCFPMAKE=$(FPCFPMAKENEW) RELEASE=1
+BUILDOPTS=FPC=$(PPNEW) FPCFPMAKE=$(FPCFPMAKENEW) RELEASE=1 'OPT=$(OPTNEW)'
 INSTALLOPTS=FPC=$(PPNEW) ZIPDESTDIR=$(BASEDIR) FPCMAKE=$(FPCMAKENEW)
 INSTALLOPTS=FPC=$(PPNEW) ZIPDESTDIR=$(BASEDIR) FPCMAKE=$(FPCMAKENEW)
 ifndef CROSSCOMPILE
 ifndef CROSSCOMPILE
 ifneq ($(wildcard ide),)
 ifneq ($(wildcard ide),)
@@ -672,6 +678,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_DIRS+=compiler rtl utils packages ide installer
 override TARGET_DIRS+=compiler rtl utils packages ide installer
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_DIRS+=compiler rtl utils packages ide installer
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override TARGET_DIRS+=compiler rtl utils packages ide installer
 override TARGET_DIRS+=compiler rtl utils packages ide installer
 endif
 endif
@@ -1063,7 +1072,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1255,6 +1264,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -1283,10 +1293,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1453,7 +1471,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else
@@ -2366,6 +2384,14 @@ TARGET_DIRS_PACKAGES=1
 TARGET_DIRS_IDE=1
 TARGET_DIRS_IDE=1
 TARGET_DIRS_INSTALLER=1
 TARGET_DIRS_INSTALLER=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+TARGET_DIRS_COMPILER=1
+TARGET_DIRS_RTL=1
+TARGET_DIRS_UTILS=1
+TARGET_DIRS_PACKAGES=1
+TARGET_DIRS_IDE=1
+TARGET_DIRS_INSTALLER=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 TARGET_DIRS_COMPILER=1
 TARGET_DIRS_COMPILER=1
 TARGET_DIRS_RTL=1
 TARGET_DIRS_RTL=1

+ 9 - 3
Makefile.fpc

@@ -20,8 +20,8 @@ fpcdir=.
 rule=help
 rule=help
 
 
 [prerules]
 [prerules]
-REQUIREDVERSION=2.6.2
-REQUIREDVERSION2=2.6.0
+REQUIREDVERSION=2.6.4
+REQUIREDVERSION2=2.6.2
 
 
 
 
 # make versions < 3.77 (OS2 version) are buggy
 # make versions < 3.77 (OS2 version) are buggy
@@ -76,6 +76,9 @@ endif
 ifeq ($(CPU_TARGET),i8086)
 ifeq ($(CPU_TARGET),i8086)
 PPSUF=8086
 PPSUF=8086
 endif
 endif
+ifeq ($(CPU_TARGET),avr)
+PPSUF=avr
+endif
 
 
 # cross compilers uses full cpu_target, not just ppc-suffix
 # cross compilers uses full cpu_target, not just ppc-suffix
 # (except if the target cannot run a native compiler)
 # (except if the target cannot run a native compiler)
@@ -179,8 +182,11 @@ endif
 endif
 endif
 
 
 # Build/install options
 # Build/install options
+ifneq ($(OPT),)
+OPTNEW+=$(OPT)
+endif
 CLEANOPTS=FPC=$(PPNEW)
 CLEANOPTS=FPC=$(PPNEW)
-BUILDOPTS=FPC=$(PPNEW) FPCFPMAKE=$(FPCFPMAKENEW) RELEASE=1
+BUILDOPTS=FPC=$(PPNEW) FPCFPMAKE=$(FPCFPMAKENEW) RELEASE=1 'OPT=$(OPTNEW)'
 INSTALLOPTS=FPC=$(PPNEW) ZIPDESTDIR=$(BASEDIR) FPCMAKE=$(FPCMAKENEW)
 INSTALLOPTS=FPC=$(PPNEW) ZIPDESTDIR=$(BASEDIR) FPCMAKE=$(FPCMAKENEW)
 
 
 # Compile also IDE (check for ide and fv dir)
 # Compile also IDE (check for ide and fv dir)

+ 24 - 7
ide/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-05-26 rev 24621]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -328,8 +328,8 @@ endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override NOCPUDEF=1
 override NOCPUDEF=1
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCSUBDIR=ide
 override INSTALL_FPCSUBDIR=ide
@@ -714,7 +714,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -906,6 +906,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -934,10 +935,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1523,6 +1532,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1917,7 +1934,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 2 - 2
ide/Makefile.fpc

@@ -23,8 +23,8 @@ endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 # do not add -d$(CPU_TARGET)
 # do not add -d$(CPU_TARGET)
 override NOCPUDEF=1
 override NOCPUDEF=1
 
 

+ 13 - 0
ide/Makefile.fpc.fpcmake

@@ -60,21 +60,34 @@ neednostdlib=1
 endif
 endif
 ifeq ($(OS_TARGET),openbsd)
 ifeq ($(OS_TARGET),openbsd)
 needusrlocallib=1
 needusrlocallib=1
+needusrlib=1
+neednostdlib=1
 endif
 endif
 ifeq ($(OS_TARGET),netbsd)
 ifeq ($(OS_TARGET),netbsd)
 neednostdlib=1
 neednostdlib=1
 endif
 endif
+ifeq ($(OS_TARGET),aix)
+neednostdlib=1
+endif
 
 
 ifdef needlinkparam
 ifdef needlinkparam
 override SPECIALLINK=-Xe -k--allow-multiple-definition
 override SPECIALLINK=-Xe -k--allow-multiple-definition
 endif
 endif
 
 
+ifdef needusrlib
+override SPECIALLINK+=-Fl/usr/lib
+endif
 ifdef needusrlocallib
 ifdef needusrlocallib
 override SPECIALLINK+=-Fl/usr/local/lib
 override SPECIALLINK+=-Fl/usr/local/lib
 endif
 endif
 ifdef neednostdlib
 ifdef neednostdlib
 override SPECIALLINK+=-Xd
 override SPECIALLINK+=-Xd
 endif
 endif
+
+ifeq ($(OS_TARGET),aix)
+override SPECIALLINK+=6fl/opt/freeware/lib -k-bbigtoc
+endif
+
 # Try to find GDB library
 # Try to find GDB library
 # Look for a valid GDBLIBDIR environment variable
 # Look for a valid GDBLIBDIR environment variable
 ifdef GDBLIBDIR
 ifdef GDBLIBDIR

+ 29 - 5
ide/compiler/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -559,6 +559,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_UNITS+=compunit
 override TARGET_UNITS+=compunit
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_UNITS+=compunit
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override TARGET_UNITS+=compunit
 override TARGET_UNITS+=compunit
 endif
 endif
@@ -779,6 +782,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override COMPILER_OPTIONS+=-Ur -dNOCATCH
 override COMPILER_OPTIONS+=-Ur -dNOCATCH
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_OPTIONS+=-Ur -dNOCATCH
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override COMPILER_OPTIONS+=-Ur -dNOCATCH
 override COMPILER_OPTIONS+=-Ur -dNOCATCH
 endif
 endif
@@ -998,6 +1004,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override COMPILER_INCLUDEDIR+=$(COMPILERDIR) $(COMPILERDIR)/$(PPC_TARGET)
 override COMPILER_INCLUDEDIR+=$(COMPILERDIR) $(COMPILERDIR)/$(PPC_TARGET)
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_INCLUDEDIR+=$(COMPILERDIR) $(COMPILERDIR)/$(PPC_TARGET)
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override COMPILER_INCLUDEDIR+=$(COMPILERDIR) $(COMPILERDIR)/$(PPC_TARGET)
 override COMPILER_INCLUDEDIR+=$(COMPILERDIR) $(COMPILERDIR)/$(PPC_TARGET)
 endif
 endif
@@ -1217,6 +1226,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override COMPILER_UNITDIR+=$(COMPILERDIR) $(COMPILERDIR)/$(PPC_TARGET) $(COMPILERDIR)/targets $(COMPILERDIR)/systems
 override COMPILER_UNITDIR+=$(COMPILERDIR) $(COMPILERDIR)/$(PPC_TARGET) $(COMPILERDIR)/targets $(COMPILERDIR)/systems
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_UNITDIR+=$(COMPILERDIR) $(COMPILERDIR)/$(PPC_TARGET) $(COMPILERDIR)/targets $(COMPILERDIR)/systems
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override COMPILER_UNITDIR+=$(COMPILERDIR) $(COMPILERDIR)/$(PPC_TARGET) $(COMPILERDIR)/targets $(COMPILERDIR)/systems
 override COMPILER_UNITDIR+=$(COMPILERDIR) $(COMPILERDIR)/$(PPC_TARGET) $(COMPILERDIR)/targets $(COMPILERDIR)/systems
 endif
 endif
@@ -1607,7 +1619,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1799,6 +1811,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -1827,10 +1840,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -2066,6 +2087,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 endif
 endif
@@ -2255,7 +2279,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 20 - 5
ide/fakegdb/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -531,6 +531,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_UNITS+=gdbcon gdbint
 override TARGET_UNITS+=gdbcon gdbint
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_UNITS+=gdbcon gdbint
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override TARGET_UNITS+=gdbcon gdbint
 override TARGET_UNITS+=gdbcon gdbint
 endif
 endif
@@ -922,7 +925,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1114,6 +1117,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -1142,10 +1146,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1381,6 +1393,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 endif
 endif
@@ -1570,7 +1585,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 17 - 1
ide/fp.pas

@@ -40,7 +40,7 @@ uses
   {$ifdef USE_MINGW_GDB}
   {$ifdef USE_MINGW_GDB}
     fpmingw,
     fpmingw,
   {$else}
   {$else}
-    fpcygwin, 
+    fpcygwin,
   {$endif}
   {$endif}
 {$endif Windows}
 {$endif Windows}
 {$endif NODEBUG}
 {$endif NODEBUG}
@@ -53,6 +53,9 @@ uses
 {$ifdef go32v2}
 {$ifdef go32v2}
   dpmiexcp,
   dpmiexcp,
 {$endif go32v2}
 {$endif go32v2}
+{$ifdef VESA}
+  vesa,
+{$endif VESA}
   keyboard,video,mouse,
   keyboard,video,mouse,
 {$ifdef HasSignal}
 {$ifdef HasSignal}
   fpcatch,
   fpcatch,
@@ -169,6 +172,17 @@ begin
             LFNSupport:=false;
             LFNSupport:=false;
           end else
           end else
 {$endif go32v2}
 {$endif go32v2}
+{$ifdef VESA}
+        if UpcaseStr(Param)='NOVESA' then
+          begin
+            disableVESA:=true;
+          end else
+        if UpcaseStr(Param)='VESA' then
+          begin
+(* Force using VESA although it may have been disabled by default *)
+            disableVESA:=false;
+          end else
+{$endif VESA}
         if UpcaseStr(Param)='README' then
         if UpcaseStr(Param)='README' then
           begin
           begin
             ShowReadme:=true;
             ShowReadme:=true;
@@ -365,6 +379,8 @@ BEGIN
   InitCompilerSwitches;
   InitCompilerSwitches;
 
 
 {$ifdef VESA}
 {$ifdef VESA}
+  writeln(stderr,'If program stops, try again using -novesa option');
+  flush(stderr);
   InitVESAScreenModes;
   InitVESAScreenModes;
 {$endif}
 {$endif}
   InitRedir;
   InitRedir;

+ 3 - 3
ide/fpevalw.pas

@@ -67,9 +67,9 @@ begin
   new(b,init(r,'~E~valuate',cmEvaluate,bfDefault));
   new(b,init(r,'~E~valuate',cmEvaluate,bfDefault));
   insert(b);
   insert(b);
 
 
-  r.assign(size.x-14,6,size.x-3,8);
-  new(b,init(r,'Help',cmHelp,bfNormal));
-  insert(b);
+  //r.assign(size.x-14,6,size.x-3,8);
+  //new(b,init(r,'Help',cmHelp,bfNormal));
+  //insert(b);
 
 
   expr_input^.select;
   expr_input^.select;
 end;
 end;

+ 1 - 1
ide/fphelp.pas

@@ -183,7 +183,7 @@ const
       hint_reloadmodifiedfile= 'Reload file modified on disk';
       hint_reloadmodifiedfile= 'Reload file modified on disk';
       hint_tools             = 'Create or change tools';
       hint_tools             = 'Create or change tools';
       hint_environmentmenu   = 'Specify environment settins';
       hint_environmentmenu   = 'Specify environment settins';
-      hint_preferences       = 'Specify desktop settings';
+      hint_preferences       = 'Specify preferences settings';
       hint_editoroptions     = 'Specify default editor settings';
       hint_editoroptions     = 'Specify default editor settings';
       hint_codecomplete      = 'Specify CodeComplete keywords';
       hint_codecomplete      = 'Specify CodeComplete keywords';
       hint_codetemplates     = 'Specify CodeTemplates';
       hint_codetemplates     = 'Specify CodeTemplates';

+ 2 - 2
ide/fpide.pas

@@ -875,7 +875,7 @@ begin
 {$endif DebugUndo}
 {$endif DebugUndo}
       NewLine(
       NewLine(
       NewItem(menu_edit_cut,menu_key_edit_cut, cut_key, cmCut, hcCut,
       NewItem(menu_edit_cut,menu_key_edit_cut, cut_key, cmCut, hcCut,
-      NewItem(menu_edit_copy,menu_key_edit_copy, copy_key, cmCopy, hcCut,
+      NewItem(menu_edit_copy,menu_key_edit_copy, copy_key, cmCopy, hcCopy,
       NewItem(menu_edit_paste,menu_key_edit_paste, paste_key, cmPaste, hcPaste,
       NewItem(menu_edit_paste,menu_key_edit_paste, paste_key, cmPaste, hcPaste,
       NewItem(menu_edit_clear,menu_key_edit_clear, kbCtrlDel, cmClear, hcClear,
       NewItem(menu_edit_clear,menu_key_edit_clear, kbCtrlDel, cmClear, hcClear,
       NewItem(menu_edit_selectall,'', kbNoKey, cmSelectAll, hcSelectAll,
       NewItem(menu_edit_selectall,'', kbNoKey, cmSelectAll, hcSelectAll,
@@ -934,7 +934,7 @@ begin
       NewItem('~E~valuate...','Ctrl+F4', kbCtrlF4, cmEvaluate, hcEvaluate,
       NewItem('~E~valuate...','Ctrl+F4', kbCtrlF4, cmEvaluate, hcEvaluate,
       NewItem(menu_debug_callstack,menu_key_debug_callstack, kbCtrlF3, cmStack, hcStackWindow,
       NewItem(menu_debug_callstack,menu_key_debug_callstack, kbCtrlF3, cmStack, hcStackWindow,
       NewLine(
       NewLine(
-      NewItem(menu_debug_disassemble,'', kbNoKey, cmDisassemble, hcStackWindow,
+      NewItem(menu_debug_disassemble,'', kbNoKey, cmDisassemble, hcDisassemblyWindow,
       NewItem(menu_debug_registers,'', kbNoKey, cmRegisters, hcRegistersWindow,
       NewItem(menu_debug_registers,'', kbNoKey, cmRegisters, hcRegistersWindow,
       NewItem(menu_debug_fpu_registers,'', kbNoKey, cmFPURegisters, hcFPURegisters,
       NewItem(menu_debug_fpu_registers,'', kbNoKey, cmFPURegisters, hcFPURegisters,
       NewItem(menu_debug_vector_registers,'', kbNoKey, cmVectorRegisters, hcVectorRegisters,
       NewItem(menu_debug_vector_registers,'', kbNoKey, cmVectorRegisters, hcVectorRegisters,

+ 27 - 14
ide/fpmake.pp

@@ -7,6 +7,9 @@ uses
   sysutils;
   sysutils;
 {$endif ALLPACKAGES}
 {$endif ALLPACKAGES}
 
 
+const
+  NoGDBOption: boolean = false;
+
 procedure ide_check_gdb_availability(Sender: TObject);
 procedure ide_check_gdb_availability(Sender: TObject);
 
 
   function DetectLibGDBDir: string;
   function DetectLibGDBDir: string;
@@ -72,8 +75,7 @@ begin
   P := sender as TPackage;
   P := sender as TPackage;
   with installer do
   with installer do
     begin
     begin
-    s := GetCustomFpmakeCommandlineOptionValue('NoGDB');
-    if not ((s='1') or (s='Y')) then
+    if not (NoGDBOption) then
       begin
       begin
         // Detection of GDB.
         // Detection of GDB.
         GDBLibDir := DetectLibGDBDir;
         GDBLibDir := DetectLibGDBDir;
@@ -100,10 +102,16 @@ begin
                         end;
                         end;
               openbsd : begin
               openbsd : begin
                           P.Options.Add('-Fl/usr/local/lib');
                           P.Options.Add('-Fl/usr/local/lib');
+                          P.Options.Add('-Fl/usr/lib');
                           P.Options.Add('-Xd');
                           P.Options.Add('-Xd');
                         end;
                         end;
               netbsd  : P.Options.Add('-Xd');
               netbsd  : P.Options.Add('-Xd');
               linux   : P.Options.Add('-Xd');
               linux   : P.Options.Add('-Xd');
+              aix     : begin
+                          P.Options.Add('-Xd');
+                          P.Options.Add('-Fl/opt/freeware/lib');
+                          P.Options.Add('-k-bbigtoc');
+                        end;
             end; {case}
             end; {case}
 
 
             P.NeedLibc := true;
             P.NeedLibc := true;
@@ -135,6 +143,9 @@ begin
   AddCustomFpmakeCommandlineOption('NoGDB','If value=1 or ''Y'', no GDB support');
   AddCustomFpmakeCommandlineOption('NoGDB','If value=1 or ''Y'', no GDB support');
   With Installer do
   With Installer do
     begin
     begin
+    s := GetCustomFpmakeCommandlineOptionValue('NoGDB');
+    if (s='1') or (s='Y') then
+     NoGDBOption := true;
     s :=GetCustomFpmakeCommandlineOptionValue('CompilerTarget');
     s :=GetCustomFpmakeCommandlineOptionValue('CompilerTarget');
     if s <> '' then
     if s <> '' then
       CompilerTarget:=StringToCPU(s)
       CompilerTarget:=StringToCPU(s)
@@ -148,11 +159,13 @@ begin
 {$endif ALLPACKAGES}
 {$endif ALLPACKAGES}
 
 
     P.Dependencies.Add('rtl');
     P.Dependencies.Add('rtl');
+    P.Dependencies.Add('rtl-extra');
     P.Dependencies.Add('fv');
     P.Dependencies.Add('fv');
     P.Dependencies.Add('chm');
     P.Dependencies.Add('chm');
     { This one is only needed if DEBUG is set }
     { This one is only needed if DEBUG is set }
     P.Dependencies.Add('regexpr');
     P.Dependencies.Add('regexpr');
-    P.Dependencies.Add('gdbint',AllOSes-[morphos]);
+    if not (NoGDBOption) then
+      P.Dependencies.Add('gdbint',AllOSes-[morphos]);
     P.Dependencies.Add('graph',[go32v2]);
     P.Dependencies.Add('graph',[go32v2]);
 
 
     P.SupportBuildModes:=[bmOneByOne];
     P.SupportBuildModes:=[bmOneByOne];
@@ -188,17 +201,17 @@ begin
     T.Directory:='compiler';
     T.Directory:='compiler';
     T.Install:=false;
     T.Install:=false;
 
 
-    P.InstallFiles.Add('fp.ans','$(BASEINSTALLDIR)/ide');
-    P.InstallFiles.Add('gplprog.pt','$(BASEINSTALLDIR)/ide');
-    P.InstallFiles.Add('gplunit.pt','$(BASEINSTALLDIR)/ide');
-    P.InstallFiles.Add('program.pt','$(BASEINSTALLDIR)/ide');
-    P.InstallFiles.Add('unit.pt','$(BASEINSTALLDIR)/ide');
-    P.InstallFiles.Add('cvsco.tdf','$(BASEINSTALLDIR)/ide');
-    P.InstallFiles.Add('cvsdiff.tdf','$(BASEINSTALLDIR)/ide');
-    P.InstallFiles.Add('cvsup.tdf','$(BASEINSTALLDIR)/ide');
-    P.InstallFiles.Add('grep.tdf','$(BASEINSTALLDIR)/ide');
-    P.InstallFiles.Add('tpgrep.tdf','$(BASEINSTALLDIR)/ide');
-    P.InstallFiles.Add('fp32.ico', [win32, win64], '$(BASEINSTALLDIR)/ide');
+    P.InstallFiles.Add('fp.ans','$(BININSTALLDIR)');
+    P.InstallFiles.Add('gplprog.pt','$(BININSTALLDIR)');
+    P.InstallFiles.Add('gplunit.pt','$(BININSTALLDIR)');
+    P.InstallFiles.Add('program.pt','$(BININSTALLDIR)');
+    P.InstallFiles.Add('unit.pt','$(BININSTALLDIR)');
+    P.InstallFiles.Add('cvsco.tdf','$(BININSTALLDIR)');
+    P.InstallFiles.Add('cvsdiff.tdf','$(BININSTALLDIR)');
+    P.InstallFiles.Add('cvsup.tdf','$(BININSTALLDIR)');
+    P.InstallFiles.Add('grep.tdf','$(BININSTALLDIR)');
+    P.InstallFiles.Add('tpgrep.tdf','$(BININSTALLDIR)');
+    P.InstallFiles.Add('fp32.ico', [win32, win64], '$(BININSTALLDIR)');
 
 
     P.Sources.AddDoc('readme.ide');
     P.Sources.AddDoc('readme.ide');
 
 

+ 1 - 1
ide/fpmwnd.inc

@@ -78,7 +78,7 @@ begin
     hcCalcWindow   : S:=PCalculator(P)^.GetTitle(MaxLen);
     hcCalcWindow   : S:=PCalculator(P)^.GetTitle(MaxLen);
     hcBrowserWindow: S:=PBrowserWindow(P)^.GetTitle(MaxLen);
     hcBrowserWindow: S:=PBrowserWindow(P)^.GetTitle(MaxLen);
     hcCompilerMessagesWindow,
     hcCompilerMessagesWindow,
-    hcMessagesWindow:S:=PMessagesWindow(P)^.GetTitle(MaxLen);
+    hcMessagesWindow:S:=PFPWindow(P)^.GetTitle(MaxLen);
     hcGDBWindow,
     hcGDBWindow,
     hcDisassemblyWindow,
     hcDisassemblyWindow,
     hcWatchesWindow,
     hcWatchesWindow,

+ 1 - 1
ide/fpswitch.pas

@@ -1182,7 +1182,7 @@ begin
        AddSelectItem(opt_mode_objectpascal,'objfpc',idNone);
        AddSelectItem(opt_mode_objectpascal,'objfpc',idNone);
        AddSelectItem(opt_mode_turbopascal,'tp',idNone);
        AddSelectItem(opt_mode_turbopascal,'tp',idNone);
        AddSelectItem(opt_mode_delphi,'delphi',idNone);
        AddSelectItem(opt_mode_delphi,'delphi',idNone);
-       AddSelectItem(opt_mode_macpascal,'macpascal',idNone);
+       AddSelectItem(opt_mode_macpascal,'macpas',idNone);
 {      GNU Pascal mode doesn't do much, better disable it
 {      GNU Pascal mode doesn't do much, better disable it
        AddSelectItem(opt_mode_gnupascal,'gpc',idNone);}
        AddSelectItem(opt_mode_gnupascal,'gpc',idNone);}
     end;
     end;

+ 2 - 1
ide/fpsymbol.pas

@@ -551,11 +551,12 @@ begin
     DisposeStr(St);
     DisposeStr(St);
   if assigned(Expr) then
   if assigned(Expr) then
     begin
     begin
+      { avoid infinite recursion here }
+      GDBI:=Debugger^.RunCount;
       p:=Debugger^.GetValue(Expr^);
       p:=Debugger^.GetValue(Expr^);
       St:=NewStr(GetPChar(p));
       St:=NewStr(GetPChar(p));
       if assigned(p) then
       if assigned(p) then
         StrDispose(p);
         StrDispose(p);
-      GDBI:=Debugger^.RunCount;
     end;
     end;
 {$endif ndef NODEBUG}
 {$endif ndef NODEBUG}
 {$endif BROWSERCOL}
 {$endif BROWSERCOL}

+ 22 - 1
ide/fpviews.pas

@@ -954,10 +954,18 @@ end;
 
 
 {$ifdef powerpc}
 {$ifdef powerpc}
   {$define USE_TasmCondFlag}
   {$define USE_TasmCondFlag}
+  { powerpc only has A_B prefix }
+  const
+    CondAsmOps = 1;
+    CondAsmOpStr : array [0..CondAsmOps-1] of string[2] = ('b');
   {$define Use_gas_op2str}
   {$define Use_gas_op2str}
 {$endif}
 {$endif}
 {$ifdef powerpc64}
 {$ifdef powerpc64}
   {$define USE_TasmCondFlag}
   {$define USE_TasmCondFlag}
+  { powerpc64 only has A_B prefix }
+  const
+    CondAsmOps = 1;
+    CondAsmOpStr : array [0..CondAsmOps-1] of string[2] = ('b');
   {$define Use_gas_op2str}
   {$define Use_gas_op2str}
 {$endif}
 {$endif}
 {$ifdef i386}
 {$ifdef i386}
@@ -4251,7 +4259,7 @@ begin
   else
   else
 {$endif NODEBUG}
 {$endif NODEBUG}
     R2.Move(0,2);
     R2.Move(0,2);
-  Insert(New(PStaticText, Init(R2, ^C'Copyright (C) 1998-2012 by')));
+  Insert(New(PStaticText, Init(R2, ^C'Copyright (C) 1998-2014 by')));
   R2.Move(0,2);
   R2.Move(0,2);
   Insert(New(PStaticText, Init(R2, ^C'B‚rczi G bor')));
   Insert(New(PStaticText, Init(R2, ^C'B‚rczi G bor')));
   R2.Move(0,1);
   R2.Move(0,1);
@@ -4346,6 +4354,7 @@ end;
 procedure TFPASCIIChart.HandleEvent(var Event: TEvent);
 procedure TFPASCIIChart.HandleEvent(var Event: TEvent);
 var W: PSourceWindow;
 var W: PSourceWindow;
 begin
 begin
+  writeln(stderr,'all what=',event.what,' cmd=', event.command);
   case Event.What of
   case Event.What of
     evKeyDown :
     evKeyDown :
       case Event.KeyCode of
       case Event.KeyCode of
@@ -4356,6 +4365,16 @@ begin
           end;
           end;
       end;
       end;
     evCommand :
     evCommand :
+      begin
+      writeln(stderr,'fpascii what=',event.what, ' cmd=', event.command, ' ',cmtransfer,' ',cmsearchwindow);
+      if Event.Command=(AsciiTableCommandBase+1) then // variable
+          begin
+            W:=FirstEditorWindow;
+            if Assigned(W) and Assigned(Report) then
+              Message(W,evCommand,cmAddChar,Event.InfoPtr);
+            ClearEvent(Event);
+          end
+      else
       case Event.Command of
       case Event.Command of
         cmTransfer :
         cmTransfer :
           begin
           begin
@@ -4364,10 +4383,12 @@ begin
               Message(W,evCommand,cmAddChar,pointer(ptrint(ord(Report^.AsciiChar))));
               Message(W,evCommand,cmAddChar,pointer(ptrint(ord(Report^.AsciiChar))));
             ClearEvent(Event);
             ClearEvent(Event);
           end;
           end;
+        
         cmSearchWindow+1..cmSearchWindow+99 :
         cmSearchWindow+1..cmSearchWindow+99 :
           if (Event.Command-cmSearchWindow=Number) then
           if (Event.Command-cmSearchWindow=Number) then
               ClearEvent(Event);
               ClearEvent(Event);
       end;
       end;
+      end;
   end;
   end;
   inherited HandleEvent(Event);
   inherited HandleEvent(Event);
 end;
 end;

+ 59 - 3
ide/vesa.pas

@@ -130,6 +130,9 @@ function VESAReturnMemoryWindow(Window: byte; var Position: word): boolean;
 function RegisterVesaVideoMode(Mode : word) : boolean;
 function RegisterVesaVideoMode(Mode : word) : boolean;
 Procedure FreeVesaModes;
 Procedure FreeVesaModes;
 
 
+const
+  DisableVESA : boolean = false;
+
 implementation
 implementation
 
 
 uses
 uses
@@ -190,6 +193,8 @@ var r: registers;
     OK: boolean;
     OK: boolean;
     M: MemPtr;
     M: MemPtr;
 begin
 begin
+  if disableVESA then
+    exit(false);
   StrToMem('VBE2',B.Signature);
   StrToMem('VBE2',B.Signature);
   GetDosMem(M,SizeOf(B));
   GetDosMem(M,SizeOf(B));
   M.MoveDataTo(B,sizeof(B));
   M.MoveDataTo(B,sizeof(B));
@@ -207,6 +212,8 @@ var OK: boolean;
     VI: TVESAInfoBlock;
     VI: TVESAInfoBlock;
 begin
 begin
   FillChar(B,SizeOf(B),0);
   FillChar(B,SizeOf(B),0);
+  if disableVESA then
+    exit(false);
   OK:=VESAGetInfo(VI);
   OK:=VESAGetInfo(VI);
   if OK then
   if OK then
   begin
   begin
@@ -243,6 +250,11 @@ var OK: boolean;
     VI: TVESAInfoBlock;
     VI: TVESAInfoBlock;
     S: array[0..256] of char;
     S: array[0..256] of char;
 begin
 begin
+  if disableVESA then
+    begin
+      VESAGetOemString:='VESA disabled';
+      exit;
+    end;
   FillChar(S,SizeOf(S),0);
   FillChar(S,SizeOf(S),0);
   OK:=VESAGetInfo(VI);
   OK:=VESAGetInfo(VI);
   if OK then
   if OK then
@@ -255,6 +267,8 @@ var r : registers;
     M : MemPtr;
     M : MemPtr;
     OK: boolean;
     OK: boolean;
 begin
 begin
+  if disableVESA then
+    exit(false);
   r.ah:=$4f; r.al:=$01; r.cx:=Mode;
   r.ah:=$4f; r.al:=$01; r.cx:=Mode;
   GetDosMem(M,sizeof(B));
   GetDosMem(M,sizeof(B));
   r.es:=M.DosSeg; r.di:=M.DosOfs; {r.ds:=r.es;}
   r.es:=M.DosSeg; r.di:=M.DosOfs; {r.ds:=r.es;}
@@ -312,6 +326,8 @@ function VESASetMode(Mode: word): boolean;
 var r: registers;
 var r: registers;
     OK: boolean;
     OK: boolean;
 begin
 begin
+  if disableVESA then
+    exit(false);
   r.ah:=$4f; r.al:=$02; r.bx:=Mode;
   r.ah:=$4f; r.al:=$02; r.bx:=Mode;
   dos.intr($10,r);
   dos.intr($10,r);
   OK:=(r.ax=$004f);
   OK:=(r.ax=$004f);
@@ -322,6 +338,10 @@ function VESAGetMode(var Mode: word): boolean;
 var r : registers;
 var r : registers;
     OK: boolean;
     OK: boolean;
 begin
 begin
+  if disableVESA then
+    exit(false);
+  if disableVESA then
+    exit(false);
   r.ah:=$4f; r.al:=$03;
   r.ah:=$4f; r.al:=$03;
   dos.intr($10,r);
   dos.intr($10,r);
   OK:=(r.ax=$004f);
   OK:=(r.ax=$004f);
@@ -333,6 +353,8 @@ function VESASelectMemoryWindow(Window: byte; Position: word): boolean;
 var r : registers;
 var r : registers;
     OK : boolean;
     OK : boolean;
 begin
 begin
+  if disableVESA then
+    exit(false);
   r.ah:=$4f; r.al:=$05; r.bh:=0; r.bl:=Window; r.dx:=Position;
   r.ah:=$4f; r.al:=$05; r.bh:=0; r.bl:=Window; r.dx:=Position;
   dos.intr($10,r);
   dos.intr($10,r);
   OK:=(r.ax=$004f);
   OK:=(r.ax=$004f);
@@ -343,6 +365,8 @@ function VESAReturnMemoryWindow(Window: byte; var Position: word): boolean;
 var r  : registers;
 var r  : registers;
     OK : boolean;
     OK : boolean;
 begin
 begin
+  if disableVESA then
+    exit(false);
   r.ah:=$4f; r.al:=$05; r.bh:=1; r.bl:=Window;
   r.ah:=$4f; r.al:=$05; r.bh:=1; r.bl:=Window;
   dos.intr($10,r);
   dos.intr($10,r);
   OK:=(r.ax=$004f);
   OK:=(r.ax=$004f);
@@ -354,9 +378,10 @@ function VESAInit: boolean;
 var OK: boolean;
 var OK: boolean;
     VI: TVESAInfoBlock;
     VI: TVESAInfoBlock;
 begin
 begin
-  OK:=VESAGetInfo(VI);
-  if OK then
-
+  if disableVESA then
+    OK:=false
+  else
+    OK:=VESAGetInfo(VI);
   VESAInit:=OK;
   VESAInit:=OK;
 end;
 end;
 
 
@@ -394,6 +419,8 @@ function SetVESAMode(const VideoMode: TVideoMode): Boolean;
 
 
   begin
   begin
      res:=false;
      res:=false;
+     if disableVESA then
+       exit(res);
      VH:=VesaVideoModeHead;
      VH:=VesaVideoModeHead;
      while assigned(VH) do
      while assigned(VH) do
        begin
        begin
@@ -635,8 +662,12 @@ begin
   SysDoneVideo();
   SysDoneVideo();
 end;
 end;
 
 
+function SetVESAVideoDriver : boolean; forward;
+
 procedure VesaInitVideo;
 procedure VesaInitVideo;
 begin
 begin
+  if not SetVESAVideoDriver then
+    exit;
 {$ifdef TESTGRAPHIC}
 {$ifdef TESTGRAPHIC}
   if IsGraphicMode then
   if IsGraphicMode then
     begin
     begin
@@ -673,7 +704,10 @@ Var
   i : longint;
   i : longint;
 {$endif TESTGRAPHIC}
 {$endif TESTGRAPHIC}
 
 
+function SetVESAVideoDriver : boolean;
 BEGIN
 BEGIN
+  if disableVESA then
+    exit(false);
 { Get the videodriver to be used }
 { Get the videodriver to be used }
   GetVideoDriver (Driver);
   GetVideoDriver (Driver);
 { Change needed functions }
 { Change needed functions }
@@ -706,4 +740,26 @@ BEGIN
 {$endif TESTGRAPHIC}
 {$endif TESTGRAPHIC}
 
 
   SetVideoDriver (Driver);
   SetVideoDriver (Driver);
+  SetVESAVideoDriver:=true;
+END;
+
+function ChkWinNT: boolean;
+var
+  R: Registers;
+begin
+  ChkWinNT := false;
+  R.AX := $3306;
+  RealIntr ($21, R);
+  if (R.AL = 255) or (R.BX <> 50 * 256 + 5) then
+   Exit;
+  R.AX := $3000;
+  RealIntr ($21, R);
+  if (R.AX = 5) and (R.BH = 255) then
+   ChkWinNT := true;
+end;
+
+begin
+(* Let's disable VESA functions by default if running under MS Windows NT+ *)
+  if ChkWinNT then
+   DisableVESA := true;
 END.
 END.

+ 2 - 2
ide/wconstse.inc

@@ -99,9 +99,9 @@
     msg_cutting = 'Cutting';
     msg_cutting = 'Cutting';
     { Help system }
     { Help system }
 
 
-    msg_nohelpfilesinstalled1 = 'To keep the size of the FPC download reasonable low, it comes without html formatted docs';
+    msg_nohelpfilesinstalled1 = 'To keep the size of the FPC download reasonably low, it comes without html formatted docs';
     msg_nohelpfilesinstalled2 = 'which are necessary for the IDE.';
     msg_nohelpfilesinstalled2 = 'which are necessary for the IDE.';
-    msg_nohelpfilesinstalled3 = 'To get these docs, go to http://www.freepascal.org/down/docs/docs.html and get one';
+    msg_nohelpfilesinstalled3 = 'To get these docs, go to http://www.freepascal.org/down/docs/docs.var and get one';
     msg_nohelpfilesinstalled4 = 'of the html doc archives and unpack the enclosed contents into your FPC directory.';
     msg_nohelpfilesinstalled4 = 'of the html doc archives and unpack the enclosed contents into your FPC directory.';
     msg_nohelpfilesinstalled5 = 'Add fpctoc.html via Help|Files ... to the IDE help file system.';
     msg_nohelpfilesinstalled5 = 'Add fpctoc.html via Help|Files ... to the IDE help file system.';
     msg_helpindex = 'Help index';
     msg_helpindex = 'Help index';

+ 255 - 6
installer/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -579,6 +579,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override CLEAN_UNITS+=scroll insthelp
 override CLEAN_UNITS+=scroll insthelp
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override CLEAN_UNITS+=scroll insthelp
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override CLEAN_UNITS+=scroll insthelp
 override CLEAN_UNITS+=scroll insthelp
 endif
 endif
@@ -838,6 +841,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override COMPILER_UNITDIR+=../ide
 override COMPILER_UNITDIR+=../ide
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_UNITDIR+=../ide
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override COMPILER_UNITDIR+=../ide
 override COMPILER_UNITDIR+=../ide
 endif
 endif
@@ -1228,7 +1234,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1420,6 +1426,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -1448,10 +1455,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1476,7 +1491,7 @@ else
 TAROPT=vz
 TAROPT=vz
 TAREXT=.tar.gz
 TAREXT=.tar.gz
 endif
 endif
-override REQUIRE_PACKAGES=rtl fv unzip
+override REQUIRE_PACKAGES=rtl rtl-console fv unzip rtl-extra
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1484,8 +1499,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 ifeq ($(FULL_TARGET),i386-go32v2)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1494,8 +1511,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 ifeq ($(FULL_TARGET),i386-win32)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1504,8 +1523,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1514,8 +1535,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
 ifeq ($(FULL_TARGET),i386-freebsd)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1524,8 +1547,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 ifeq ($(FULL_TARGET),i386-beos)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1534,8 +1559,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-haiku)
 ifeq ($(FULL_TARGET),i386-haiku)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1544,8 +1571,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 ifeq ($(FULL_TARGET),i386-netbsd)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1554,8 +1583,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 ifeq ($(FULL_TARGET),i386-solaris)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1564,8 +1595,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 ifeq ($(FULL_TARGET),i386-qnx)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1574,8 +1607,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netware)
 ifeq ($(FULL_TARGET),i386-netware)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1584,8 +1619,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
 ifeq ($(FULL_TARGET),i386-openbsd)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1594,8 +1631,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 ifeq ($(FULL_TARGET),i386-wdosx)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1604,8 +1643,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
 ifeq ($(FULL_TARGET),i386-darwin)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1614,8 +1655,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 ifeq ($(FULL_TARGET),i386-emx)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1624,8 +1667,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
 ifeq ($(FULL_TARGET),i386-watcom)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1634,8 +1679,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
 ifeq ($(FULL_TARGET),i386-netwlibc)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1644,8 +1691,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wince)
 ifeq ($(FULL_TARGET),i386-wince)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1654,8 +1703,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
 ifeq ($(FULL_TARGET),i386-embedded)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1664,8 +1715,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
 ifeq ($(FULL_TARGET),i386-symbian)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1674,8 +1727,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-nativent)
 ifeq ($(FULL_TARGET),i386-nativent)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1684,8 +1739,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-iphonesim)
 ifeq ($(FULL_TARGET),i386-iphonesim)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1694,8 +1751,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-android)
 ifeq ($(FULL_TARGET),i386-android)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1704,8 +1763,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
 ifeq ($(FULL_TARGET),m68k-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1714,8 +1775,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 ifeq ($(FULL_TARGET),m68k-freebsd)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1724,8 +1787,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 ifeq ($(FULL_TARGET),m68k-netbsd)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1734,8 +1799,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 ifeq ($(FULL_TARGET),m68k-amiga)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1744,8 +1811,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
 ifeq ($(FULL_TARGET),m68k-atari)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1754,8 +1823,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 ifeq ($(FULL_TARGET),m68k-openbsd)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1764,8 +1835,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 ifeq ($(FULL_TARGET),m68k-palmos)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1774,8 +1847,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
 ifeq ($(FULL_TARGET),m68k-embedded)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1784,8 +1859,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
 ifeq ($(FULL_TARGET),powerpc-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1794,8 +1871,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1804,8 +1883,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
 ifeq ($(FULL_TARGET),powerpc-amiga)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1814,8 +1895,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 ifeq ($(FULL_TARGET),powerpc-macos)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1824,8 +1907,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
 ifeq ($(FULL_TARGET),powerpc-darwin)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1834,8 +1919,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 ifeq ($(FULL_TARGET),powerpc-morphos)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1844,8 +1931,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
 ifeq ($(FULL_TARGET),powerpc-embedded)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1854,8 +1943,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-wii)
 ifeq ($(FULL_TARGET),powerpc-wii)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1864,8 +1955,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-aix)
 ifeq ($(FULL_TARGET),powerpc-aix)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1874,8 +1967,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
 ifeq ($(FULL_TARGET),sparc-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1884,8 +1979,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 ifeq ($(FULL_TARGET),sparc-netbsd)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1894,8 +1991,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 ifeq ($(FULL_TARGET),sparc-solaris)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1904,8 +2003,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 ifeq ($(FULL_TARGET),sparc-embedded)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1914,8 +2015,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
 ifeq ($(FULL_TARGET),x86_64-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1924,8 +2027,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1934,8 +2039,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-netbsd)
 ifeq ($(FULL_TARGET),x86_64-netbsd)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1944,8 +2051,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-solaris)
 ifeq ($(FULL_TARGET),x86_64-solaris)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1954,8 +2063,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-openbsd)
 ifeq ($(FULL_TARGET),x86_64-openbsd)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1964,8 +2075,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
 ifeq ($(FULL_TARGET),x86_64-darwin)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1974,8 +2087,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 ifeq ($(FULL_TARGET),x86_64-win64)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1984,8 +2099,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 ifeq ($(FULL_TARGET),x86_64-embedded)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -1994,8 +2111,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),arm-linux)
 ifeq ($(FULL_TARGET),arm-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -2004,8 +2123,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 ifeq ($(FULL_TARGET),arm-palmos)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -2014,8 +2135,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),arm-darwin)
 ifeq ($(FULL_TARGET),arm-darwin)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -2024,8 +2147,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),arm-wince)
 ifeq ($(FULL_TARGET),arm-wince)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -2034,8 +2159,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),arm-gba)
 ifeq ($(FULL_TARGET),arm-gba)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -2044,8 +2171,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),arm-nds)
 ifeq ($(FULL_TARGET),arm-nds)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -2054,8 +2183,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
 ifeq ($(FULL_TARGET),arm-embedded)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -2064,8 +2195,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
 ifeq ($(FULL_TARGET),arm-symbian)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -2074,8 +2207,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),arm-android)
 ifeq ($(FULL_TARGET),arm-android)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -2084,8 +2219,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
 ifeq ($(FULL_TARGET),powerpc64-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -2094,8 +2231,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -2104,8 +2243,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -2114,8 +2255,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-aix)
 ifeq ($(FULL_TARGET),powerpc64-aix)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -2124,8 +2267,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),avr-embedded)
 ifeq ($(FULL_TARGET),avr-embedded)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -2134,8 +2279,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),armeb-linux)
 ifeq ($(FULL_TARGET),armeb-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -2144,8 +2291,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
 ifeq ($(FULL_TARGET),armeb-embedded)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -2154,8 +2303,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),mips-linux)
 ifeq ($(FULL_TARGET),mips-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -2164,8 +2315,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -2174,8 +2327,22 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
+REQUIRE_PACKAGES_FV=1
+REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
+endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -2184,8 +2351,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),jvm-android)
 ifeq ($(FULL_TARGET),jvm-android)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -2194,8 +2363,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifeq ($(FULL_TARGET),i8086-msdos)
 ifeq ($(FULL_TARGET),i8086-msdos)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
@@ -2204,8 +2375,10 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_RTL-CONSOLE=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_UNZIP=1
 REQUIRE_PACKAGES_UNZIP=1
+REQUIRE_PACKAGES_RTL-EXTRA=1
 endif
 endif
 ifdef REQUIRE_PACKAGES_RTL
 ifdef REQUIRE_PACKAGES_RTL
 PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
 PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
@@ -2435,6 +2608,44 @@ ifdef UNITDIR_FPMAKE_FPMKUNIT
 override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_FPMKUNIT)
 override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_FPMKUNIT)
 endif
 endif
 endif
 endif
+ifdef REQUIRE_PACKAGES_RTL-CONSOLE
+PACKAGEDIR_RTL-CONSOLE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl-console/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_RTL-CONSOLE),)
+ifneq ($(wildcard $(PACKAGEDIR_RTL-CONSOLE)/units/$(TARGETSUFFIX)),)
+UNITDIR_RTL-CONSOLE=$(PACKAGEDIR_RTL-CONSOLE)/units/$(TARGETSUFFIX)
+else
+UNITDIR_RTL-CONSOLE=$(PACKAGEDIR_RTL-CONSOLE)
+endif
+ifneq ($(wildcard $(PACKAGEDIR_RTL-CONSOLE)/units/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_RTL-CONSOLE=$(PACKAGEDIR_RTL-CONSOLE)/units/$(SOURCESUFFIX)
+else
+ifneq ($(wildcard $(PACKAGEDIR_RTL-CONSOLE)/units_bs/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_RTL-CONSOLE=$(PACKAGEDIR_RTL-CONSOLE)/units_bs/$(SOURCESUFFIX)
+else
+UNITDIR_FPMAKE_RTL-CONSOLE=$(PACKAGEDIR_RTL-CONSOLE)
+endif
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_RTL-CONSOLE)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_RTL-CONSOLE) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL-CONSOLE)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_RTL-CONSOLE=
+UNITDIR_RTL-CONSOLE:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl-console/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_RTL-CONSOLE),)
+UNITDIR_RTL-CONSOLE:=$(firstword $(UNITDIR_RTL-CONSOLE))
+else
+UNITDIR_RTL-CONSOLE=
+endif
+endif
+ifdef UNITDIR_RTL-CONSOLE
+override COMPILER_UNITDIR+=$(UNITDIR_RTL-CONSOLE)
+endif
+ifdef UNITDIR_FPMAKE_RTL-CONSOLE
+override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_RTL-CONSOLE)
+endif
+endif
 ifdef REQUIRE_PACKAGES_FV
 ifdef REQUIRE_PACKAGES_FV
 PACKAGEDIR_FV:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fv/Makefile.fpc,$(PACKAGESDIR))))))
 PACKAGEDIR_FV:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fv/Makefile.fpc,$(PACKAGESDIR))))))
 ifneq ($(PACKAGEDIR_FV),)
 ifneq ($(PACKAGEDIR_FV),)
@@ -2511,6 +2722,44 @@ ifdef UNITDIR_FPMAKE_UNZIP
 override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_UNZIP)
 override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_UNZIP)
 endif
 endif
 endif
 endif
+ifdef REQUIRE_PACKAGES_RTL-EXTRA
+PACKAGEDIR_RTL-EXTRA:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl-extra/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_RTL-EXTRA),)
+ifneq ($(wildcard $(PACKAGEDIR_RTL-EXTRA)/units/$(TARGETSUFFIX)),)
+UNITDIR_RTL-EXTRA=$(PACKAGEDIR_RTL-EXTRA)/units/$(TARGETSUFFIX)
+else
+UNITDIR_RTL-EXTRA=$(PACKAGEDIR_RTL-EXTRA)
+endif
+ifneq ($(wildcard $(PACKAGEDIR_RTL-EXTRA)/units/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_RTL-EXTRA=$(PACKAGEDIR_RTL-EXTRA)/units/$(SOURCESUFFIX)
+else
+ifneq ($(wildcard $(PACKAGEDIR_RTL-EXTRA)/units_bs/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_RTL-EXTRA=$(PACKAGEDIR_RTL-EXTRA)/units_bs/$(SOURCESUFFIX)
+else
+UNITDIR_FPMAKE_RTL-EXTRA=$(PACKAGEDIR_RTL-EXTRA)
+endif
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_RTL-EXTRA)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_RTL-EXTRA) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL-EXTRA)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_RTL-EXTRA=
+UNITDIR_RTL-EXTRA:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl-extra/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_RTL-EXTRA),)
+UNITDIR_RTL-EXTRA:=$(firstword $(UNITDIR_RTL-EXTRA))
+else
+UNITDIR_RTL-EXTRA=
+endif
+endif
+ifdef UNITDIR_RTL-EXTRA
+override COMPILER_UNITDIR+=$(UNITDIR_RTL-EXTRA)
+endif
+ifdef UNITDIR_FPMAKE_RTL-EXTRA
+override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_RTL-EXTRA)
+endif
+endif
 ifndef NOCPUDEF
 ifndef NOCPUDEF
 override FPCOPTDEF=$(ARCH)
 override FPCOPTDEF=$(ARCH)
 endif
 endif
@@ -2653,7 +2902,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 1 - 1
installer/Makefile.fpc

@@ -19,7 +19,7 @@ files_linux=installer.pas
 files_freebsd=installer.pas
 files_freebsd=installer.pas
 
 
 [require]
 [require]
-packages=fv unzip
+packages=rtl-console fv unzip rtl-extra
 
 
 [compiler]
 [compiler]
 unitdir=../ide
 unitdir=../ide

+ 14 - 1
installer/install.dat

@@ -93,6 +93,8 @@ package=ufcl-jsdos.zip[ufcjsdos.zip],Free Component Library (FCL)-Javascript sup
 package=uhermesdos.zip[uhermdos.zip],Port of Hermes graphics library
 package=uhermesdos.zip[uhermdos.zip],Port of Hermes graphics library
 # Dos 33
 # Dos 33
 package=ufppkgdos.zip[ufppkdos.zip],Units for FPPkg packaging support
 package=ufppkgdos.zip[ufppkdos.zip],Units for FPPkg packaging support
+# Dos 34
+package=ufcl-sounddos.zip[ufsnddos.zip],Free Component Library (FCL)-sound files
 
 
 #
 #
 # Win32 packages
 # Win32 packages
@@ -220,7 +222,8 @@ package=units-fcl-res.i386-win32.zip,Free Component Library (FCL)-resources
 package=units-bzip2.i386-win32.zip,Units for bzip2 decompression
 package=units-bzip2.i386-win32.zip,Units for bzip2 decompression
 # Win32-2 30
 # Win32-2 30
 package=units-fcl-js.i386-win32.zip,Free Component Library (FCL)-Javascript support
 package=units-fcl-js.i386-win32.zip,Free Component Library (FCL)-Javascript support
-
+# Win32-2 31
+package=units-fcl-sound.i386-win32.zip,Free Component Library (FCL)-sound files
 
 
 #
 #
 # OS/2 packages
 # OS/2 packages
@@ -278,6 +281,8 @@ package=ufcl-xmlos2.zip[ufclxos2.zip],Free Component Library (FCL)-XML
 package=uhermesos2.zip[uhermos2.zip],Port of Hermes graphics library
 package=uhermesos2.zip[uhermos2.zip],Port of Hermes graphics library
 # OS/2 22
 # OS/2 22
 package=ufppkgos2.zip[ufppkos2.zip],Units for FPPkg packaging support
 package=ufppkgos2.zip[ufppkos2.zip],Units for FPPkg packaging support
+# OS/2 23
+package=uopensslos2.zip[uosslos2.zip],OpenSSL interface units
 
 
 #
 #
 # OS/2 packages 2nd part
 # OS/2 packages 2nd part
@@ -334,6 +339,8 @@ package=ufcl-resos2.zip[ufcleos2.zip],Free Component Library (FCL)-resources
 package=ubzip2os2.zip[ubz2os2.zip],Units for bzip2 decompression
 package=ubzip2os2.zip[ubz2os2.zip],Units for bzip2 decompression
 # OS/2-2 25
 # OS/2-2 25
 package=ufcl-jsos2.zip[ufcjsos2.zip],Free Component Library (FCL)-Javascript support
 package=ufcl-jsos2.zip[ufcjsos2.zip],Free Component Library (FCL)-Javascript support
+# OS/2-2 26
+package=ufcl-soundos2.zip[ufsndos2.zip],Free Component Library (FCL)-sound files
 
 
 
 
 
 
@@ -394,6 +401,8 @@ package=ufcl-xmlemx.zip[ufclxemx.zip],Free Component Library (FCL)-XML
 package=uhermesemx.zip[uhermemx.zip],Port of Hermes graphics library
 package=uhermesemx.zip[uhermemx.zip],Port of Hermes graphics library
 # EMX 22
 # EMX 22
 package=ufppkgemx.zip[ufppkemx.zip],Units for FPPkg packaging support
 package=ufppkgemx.zip[ufppkemx.zip],Units for FPPkg packaging support
+# EMX 23
+package=uopensslemx.zip[uosslemx.zip],OpenSSL interface units
 
 
 #
 #
 # EMX packages 2nd part
 # EMX packages 2nd part
@@ -450,6 +459,8 @@ package=ufcl-resemx.zip[ufcleemx.zip],Free Component Library (FCL)-resources
 package=ubzip2emx.zip[ubz2emx.zip],Units for bzip2 decompression
 package=ubzip2emx.zip[ubz2emx.zip],Units for bzip2 decompression
 # EMX-2 25
 # EMX-2 25
 package=ufcl-jsemx.zip[ufcjsemx.zip],Free Component Library (FCL)-Javascript support
 package=ufcl-jsemx.zip[ufcjsemx.zip],Free Component Library (FCL)-Javascript support
+# EMX-2 26
+package=ufcl-soundemx.zip[ufsndemx.zip],Free Component Library (FCL)-sound files
 
 
 
 
 #
 #
@@ -615,6 +626,8 @@ package=oggvorbis.source.zip[uoggvsrc.zip],OGG Vorbis interface units sources
 package=openal.source.zip[uoalsrc.zip],OpenAL interface units sources
 package=openal.source.zip[uoalsrc.zip],OpenAL interface units sources
 # Source-3 20
 # Source-3 20
 package=openssl.source.zip[uosslsrc.zip],OpenSSL interface units sources
 package=openssl.source.zip[uosslsrc.zip],OpenSSL interface units sources
+# Source-3 21
+package=fcl-sound.source.zip[ufsndsrc.zip],Free Component Library (FCL)-sound files sources
 
 
 defaultcfg=
 defaultcfg=
 #
 #

+ 19 - 7
packages/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -328,8 +328,8 @@ endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 PACKAGEDIR_FPMKUNIT:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fpmkunit/Makefile.fpc,$(PACKAGESDIR))))))
 PACKAGEDIR_FPMKUNIT:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fpmkunit/Makefile.fpc,$(PACKAGESDIR))))))
 ifneq ($(PACKAGEDIR_FPMKUNIT),)
 ifneq ($(PACKAGEDIR_FPMKUNIT),)
 UNITDIR_FPMAKE_FPMKUNIT=$(PACKAGEDIR_FPMKUNIT)/units_bs/$(SOURCESUFFIX)
 UNITDIR_FPMAKE_FPMKUNIT=$(PACKAGEDIR_FPMKUNIT)/units_bs/$(SOURCESUFFIX)
@@ -728,7 +728,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -920,6 +920,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -948,10 +949,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1187,6 +1196,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 endif
 endif
@@ -1376,7 +1388,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 2 - 2
packages/Makefile.fpc

@@ -24,8 +24,8 @@ endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 # Get the location of the bootstrap-fpmkunit units
 # Get the location of the bootstrap-fpmkunit units
 PACKAGEDIR_FPMKUNIT:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fpmkunit/Makefile.fpc,$(PACKAGESDIR))))))
 PACKAGEDIR_FPMKUNIT:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fpmkunit/Makefile.fpc,$(PACKAGESDIR))))))
 ifneq ($(PACKAGEDIR_FPMKUNIT),)
 ifneq ($(PACKAGEDIR_FPMKUNIT),)

+ 57 - 49
packages/Makefile.fpc.fpcmake

@@ -13,57 +13,57 @@ dirs_powerpc64_linux=graph
 dirs_sparc_linux=graph
 dirs_sparc_linux=graph
 dirs_arm_linux=graph
 dirs_arm_linux=graph
 dirs_m68k_linux=graph
 dirs_m68k_linux=graph
-dirs_beos=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
+dirs_beos=rtl-console fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
                gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo bfd aspell svgalib \
                gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo bfd aspell svgalib \
                imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg  httpd22 pxlib numlib \
                imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg  httpd22 pxlib numlib \
                iconvenc
                iconvenc
-dirs_haiku=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
+dirs_haiku=rtl-console fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
                gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo bfd aspell svgalib \
                gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo bfd aspell svgalib \
                imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg  httpd22 pxlib numlib \
                imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg  httpd22 pxlib numlib \
                iconvenc
                iconvenc
-dirs_freebsd=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
+dirs_freebsd=rtl-console fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
                gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo  bfd aspell svgalib \
                gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo  bfd aspell svgalib \
                imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg  httpd22 pxlib numlib \
                imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg  httpd22 pxlib numlib \
                users iconvenc gmp fcl-extra libxml
                users iconvenc gmp fcl-extra libxml
-dirs_darwin=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
-               libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra univint
-dirs_iphonesim=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
-               libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra univint
+dirs_darwin=rtl-console fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
+               libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra univint iosxlocale
+dirs_iphonesim=rtl-console fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
+               libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra univint iosxlocale
 dirs_i386_darwin=graph sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1  httpd22 imlib objcrtl cocoaint opencl openal
 dirs_i386_darwin=graph sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1  httpd22 imlib objcrtl cocoaint opencl openal
 dirs_powerpc_darwin=graph sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1  httpd22 imlib objcrtl cocoaint
 dirs_powerpc_darwin=graph sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1  httpd22 imlib objcrtl cocoaint
 dirs_x86_64_darwin=opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1  httpd22 imlib cocoaint objcrtl
 dirs_x86_64_darwin=opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1  httpd22 imlib cocoaint objcrtl
 dirs_powerpc64_darwin=opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1  httpd22 imlib cocoaint objcrtl
 dirs_powerpc64_darwin=opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1  httpd22 imlib cocoaint objcrtl
 dirs_arm_darwin= httpd22 opengles objcrtl
 dirs_arm_darwin= httpd22 opengles objcrtl
 dirs_i386_iphonesim= httpd22 opengles objcrtl
 dirs_i386_iphonesim= httpd22 opengles objcrtl
-dirs_solaris=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
+dirs_solaris=rtl-console fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
                libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 bfd svgalib fcl-extra \
                libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 bfd svgalib fcl-extra \
                imlib utmp  fpgtk xforms fftw pcap ggi  openssl gnome1  httpd22 numlib iconvenc gtk2 cairo
                imlib utmp  fpgtk xforms fftw pcap ggi  openssl gnome1  httpd22 numlib iconvenc gtk2 cairo
-dirs_netbsd=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
+dirs_netbsd=rtl-console fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
                gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib \
                gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib \
                imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl gnome1  httpd22 pxlib numlib
                imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl gnome1  httpd22 pxlib numlib
-dirs_openbsd=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc  postgres sqlite pthreads imagemagick \
+dirs_openbsd=rtl-console fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc  postgres sqlite pthreads imagemagick \
                gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib \
                gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib \
                imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl gnome1  httpd22 pxlib numlib
                imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl gnome1  httpd22 pxlib numlib
-dirs_linux=fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick \
+dirs_linux=rtl-console fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick \
                gdbint libpng x11 uuid ldap modplug dts mad  gdbm tcl syslog libcurl opengl opencl cairo gtk1 gtk2 librsvg \
                gdbint libpng x11 uuid ldap modplug dts mad  gdbm tcl syslog libcurl opengl opencl cairo gtk1 gtk2 librsvg \
                a52 bfd aspell svgalib newt cdrom users  iconvenc libxml proj4 fcl-extra zorba \
                a52 bfd aspell svgalib newt cdrom users  iconvenc libxml proj4 fcl-extra zorba \
                imlib utmp  fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1  httpd22 \
                imlib utmp  fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1  httpd22 \
                pxlib numlib gmp libsee ptc
                pxlib numlib gmp libsee ptc
-dirs_win32=fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick \
+dirs_win32=rtl-console fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick \
                gdbint libpng mad tcl opengl gtk1 gtk2 librsvg a52 cdrom fpgtk openal fftw lua fcl-extra zorba \
                gdbint libpng mad tcl opengl gtk1 gtk2 librsvg a52 cdrom fpgtk openal fftw lua fcl-extra zorba \
                oggvorbis sdl openssl graph pcap  httpd22 pxlib numlib winceunits cairo libxml \
                oggvorbis sdl openssl graph pcap  httpd22 pxlib numlib winceunits cairo libxml \
                gmp opencl libsee nvapi ptc aspell
                gmp opencl libsee nvapi ptc aspell
-dirs_win64=fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick gdbint \
+dirs_win64=rtl-console fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick gdbint \
                 tcl opengl gtk1 fpgtk fftw sdl openssl cdrom  httpd22 numlib fcl-extra opencl nvapi ptc graph
                 tcl opengl gtk1 fpgtk fftw sdl openssl cdrom  httpd22 numlib fcl-extra opencl nvapi ptc graph
 dirs_wince=winceunits httpd22 fcl-web fastcgi tcl fftw unzip zlib sqlite mysql ibase postgres oracle odbc sdl openssl oggvorbis numlib
 dirs_wince=winceunits httpd22 fcl-web fastcgi tcl fftw unzip zlib sqlite mysql ibase postgres oracle odbc sdl openssl oggvorbis numlib
-dirs_os2=fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib
-dirs_emx=fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib
-dirs_netware=fv zlib unzip
-dirs_netwlibc=fv zlib unzip
+dirs_os2=rtl-console fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib
+dirs_emx=rtl-console fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib
+dirs_netware=rtl-console fv zlib unzip
+dirs_netwlibc=rtl-console fv zlib unzip
 dirs_palmos=palmunits
 dirs_palmos=palmunits
-dirs_go32v2=fv graph unzip gdbint
+dirs_go32v2=rtl-console fv graph unzip gdbint
 dirs_amiga=amunits
 dirs_amiga=amunits
-dirs_morphos=fv opengl sdl
+dirs_morphos=rtl-console fv opengl sdl
 dirs_wii=libogcfpc
 dirs_wii=libogcfpc
 
 
 [install]
 [install]
@@ -144,18 +144,26 @@ cocoaint_release: univint_release
 cocoaint_shared: univint_shared
 cocoaint_shared: univint_shared
 endif
 endif
 
 
+ifneq ($(findstring $(OS_TARGET),darwin iphonesim),)
+iosxlocale_all: univint_all
+iosxlocale_debug: univint_debug
+iosxlocale_smart: univint_smart
+iosxlocale_release: univint_release
+iosxlocle_shared: univint_shared
+endif
+
 ifneq ($(findstring $(OS_TARGET),beos haiku freebsd darwin iphonesim solaris netbsd openbsd linux win32 win64 wince),)
 ifneq ($(findstring $(OS_TARGET),beos haiku freebsd darwin iphonesim solaris netbsd openbsd linux win32 win64 wince),)
-fppkg_all: fcl-base_all fcl-xml_all fcl-process_all fcl-net_all paszlib_all fcl-web_all fpmkunit_all
-fppkg_debug: fcl-base_debug fcl-xml_debug fcl-process_debug fcl-net_debug paszlib_debug fcl-web_debug fpmkunit_debug
-fppkg_smart: fcl-base_smart fcl-xml_smart fcl-process_smart fcl-net_smart paszlib_smart fcl-web_smart fpmkunit_smart
-fppkg_release: fcl-base_release fcl-xml_release fcl-process_release fcl-net_release paszlib_release fcl-web_release fpmkunit_release
-fppkg_shared: fcl-base_shared fcl-xml_shared fcl-process_shared fcl-net_shared paszlib_shared fcl-web_shared fpmkunit_shared
+fppkg_all: fpmkunit_all fcl-base_all fcl-xml_all fcl-process_all fcl-net_all paszlib_all fcl-web_all fpmkunit_all
+fppkg_debug: fpmkunit_debug fcl-base_debug fcl-xml_debug fcl-process_debug fcl-net_debug paszlib_debug fcl-web_debug fpmkunit_debug
+fppkg_smart: fpmkunit_smart fcl-base_smart fcl-xml_smart fcl-process_smart fcl-net_smart paszlib_smart fcl-web_smart fpmkunit_smart
+fppkg_release: fpmkunit_release fcl-base_release fcl-xml_release fcl-process_release fcl-net_release paszlib_release fcl-web_release fpmkunit_release
+fppkg_shared: fpmkunit_shared fcl-base_shared fcl-xml_shared fcl-process_shared fcl-net_shared paszlib_shared fcl-web_shared fpmkunit_shared
 else
 else
-fppkg_all: fcl-base_all fcl-xml_all fcl-process_all paszlib_all fpmkunit_all
-fppkg_debug: fcl-base_debug fcl-xml_debug fcl-process_debug paszlib_debug fpmkunit_debug
-fppkg_smart: fcl-base_smart fcl-xml_smart fcl-process_smart paszlib_smart fpmkunit_smart
-fppkg_release: fcl-base_release fcl-xml_release fcl-process_release paszlib_release fpmkunit_release
-fppkg_shared: fcl-base_shared fcl-xml_shared fcl-process_shared paszlib_shared fpmkunit_shared
+fppkg_all: fpmkunit_all fcl-base_all fcl-xml_all fcl-process_all paszlib_all fpmkunit_all
+fppkg_debug: fpmkunit_debug fcl-base_debug fcl-xml_debug fcl-process_debug paszlib_debug fpmkunit_debug
+fppkg_smart: fpmkunit_smart fcl-base_smart fcl-xml_smart fcl-process_smart paszlib_smart fpmkunit_smart
+fppkg_release: fpmkunit_release fcl-base_release fcl-xml_release fcl-process_release paszlib_release fpmkunit_release
+fppkg_shared: fpmkunit_shared fcl-base_shared fcl-xml_shared fcl-process_shared paszlib_shared fpmkunit_shared
 endif
 endif
 
 
 fcl-xml_all: fcl-base_all fpmkunit_all
 fcl-xml_all: fcl-base_all fpmkunit_all
@@ -373,11 +381,11 @@ opengl_smart: x11_smart fpmkunit_smart
 opengl_debug: x11_debug fpmkunit_debug
 opengl_debug: x11_debug fpmkunit_debug
 opengl_release: x11_release fpmkunit_release
 opengl_release: x11_release fpmkunit_release
 
 
-ptc_all: x11_all fpmkunit_all
-ptc_shared: x11_shared fpmkunit_shared
-ptc_smart: x11_smart fpmkunit_smart
-ptc_debug: x11_debug fpmkunit_debug
-ptc_release: x11_release fpmkunit_release
+ptc_all: x11_all fpmkunit_all rtl-console_all
+ptc_shared: x11_shared fpmkunit_shared rtl-console_shared
+ptc_smart: x11_smart fpmkunit_smart rtl-console_smart
+ptc_debug: x11_debug fpmkunit_debug rtl-console_debug
+ptc_release: x11_release fpmkunit_release rtl-console_release
 else
 else
 sdl_all: fpmkunit_all
 sdl_all: fpmkunit_all
 sdl_shared: fpmkunit_shared
 sdl_shared: fpmkunit_shared
@@ -385,11 +393,11 @@ sdl_smart: fpmkunit_smart
 sdl_debug: fpmkunit_debug
 sdl_debug: fpmkunit_debug
 sdl_release: fpmkunit_release
 sdl_release: fpmkunit_release
 
 
-ptc_all: fpmkunit_all
-ptc_shared: fpmkunit_shared
-ptc_smart: fpmkunit_smart
-ptc_debug: fpmkunit_debug
-ptc_release: fpmkunit_release
+ptc_all: fpmkunit_all rtl-console_all
+ptc_shared: fpmkunit_shared rtl-console_shared
+ptc_smart: fpmkunit_smart rtl-console_smart
+ptc_debug: fpmkunit_debug rtl-console_debug
+ptc_release: fpmkunit_release rtl-console_release
 
 
 opengl_all: fpmkunit_all
 opengl_all: fpmkunit_all
 opengl_shared: fpmkunit_shared
 opengl_shared: fpmkunit_shared
@@ -436,11 +444,11 @@ gnome1_smart: gtk1_smart imlib_smart fpmkunit_smart
 gnome1_debug: gtk1_debug imlib_debug fpmkunit_debug
 gnome1_debug: gtk1_debug imlib_debug fpmkunit_debug
 gnome1_release: gtk1_release imlib_release fpmkunit_release
 gnome1_release: gtk1_release imlib_release fpmkunit_release
 
 
-ptc_all: hermes_all fcl-base_all
-ptc_shared: hermes_shared fcl-base_shared
-ptc_smart: hermes_smart fcl-base_smart
-ptc_debug: hermes_debug fcl-base_debug
-ptc_release: hermes_release fcl-base_release
+ptc_all: hermes_all fcl-base_all rtl-console_all
+ptc_shared: hermes_shared fcl-base_shared rtl-console_shared
+ptc_smart: hermes_smart fcl-base_smart rtl-console_smart
+ptc_debug: hermes_debug fcl-base_debug rtl-console_debug
+ptc_release: hermes_release fcl-base_release rtl-console_release
 
 
 librsvg_all: gtk2_all fpmkunit_all
 librsvg_all: gtk2_all fpmkunit_all
 librsvg_shared: gtk2_shared fpmkunit_shared
 librsvg_shared: gtk2_shared fpmkunit_shared
@@ -702,11 +710,11 @@ gmp_smart: fpmkunit_smart
 gmp_debug: fpmkunit_debug
 gmp_debug: fpmkunit_debug
 gmp_release: fpmkunit_release
 gmp_release: fpmkunit_release
 
 
-fv_all: fpmkunit_all
-fv_shared: fpmkunit_shared
-fv_smart: fpmkunit_smart
-fv_debug: fpmkunit_debug
-fv_release: fpmkunit_release
+fv_all: fpmkunit_all rtl-console_all
+fv_shared: fpmkunit_shared rtl-console_shared
+fv_smart: fpmkunit_smart rtl-console_smart
+fv_debug: fpmkunit_debug rtl-console_debug
+fv_release: fpmkunit_release rtl-console_release
 
 
 graph_all: fpmkunit_all
 graph_all: fpmkunit_all
 graph_shared: fpmkunit_shared
 graph_shared: fpmkunit_shared

+ 24 - 7
packages/a52/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 endif
 override PACKAGE_NAME=a52
 override PACKAGE_NAME=a52
 override PACKAGE_VERSION=2.7.1
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 2 - 2
packages/a52/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 fpcdir=../..
 
 
 [prerules]
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 
 [rules]
 [rules]
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.

+ 24 - 7
packages/amunits/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 endif
 override PACKAGE_NAME=amunits
 override PACKAGE_NAME=amunits
 override PACKAGE_VERSION=2.7.1
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 2 - 2
packages/amunits/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 fpcdir=../..
 
 
 [prerules]
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 
 [rules]
 [rules]
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.

+ 1 - 1
packages/amunits/src/otherlibs/mui.pas

@@ -3493,7 +3493,7 @@ PROCEDURE MUI_RejectIDCMP(obj : pObject_; flags : ULONG);
 PROCEDURE MUI_Redraw(obj : pObject_; flags : ULONG);
 PROCEDURE MUI_Redraw(obj : pObject_; flags : ULONG);
 FUNCTION MUI_CreateCustomClass(base : pLibrary; supername : pChar; supermcc : pMUI_CustomClass; datasize : LONGINT; dispatcher : POINTER) : pMUI_CustomClass;
 FUNCTION MUI_CreateCustomClass(base : pLibrary; supername : pChar; supermcc : pMUI_CustomClass; datasize : LONGINT; dispatcher : POINTER) : pMUI_CustomClass;
 FUNCTION MUI_DeleteCustomClass(mcc : pMUI_CustomClass) : BOOLEAN;
 FUNCTION MUI_DeleteCustomClass(mcc : pMUI_CustomClass) : BOOLEAN;
-FUNCTION MUI_MakeObjectA(typ: LONGINT; params : pULONG) : pULONG;
+FUNCTION MUI_MakeObjectA(typ: LONGINT; params : pULONG) : pObject_;
 FUNCTION MUI_Layout(obj : pObject_; l : LONGINT; t : LONGINT; w : LONGINT; h : LONGINT; flags : ULONG) : BOOLEAN;
 FUNCTION MUI_Layout(obj : pObject_; l : LONGINT; t : LONGINT; w : LONGINT; h : LONGINT; flags : ULONG) : BOOLEAN;
 FUNCTION MUI_ObtainPen(mri : pMUI_RenderInfo; spec : pMUI_PenSpec; flags : ULONG) : LONGINT;
 FUNCTION MUI_ObtainPen(mri : pMUI_RenderInfo; spec : pMUI_PenSpec; flags : ULONG) : LONGINT;
 PROCEDURE MUI_ReleasePen(mri : pMUI_RenderInfo; pen : LONGINT);
 PROCEDURE MUI_ReleasePen(mri : pMUI_RenderInfo; pen : LONGINT);

+ 29 - 5
packages/amunits/src/utilunits/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -531,6 +531,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_UNITS+=amigautils consoleio deadkeys doublebuffer easyasl hisoft linklist longarray msgbox pastoc pcq systemvartags tagsarray timerutils vartags wbargs
 override TARGET_UNITS+=amigautils consoleio deadkeys doublebuffer easyasl hisoft linklist longarray msgbox pastoc pcq systemvartags tagsarray timerutils vartags wbargs
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_UNITS+=amigautils consoleio deadkeys doublebuffer easyasl hisoft linklist longarray msgbox pastoc pcq systemvartags tagsarray timerutils vartags wbargs
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override TARGET_UNITS+=amigautils consoleio deadkeys doublebuffer easyasl hisoft linklist longarray msgbox pastoc pcq systemvartags tagsarray timerutils vartags wbargs
 override TARGET_UNITS+=amigautils consoleio deadkeys doublebuffer easyasl hisoft linklist longarray msgbox pastoc pcq systemvartags tagsarray timerutils vartags wbargs
 endif
 endif
@@ -751,6 +754,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override COMPILER_INCLUDEDIR+=../inc
 override COMPILER_INCLUDEDIR+=../inc
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_INCLUDEDIR+=../inc
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override COMPILER_INCLUDEDIR+=../inc
 override COMPILER_INCLUDEDIR+=../inc
 endif
 endif
@@ -970,6 +976,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override COMPILER_UNITDIR+=../units
 override COMPILER_UNITDIR+=../units
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_UNITDIR+=../units
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override COMPILER_UNITDIR+=../units
 override COMPILER_UNITDIR+=../units
 endif
 endif
@@ -1189,6 +1198,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override COMPILER_SOURCEDIR+=.
 override COMPILER_SOURCEDIR+=.
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_SOURCEDIR+=.
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override COMPILER_SOURCEDIR+=.
 override COMPILER_SOURCEDIR+=.
 endif
 endif
@@ -1579,7 +1591,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1771,6 +1783,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -1799,10 +1812,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -2038,6 +2059,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 endif
 endif
@@ -2227,7 +2251,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 2 - 2
packages/amunits/src/utilunits/linklist.pas

@@ -759,9 +759,9 @@ begin
       { I don't want end of lines here (for use with amiga listviews)
       { I don't want end of lines here (for use with amiga listviews)
         just change this if you need newline characters.
         just change this if you need newline characters.
       }
       }
-         Read(Inf, buffer);
+         Read(Inf, buf);
          tempnode := AddNewNode(thelist,buffer);
          tempnode := AddNewNode(thelist,buffer);
-         Readln(inf, buffer);
+         Readln(inf, buf);
       end;
       end;
       CLose(Inf);
       CLose(Inf);
       FileToList := true;
       FileToList := true;

+ 24 - 7
packages/aspell/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 endif
 override PACKAGE_NAME=aspell
 override PACKAGE_NAME=aspell
 override PACKAGE_VERSION=2.7.1
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 2 - 2
packages/aspell/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 fpcdir=../..
 
 
 [prerules]
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 
 [rules]
 [rules]
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.

+ 24 - 7
packages/bfd/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 endif
 override PACKAGE_NAME=bfd
 override PACKAGE_NAME=bfd
 override PACKAGE_VERSION=2.7.1
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 2 - 2
packages/bfd/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 fpcdir=../..
 
 
 [prerules]
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 
 [rules]
 [rules]
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.

+ 24 - 7
packages/bzip2/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 endif
 override PACKAGE_NAME=bzip2
 override PACKAGE_NAME=bzip2
 override PACKAGE_VERSION=2.7.1
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 2 - 2
packages/bzip2/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 fpcdir=../..
 
 
 [prerules]
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 
 [rules]
 [rules]
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.

+ 1 - 1
packages/bzip2/fpmake.pp

@@ -20,7 +20,6 @@ begin
 
 
     P.Version:='2.7.1';
     P.Version:='2.7.1';
 
 
-    P.Version:='2.7.1';
     P.Author := 'Library: Julian R. Seward, header: Daniel Mantione';
     P.Author := 'Library: Julian R. Seward, header: Daniel Mantione';
     // 3 clause becaue "prominent notice" is not required.
     // 3 clause becaue "prominent notice" is not required.
     P.License := 'Library: 3 clause BSD, header: 3 clause BSD ';
     P.License := 'Library: 3 clause BSD, header: 3 clause BSD ';
@@ -32,6 +31,7 @@ begin
 
 
     P.SourcePath.Add('src');
     P.SourcePath.Add('src');
     P.IncludePath.Add('src');
     P.IncludePath.Add('src');
+    P.Dependencies.Add('rtl-extra');
 
 
     T:=P.Targets.AddUnit('bzip2comn.pp');
     T:=P.Targets.AddUnit('bzip2comn.pp');
     T:=P.Targets.AddUnit('bzip2.pas');
     T:=P.Targets.AddUnit('bzip2.pas');

+ 24 - 7
packages/cairo/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 endif
 override PACKAGE_NAME=cairo
 override PACKAGE_NAME=cairo
 override PACKAGE_VERSION=2.7.1
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 2 - 2
packages/cairo/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 fpcdir=../..
 
 
 [prerules]
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 
 [rules]
 [rules]
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.

+ 1 - 0
packages/cairo/fpmake.pp

@@ -34,6 +34,7 @@ begin
     P.Dependencies.Add('fcl-image');
     P.Dependencies.Add('fcl-image');
 
 
     T:=P.Targets.AddUnit('cairo.pp');
     T:=P.Targets.AddUnit('cairo.pp');
+    T:=P.Targets.AddUnit('cairogobject.pp');
     T:=P.Targets.AddUnit('cairoft.pp');
     T:=P.Targets.AddUnit('cairoft.pp');
     with T.Dependencies do
     with T.Dependencies do
       begin
       begin

+ 401 - 63
packages/cairo/src/cairo.pp

@@ -36,17 +36,26 @@ unit Cairo;
  *
  *
  * Contributor(s):
  * Contributor(s):
  *	Carl D. Worth <[email protected]>
  *	Carl D. Worth <[email protected]>
-
+ *
  *  This FreePascal binding generated August 26, 2005 
  *  This FreePascal binding generated August 26, 2005 
  *  by Jeffrey Pohlmeyer <[email protected]>
  *  by Jeffrey Pohlmeyer <[email protected]>
-
-  - Updated to cairo version 1.4
-  - Grouped OS specific fuctions in separated units
-  - Organized the functions by group and ordered exactly as the c header
-  - Cleared parameter list syntax according to pascal standard
-
-  By Luiz Américo Pereira Câmara
-  October 2007
+ *
+ * - Updated to cairo version 1.4
+ * - Grouped OS specific fuctions in separated units
+ * - Organized the functions by group and ordered exactly as the c header
+ * - Cleared parameter list syntax according to pascal standard
+ *
+ * By Luiz Américo Pereira Câmara
+ * October 2007
+ *
+ * - Review of the unit according of cairo.h, cairo-svg.h, 
+ *   cairo-pdf.h and cairo-ps.h
+ * - Adding structures, enumerations, and methods missing.
+ * - Translation and addition of cairo-tee.h, cairo-script.h,
+ *   cairo-script-interpreter.h and cairo-gobject.h
+ * - Updated to cairo version 1.12
+ * By Valdinilson Lourenço da Cunha - November 2012
+ * 
 *)
 *)
 
 
 {$mode ObjFpc}
 {$mode ObjFpc}
@@ -82,8 +91,10 @@ const
 {$ENDIF}
 {$ENDIF}
 
 
 type
 type
+  GTYPE= culong; // =gulong from glib2, which we can't include due dependencies.
   cairo_status_t = (
   cairo_status_t = (
     CAIRO_STATUS_SUCCESS = 0,
     CAIRO_STATUS_SUCCESS = 0,
+
     CAIRO_STATUS_NO_MEMORY,
     CAIRO_STATUS_NO_MEMORY,
     CAIRO_STATUS_INVALID_RESTORE,
     CAIRO_STATUS_INVALID_RESTORE,
     CAIRO_STATUS_INVALID_POP_GROUP,
     CAIRO_STATUS_INVALID_POP_GROUP,
@@ -102,7 +113,27 @@ type
     CAIRO_STATUS_INVALID_FORMAT,
     CAIRO_STATUS_INVALID_FORMAT,
     CAIRO_STATUS_INVALID_VISUAL,
     CAIRO_STATUS_INVALID_VISUAL,
     CAIRO_STATUS_FILE_NOT_FOUND,
     CAIRO_STATUS_FILE_NOT_FOUND,
-    CAIRO_STATUS_INVALID_DASH
+    CAIRO_STATUS_INVALID_DASH,
+    CAIRO_STATUS_INVALID_DSC_COMMENT,
+    CAIRO_STATUS_INVALID_INDEX,
+    CAIRO_STATUS_CLIP_NOT_REPRESENTABLE,
+    CAIRO_STATUS_TEMP_FILE_ERROR,
+    CAIRO_STATUS_INVALID_STRIDE,
+    CAIRO_STATUS_FONT_TYPE_MISMATCH,
+    CAIRO_STATUS_USER_FONT_IMMUTABLE,
+    CAIRO_STATUS_USER_FONT_ERROR,
+    CAIRO_STATUS_NEGATIVE_COUNT,
+    CAIRO_STATUS_INVALID_CLUSTERS,
+    CAIRO_STATUS_INVALID_SLANT,
+    CAIRO_STATUS_INVALID_WEIGHT,
+    CAIRO_STATUS_INVALID_SIZE,
+    CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED,
+    CAIRO_STATUS_DEVICE_TYPE_MISMATCH,
+    CAIRO_STATUS_DEVICE_ERROR,
+    CAIRO_STATUS_INVALID_MESH_CONSTRUCTION,
+    CAIRO_STATUS_DEVICE_FINISHED,
+
+    CAIRO_STATUS_LAST_STATUS
   );
   );
 
 
   cairo_operator_t = (
   cairo_operator_t = (
@@ -119,14 +150,32 @@ type
     CAIRO_OPERATOR_DEST_ATOP,
     CAIRO_OPERATOR_DEST_ATOP,
     CAIRO_OPERATOR_XOR,
     CAIRO_OPERATOR_XOR,
     CAIRO_OPERATOR_ADD,
     CAIRO_OPERATOR_ADD,
-    CAIRO_OPERATOR_SATURATE
+    CAIRO_OPERATOR_SATURATE,
+	CAIRO_OPERATOR_MULTIPLY,
+    CAIRO_OPERATOR_SCREEN,
+    CAIRO_OPERATOR_OVERLAY,
+    CAIRO_OPERATOR_DARKEN,
+    CAIRO_OPERATOR_LIGHTEN,
+    CAIRO_OPERATOR_COLOR_DODGE,
+    CAIRO_OPERATOR_COLOR_BURN,
+    CAIRO_OPERATOR_HARD_LIGHT,
+    CAIRO_OPERATOR_SOFT_LIGHT,
+    CAIRO_OPERATOR_DIFFERENCE,
+    CAIRO_OPERATOR_EXCLUSION,
+    CAIRO_OPERATOR_HSL_HUE,
+    CAIRO_OPERATOR_HSL_SATURATION,
+    CAIRO_OPERATOR_HSL_COLOR,
+    CAIRO_OPERATOR_HSL_LUMINOSITY
   );
   );
 
 
   cairo_antialias_t = (
   cairo_antialias_t = (
     CAIRO_ANTIALIAS_DEFAULT,
     CAIRO_ANTIALIAS_DEFAULT,
     CAIRO_ANTIALIAS_NONE,
     CAIRO_ANTIALIAS_NONE,
     CAIRO_ANTIALIAS_GRAY,
     CAIRO_ANTIALIAS_GRAY,
-    CAIRO_ANTIALIAS_SUBPIXEL
+    CAIRO_ANTIALIAS_SUBPIXEL,
+	CAIRO_ANTIALIAS_FAST,
+    CAIRO_ANTIALIAS_GOOD,
+    CAIRO_ANTIALIAS_BEST
   );
   );
 
 
   cairo_fill_rule_t = (
   cairo_fill_rule_t = (
@@ -187,16 +236,19 @@ type
   );
   );
 
 
   cairo_content_t = (
   cairo_content_t = (
-    CAIRO_CONTENT_COLOR = $1000,
-    CAIRO_CONTENT_ALPHA = $2000,
+    CAIRO_CONTENT_COLOR       = $1000,
+    CAIRO_CONTENT_ALPHA       = $2000,
     CAIRO_CONTENT_COLOR_ALPHA = $3000
     CAIRO_CONTENT_COLOR_ALPHA = $3000
   );
   );
 
 
   cairo_format_t = (
   cairo_format_t = (
-    CAIRO_FORMAT_ARGB32,
-    CAIRO_FORMAT_RGB24,
-    CAIRO_FORMAT_A8,
-    CAIRO_FORMAT_A1
+    CAIRO_FORMAT_INVALID   = -1,
+    CAIRO_FORMAT_ARGB32    =  0,
+    CAIRO_FORMAT_RGB24     =  1,
+    CAIRO_FORMAT_A8        =  2,
+    CAIRO_FORMAT_A1        =  3,
+    CAIRO_FORMAT_RGB16_565 =  4,
+    CAIRO_FORMAT_RGB30     =  5
   );
   );
 
 
   cairo_extend_t = (
   cairo_extend_t = (
@@ -219,14 +271,17 @@ type
     CAIRO_FONT_TYPE_TOY,
     CAIRO_FONT_TYPE_TOY,
     CAIRO_FONT_TYPE_FT,
     CAIRO_FONT_TYPE_FT,
     CAIRO_FONT_TYPE_WIN32,
     CAIRO_FONT_TYPE_WIN32,
-    CAIRO_FONT_TYPE_ATSUI
+    CAIRO_FONT_TYPE_QUARTZ,
+    CAIRO_FONT_TYPE_USER
   );
   );
   
   
   cairo_pattern_type_t = (
   cairo_pattern_type_t = (
     CAIRO_PATTERN_TYPE_SOLID,
     CAIRO_PATTERN_TYPE_SOLID,
     CAIRO_PATTERN_TYPE_SURFACE,
     CAIRO_PATTERN_TYPE_SURFACE,
     CAIRO_PATTERN_TYPE_LINEAR,
     CAIRO_PATTERN_TYPE_LINEAR,
-    CAIRO_PATTERN_TYPE_RADIAL
+    CAIRO_PATTERN_TYPE_RADIAL,
+    CAIRO_PATTERN_TYPE_MESH,
+    CAIRO_PATTERN_TYPE_RASTER_SOURCE
   );
   );
   
   
   cairo_surface_type_t = (
   cairo_surface_type_t = (
@@ -241,46 +296,138 @@ type
     CAIRO_SURFACE_TYPE_BEOS,
     CAIRO_SURFACE_TYPE_BEOS,
     CAIRO_SURFACE_TYPE_DIRECTFB,
     CAIRO_SURFACE_TYPE_DIRECTFB,
     CAIRO_SURFACE_TYPE_SVG,
     CAIRO_SURFACE_TYPE_SVG,
-    CAIRO_SURFACE_TYPE_OS2
+    CAIRO_SURFACE_TYPE_OS2,
+    CAIRO_SURFACE_TYPE_WIN32_PRINTING,
+    CAIRO_SURFACE_TYPE_QUARTZ_IMAGE,
+    CAIRO_SURFACE_TYPE_SCRIPT,
+    CAIRO_SURFACE_TYPE_QT,
+    CAIRO_SURFACE_TYPE_RECORDING,
+    CAIRO_SURFACE_TYPE_VG,
+    CAIRO_SURFACE_TYPE_GL,
+    CAIRO_SURFACE_TYPE_DRM,
+    CAIRO_SURFACE_TYPE_TEE,
+    CAIRO_SURFACE_TYPE_XML,
+    CAIRO_SURFACE_TYPE_SKIA,
+    CAIRO_SURFACE_TYPE_SUBSURFACE,
+    CAIRO_SURFACE_TYPE_COGL
   );
   );
   
   
   cairo_svg_version_t = (
   cairo_svg_version_t = (
     CAIRO_SVG_VERSION_1_1,
     CAIRO_SVG_VERSION_1_1,
     CAIRO_SVG_VERSION_1_2
     CAIRO_SVG_VERSION_1_2
   );
   );
-  pcairo_svg_version_t = ^cairo_svg_version_t;
-  ppcairo_svg_version_t = pcairo_svg_version_t;
-
-  Pcairo_surface_t = ^cairo_surface_t;
-  PPcairo_surface_t = ^Pcairo_surface_t;
-  Pcairo_t = ^cairo_t;
-  Pcairo_pattern_t = ^cairo_pattern_t;
-  Pcairo_font_options_t = ^cairo_font_options_t;
-  Pcairo_font_face_t = ^cairo_font_face_t;
-  Pcairo_scaled_font_t = ^cairo_scaled_font_t;
-  Pcairo_bool_t = ^cairo_bool_t;
-  cairo_bool_t = LongInt;
-  Pcairo_matrix_t = ^cairo_matrix_t;
-  Pcairo_user_data_key_t = ^cairo_user_data_key_t;
-  Pcairo_glyph_t = ^cairo_glyph_t;
-  Pcairo_text_extents_t = ^cairo_text_extents_t;
-  Pcairo_font_extents_t = ^cairo_font_extents_t;
-  Pcairo_path_data_type_t = ^cairo_path_data_type_t;
-  Pcairo_path_data_t = ^cairo_path_data_t;
-  Pcairo_path_t = ^cairo_path_t;
-  Pcairo_rectangle_t = ^cairo_rectangle_t;
-  Pcairo_rectangle_list_t =^cairo_rectangle_list_t;
-
-  cairo_destroy_func_t = procedure (data: Pointer); cdecl;
-  cairo_write_func_t = function (closure: Pointer; data: PByte; length: LongWord): cairo_status_t; cdecl;
-  cairo_read_func_t = function (closure: Pointer; data: PByte; length: LongWord): cairo_status_t; cdecl;
-
-  cairo_t              = record {OPAQUE} end;
-  cairo_surface_t      = record {OPAQUE} end;
-  cairo_pattern_t      = record {OPAQUE} end;
-  cairo_scaled_font_t  = record {OPAQUE} end;
-  cairo_font_face_t    = record {OPAQUE} end;
-  cairo_font_options_t = record {OPAQUE} end;
+  
+  cairo_device_type_t = (
+    CAIRO_DEVICE_TYPE_INVALID = -1,
+    CAIRO_DEVICE_TYPE_DRM,
+    CAIRO_DEVICE_TYPE_GL,
+    CAIRO_DEVICE_TYPE_SCRIPT,
+    CAIRO_DEVICE_TYPE_XCB,
+    CAIRO_DEVICE_TYPE_XLIB,
+    CAIRO_DEVICE_TYPE_XML,
+    CAIRO_DEVICE_TYPE_COGL,
+    CAIRO_DEVICE_TYPE_WIN32   
+  );
+  
+  cairo_surface_observer_mode_t = (
+	CAIRO_SURFACE_OBSERVER_NORMAL = 0,
+	CAIRO_SURFACE_OBSERVER_RECORD_OPERATIONS = $1
+  );
+  
+  cairo_region_overlap_t = (
+    CAIRO_REGION_OVERLAP_IN,		(* completely inside region *)
+    CAIRO_REGION_OVERLAP_OUT,		(* completely outside region *)
+    CAIRO_REGION_OVERLAP_PART		(* partly inside region *)
+  );
+
+  cairo_text_cluster_flags_t = (
+    CAIRO_TEXT_CLUSTER_FLAG_BACKWARD = $00000001
+  );
+
+  cairo_pdf_version_t = (
+    CAIRO_PDF_VERSION_1_4,
+    CAIRO_PDF_VERSION_1_5
+  );
+
+  cairo_ps_level_t = (
+    CAIRO_PS_LEVEL_2,
+    CAIRO_PS_LEVEL_3
+  );
+  
+  cairo_script_mode_t = (
+    CAIRO_SCRIPT_MODE_ASCII,
+    CAIRO_SCRIPT_MODE_BINARY
+  );
+
+  Pcairo_script_mode_t                = ^cairo_script_mode_t;
+  Pcairo_script_interpreter_t         = ^cairo_script_interpreter_t;
+  Pcairo_ps_level_t                   = ^cairo_ps_level_t;
+  PPcairo_ps_level_t                  = ^Pcairo_ps_level_t;
+  Pcairo_pdf_version_t                = ^cairo_pdf_version_t;
+  PPcairo_pdf_version_t               = ^Pcairo_pdf_version_t;
+  Pcairo_region_t                     = ^cairo_region_t;
+  Pcairo_device_t                     = ^cairo_device_t;
+  Pcairo_device_type_t                = ^cairo_device_type_t;
+  Pcairo_region_overlap_t             = ^cairo_region_overlap_t;
+  Pcairo_surface_observer_mode_t      = ^cairo_surface_observer_mode_t;
+  Pcairo_svg_version_t                = ^cairo_svg_version_t;
+  PPcairo_svg_version_t               = Pcairo_svg_version_t;
+  Pcairo_surface_t                    = ^cairo_surface_t;
+  PPcairo_surface_t                   = ^Pcairo_surface_t;
+  Pcairo_t                            = ^cairo_t;
+  Pcairo_pattern_t                    = ^cairo_pattern_t;
+  Pcairo_font_options_t               = ^cairo_font_options_t;
+  Pcairo_font_face_t                  = ^cairo_font_face_t;
+  Pcairo_scaled_font_t                = ^cairo_scaled_font_t;
+  Pcairo_bool_t                       = ^cairo_bool_t;
+  cairo_bool_t                        = LongInt;
+  Pcairo_matrix_t                     = ^cairo_matrix_t;
+  Pcairo_user_data_key_t              = ^cairo_user_data_key_t;
+  Pcairo_glyph_t                      = ^cairo_glyph_t;
+  PPcairo_glyph_t                     = ^Pcairo_glyph_t;
+  Pcairo_text_extents_t               = ^cairo_text_extents_t;
+  Pcairo_font_extents_t               = ^cairo_font_extents_t;
+  Pcairo_path_data_type_t             = ^cairo_path_data_type_t;
+  Pcairo_path_data_t                  = ^cairo_path_data_t;
+  Pcairo_path_t                       = ^cairo_path_t;
+  Pcairo_rectangle_t                  = ^cairo_rectangle_t;
+  Pcairo_rectangle_int_t              = ^cairo_rectangle_int_t;
+  Pcairo_rectangle_list_t             = ^cairo_rectangle_list_t;
+  Pcairo_text_cluster_t               = ^cairo_text_cluster_t;
+  PPcairo_text_cluster_t              = ^Pcairo_text_cluster_t;
+  Pcairo_text_cluster_flags_t         = ^cairo_text_cluster_flags_t;
+  Pcairo_script_interpreter_hooks_t   = ^cairo_script_interpreter_hooks_t;
+  Pcairo_raster_source_acquire_func_t = ^cairo_raster_source_acquire_func_t;
+  Pcairo_raster_source_release_func_t = ^cairo_raster_source_release_func_t;
+  
+  cairo_destroy_func_t                           = procedure (data: Pointer); cdecl;
+  cairo_write_func_t                             = function (closure: Pointer; data: PByte; length: LongWord): cairo_status_t; cdecl;
+  cairo_read_func_t                              = function (closure: Pointer; data: PByte; length: LongWord): cairo_status_t; cdecl;
+  cairo_user_scaled_font_init_func_t             = function (scaled_font: Pcairo_scaled_font_t; cr: Pcairo_t; extents: Pcairo_font_extents_t): cairo_status_t; cdecl;
+  cairo_user_scaled_font_render_glyph_func_t     = function (scaled_font: Pcairo_scaled_font_t; glyph: LongWord; cr: Pcairo_t; extents: Pcairo_font_extents_t): cairo_status_t; cdecl;
+  cairo_user_scaled_font_text_to_glyphs_func_t   = function (scaled_font: Pcairo_scaled_font_t; utf8: PChar; utf8_len: LongInt; glyphs: PPcairo_glyph_t; num_glyphs: PLongint; clusters: PPcairo_text_cluster_t; num_clusters: PLongint; cluster_flags: Pcairo_text_cluster_flags_t): cairo_status_t; cdecl;
+  cairo_user_scaled_font_unicode_to_glyph_func_t = function (scaled_font: Pcairo_scaled_font_t; unicode: LongWord; glyph_index: PLongWord): cairo_status_t; cdecl;
+  cairo_surface_observer_callback_t              = procedure (observer, target: Pcairo_surface_t; data: Pointer); cdecl;
+  cairo_raster_source_acquire_func_t             = function (pattern: Pcairo_pattern_t; callback_data: Pointer; target: Pcairo_surface_t; const extents: Pcairo_rectangle_int_t): Pcairo_surface_t;
+  cairo_raster_source_release_func_t             = procedure (pattern: Pcairo_pattern_t; callback_data: Pointer; surface: Pcairo_surface_t); cdecl;
+  cairo_raster_source_snapshot_func_t            = function (pattern: Pcairo_pattern_t; callback_data: Pointer): cairo_status_t; cdecl;
+  cairo_raster_source_copy_func_t                = function (pattern: Pcairo_pattern_t; callback_data: Pointer; const other: Pcairo_pattern_t): cairo_status_t; cdecl;
+  cairo_raster_source_finish_func_t              = procedure (pattern: Pcairo_pattern_t; callback_data: Pointer); cdecl;
+  csi_destroy_func_t                             = procedure (closure: Pointer; ptr: Pointer); cdecl;
+  csi_surface_create_func_t                      = function (closure: Pointer; content: cairo_content_t; width, height: double; uid: LongInt): Pcairo_surface_t; cdecl;
+  csi_context_create_func_t                      = function (closure: Pointer; surface: Pcairo_surface_t): Pcairo_t; cdecl;
+  csi_show_page_func_t                           = procedure (closure: Pointer; cr: Pcairo_t); cdecl;
+  csi_copy_page_func_t                           = procedure (closure: Pointer; cr: Pcairo_t); cdecl;
+
+  cairo_t                    = record {OPAQUE} end;
+  cairo_device_t             = record {OPAQUE} end;
+  cairo_region_t             = record {OPAQUE} end;
+  cairo_surface_t            = record {OPAQUE} end;
+  cairo_pattern_t            = record {OPAQUE} end;
+  cairo_scaled_font_t        = record {OPAQUE} end;
+  cairo_font_face_t          = record {OPAQUE} end;
+  cairo_font_options_t       = record {OPAQUE} end;
+  cairo_script_interpreter_t = record {OPAQUE} end;
 
 
   cairo_matrix_t = record
   cairo_matrix_t = record
     xx : Double;
     xx : Double;
@@ -340,12 +487,30 @@ type
     x, y, width, height: Double;
     x, y, width, height: Double;
   end;
   end;
   
   
+  cairo_rectangle_int_t = record
+    x, y, width, height: LongInt;
+  end;
+  
   cairo_rectangle_list_t = record
   cairo_rectangle_list_t = record
     status: cairo_status_t;
     status: cairo_status_t;
     rectangles: Pcairo_rectangle_t;
     rectangles: Pcairo_rectangle_t;
     num_rectangles: LongInt;
     num_rectangles: LongInt;
   end;
   end;
   
   
+  cairo_text_cluster_t = record
+    num_bytes, num_glyphs: LongInt;
+  end;
+  
+  cairo_script_interpreter_hooks_t = record
+    closure: Pointer;
+    surface_create: csi_surface_create_func_t;
+    surface_destroy: csi_destroy_func_t;
+    context_create: csi_context_create_func_t;
+    context_destroy: csi_destroy_func_t;
+    show_page: csi_show_page_func_t;
+    copy_page: csi_copy_page_func_t;
+  end;
+  
 function cairo_version: LongInt; cdecl; external LIB_CAIRO;
 function cairo_version: LongInt; cdecl; external LIB_CAIRO;
 function cairo_version_string: PChar; cdecl; external LIB_CAIRO;
 function cairo_version_string: PChar; cdecl; external LIB_CAIRO;
 //Helper function to retrieve decoded version
 //Helper function to retrieve decoded version
@@ -406,6 +571,7 @@ procedure cairo_rel_line_to(cr: Pcairo_t; dx, dy: Double); cdecl; external LIB_C
 procedure cairo_rel_curve_to(cr: Pcairo_t; dx1, dy1, dx2, dy2, dx3, dy3: Double); cdecl; external LIB_CAIRO;
 procedure cairo_rel_curve_to(cr: Pcairo_t; dx1, dy1, dx2, dy2, dx3, dy3: Double); cdecl; external LIB_CAIRO;
 procedure cairo_rectangle(cr: Pcairo_t; x, y, width, height: Double); cdecl; external LIB_CAIRO;
 procedure cairo_rectangle(cr: Pcairo_t; x, y, width, height: Double); cdecl; external LIB_CAIRO;
 procedure cairo_close_path(cr: Pcairo_t); cdecl; external LIB_CAIRO;
 procedure cairo_close_path(cr: Pcairo_t); cdecl; external LIB_CAIRO;
+procedure cairo_path_extents (cr: Pcairo_t; x1, y1, x2, y2: PDouble); cdecl; external LIB_CAIRO;
 
 
 (* Painting functions *)
 (* Painting functions *)
 
 
@@ -424,6 +590,7 @@ procedure cairo_show_page(cr: Pcairo_t); cdecl; external LIB_CAIRO;
 
 
 function  cairo_in_stroke(cr: Pcairo_t; x, y: Double): cairo_bool_t; cdecl; external LIB_CAIRO;
 function  cairo_in_stroke(cr: Pcairo_t; x, y: Double): cairo_bool_t; cdecl; external LIB_CAIRO;
 function  cairo_in_fill(cr: Pcairo_t; x, y: Double): cairo_bool_t; cdecl; external LIB_CAIRO;
 function  cairo_in_fill(cr: Pcairo_t; x, y: Double): cairo_bool_t; cdecl; external LIB_CAIRO;
+function  cairo_in_clip(cr: Pcairo_t; x, y: Double): cairo_bool_t; cdecl; external LIB_CAIRO;
 
 
 (* Rectangular extents *)
 (* Rectangular extents *)
 
 
@@ -441,6 +608,10 @@ procedure cairo_rectangle_list_destroy(rectangle_list: Pcairo_rectangle_list_t);
 
 
 (* Font/Text functions *)
 (* Font/Text functions *)
 
 
+function  cairo_glyph_allocate(num_glyphs: LongInt): Pcairo_glyph_t; cdecl; external LIB_CAIRO;
+procedure cairo_glyph_free(glyphs: Pcairo_glyph_t); cdecl; external LIB_CAIRO;
+function cairo_text_cluster_allocate(num_clusters: LongInt): Pcairo_text_cluster_t; cdecl; external LIB_CAIRO;
+procedure cairo_text_cluster_free(clusters: Pcairo_text_cluster_t); cdecl; external LIB_CAIRO;
 function  cairo_font_options_create: Pcairo_font_options_t; cdecl; external LIB_CAIRO;
 function  cairo_font_options_create: Pcairo_font_options_t; cdecl; external LIB_CAIRO;
 function  cairo_font_options_copy(original: Pcairo_font_options_t): Pcairo_font_options_t; cdecl; external LIB_CAIRO;
 function  cairo_font_options_copy(original: Pcairo_font_options_t): Pcairo_font_options_t; cdecl; external LIB_CAIRO;
 procedure cairo_font_options_destroy(options: Pcairo_font_options_t); cdecl; external LIB_CAIRO;
 procedure cairo_font_options_destroy(options: Pcairo_font_options_t); cdecl; external LIB_CAIRO;
@@ -501,10 +672,37 @@ function  cairo_scaled_font_set_user_data (scaled_font: Pcairo_scaled_font_t; ke
 procedure cairo_scaled_font_extents(scaled_font: Pcairo_scaled_font_t; extents: Pcairo_font_extents_t); cdecl; external LIB_CAIRO;
 procedure cairo_scaled_font_extents(scaled_font: Pcairo_scaled_font_t; extents: Pcairo_font_extents_t); cdecl; external LIB_CAIRO;
 procedure cairo_scaled_font_text_extents(scaled_font: Pcairo_scaled_font_t; utf8: PChar; extents: Pcairo_text_extents_t); cdecl; external LIB_CAIRO;
 procedure cairo_scaled_font_text_extents(scaled_font: Pcairo_scaled_font_t; utf8: PChar; extents: Pcairo_text_extents_t); cdecl; external LIB_CAIRO;
 procedure cairo_scaled_font_glyph_extents(scaled_font: Pcairo_scaled_font_t; glyphs: Pcairo_glyph_t; num_glyphs: LongInt; extents: Pcairo_text_extents_t); cdecl; external LIB_CAIRO;
 procedure cairo_scaled_font_glyph_extents(scaled_font: Pcairo_scaled_font_t; glyphs: Pcairo_glyph_t; num_glyphs: LongInt; extents: Pcairo_text_extents_t); cdecl; external LIB_CAIRO;
-function  cairo_scaled_font_get_font_face (scaled_font: Pcairo_scaled_font_t): Pcairo_font_face_t; cdecl; external LIB_CAIRO;
-procedure cairo_scaled_font_get_font_matrix (scaled_font: Pcairo_scaled_font_t;	font_matrix: Pcairo_matrix_t); cdecl; external LIB_CAIRO;
-procedure cairo_scaled_font_get_ctm (scaled_font: Pcairo_scaled_font_t;	ctm: Pcairo_matrix_t); cdecl; external LIB_CAIRO;
-procedure cairo_scaled_font_get_font_options (scaled_font: Pcairo_scaled_font_t; options: Pcairo_font_options_t); cdecl; external LIB_CAIRO;
+function  cairo_scaled_font_text_to_glyphs(scaled_font: Pcairo_scaled_font_t; x, y: Double; const utf8: PChar; utf8_len: LongInt; glyphs: PPcairo_glyph_t; num_glyphs: PLongInt; clusters: PPcairo_text_cluster_t; num_clusters: PLongInt; cluster_flags: Pcairo_text_cluster_flags_t): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_scaled_font_get_font_face(scaled_font: Pcairo_scaled_font_t): Pcairo_font_face_t; cdecl; external LIB_CAIRO;
+procedure cairo_scaled_font_get_font_matrix(scaled_font: Pcairo_scaled_font_t;	font_matrix: Pcairo_matrix_t); cdecl; external LIB_CAIRO;
+procedure cairo_scaled_font_get_ctm(scaled_font: Pcairo_scaled_font_t;	ctm: Pcairo_matrix_t); cdecl; external LIB_CAIRO;
+procedure cairo_scaled_font_get_scale_matrix(scaled_font: Pcairo_scaled_font_t; scale_matrix: Pcairo_matrix_t); cdecl; external LIB_CAIRO;
+procedure cairo_scaled_font_get_font_options(scaled_font: Pcairo_scaled_font_t; options: Pcairo_font_options_t); cdecl; external LIB_CAIRO;
+
+(* Toy fonts *)
+
+function cairo_toy_font_face_create(const family: PChar; slant: cairo_font_slant_t; weight: cairo_font_weight_t): Pcairo_font_face_t; cdecl; external LIB_CAIRO;
+function cairo_toy_font_face_get_family(font_face: Pcairo_font_face_t): PChar; cdecl; external LIB_CAIRO;
+function cairo_toy_font_face_get_slant(font_face: Pcairo_font_face_t): cairo_font_slant_t; cdecl; external LIB_CAIRO;
+function cairo_toy_font_face_get_weight(font_face: Pcairo_font_face_t): cairo_font_weight_t; cdecl; external LIB_CAIRO;
+
+(* User fonts *)
+
+function cairo_user_font_face_create: Pcairo_font_face_t; cdecl; external LIB_CAIRO;
+
+(* User-font method setters *)
+
+procedure cairo_user_font_face_set_init_func(font_face: Pcairo_font_face_t; init_func: cairo_user_scaled_font_init_func_t); cdecl; external LIB_CAIRO;
+procedure cairo_user_font_face_set_render_glyph_func(font_face: Pcairo_font_face_t; render_glyph_func: cairo_user_scaled_font_render_glyph_func_t); cdecl; external LIB_CAIRO;
+procedure cairo_user_font_face_set_text_to_glyphs_func(font_face: Pcairo_font_face_t; text_to_glyphs_func: cairo_user_scaled_font_text_to_glyphs_func_t); cdecl; external LIB_CAIRO;
+procedure cairo_user_font_face_set_unicode_to_glyph_func(font_face: Pcairo_font_face_t; unicode_to_glyph_func: cairo_user_scaled_font_unicode_to_glyph_func_t); cdecl; external LIB_CAIRO;
+
+(* User-font method getters *)
+
+function cairo_user_font_face_get_init_func(font_face: Pcairo_font_face_t): cairo_user_scaled_font_init_func_t; cdecl; external LIB_CAIRO;
+function cairo_user_font_face_get_render_glyph_func(font_face: Pcairo_font_face_t): cairo_user_scaled_font_render_glyph_func_t; cdecl; external LIB_CAIRO;
+function cairo_user_font_face_get_text_to_glyphs_func(font_face: Pcairo_font_face_t): cairo_user_scaled_font_text_to_glyphs_func_t; cdecl; external LIB_CAIRO;
+function cairo_user_font_face_get_unicode_to_glyph_func(font_face: Pcairo_font_face_t): cairo_user_scaled_font_unicode_to_glyph_func_t; cdecl; external LIB_CAIRO;
 
 
 (* Query functions *)
 (* Query functions *)
 
 
@@ -537,9 +735,31 @@ function  cairo_status_to_string(status: cairo_status_t): Pchar; cdecl; external
 (* Surface manipulation *)
 (* Surface manipulation *)
 
 
 function  cairo_surface_create_similar(other: Pcairo_surface_t; content: cairo_content_t; width, height: LongInt): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 function  cairo_surface_create_similar(other: Pcairo_surface_t; content: cairo_content_t; width, height: LongInt): Pcairo_surface_t; cdecl; external LIB_CAIRO;
+function  cairo_surface_create_similar_image (other: Pcairo_surface_t; format: cairo_format_t; width, height: LongInt): Pcairo_surface_t; cdecl; external LIB_CAIRO;
+function  cairo_surface_map_to_image(surface: Pcairo_surface_t; const extents: Pcairo_rectangle_int_t): Pcairo_surface_t; cdecl; external LIB_CAIRO;
+procedure cairo_surface_unmap_image(surface: Pcairo_surface_t; image: Pcairo_surface_t); cdecl; external LIB_CAIRO;
+function  cairo_surface_create_for_rectangle(target: Pcairo_surface_t; x, y, width, height: double): Pcairo_surface_t; cdecl; external LIB_CAIRO;
+function  cairo_surface_create_observer(target: Pcairo_surface_t; mode: cairo_surface_observer_mode_t): Pcairo_surface_t; cdecl; external LIB_CAIRO;
+function  cairo_surface_observer_add_paint_callback(abstract_surface: Pcairo_surface_t; func: cairo_surface_observer_callback_t; data: Pointer): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_surface_observer_add_mask_callback(abstract_surface: Pcairo_surface_t; func: cairo_surface_observer_callback_t; data: Pointer): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_surface_observer_add_fill_callback(abstract_surface: Pcairo_surface_t; func: cairo_surface_observer_callback_t; data: Pointer): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_surface_observer_add_stroke_callback(abstract_surface: Pcairo_surface_t; func: cairo_surface_observer_callback_t; data: Pointer): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_surface_observer_add_glyphs_callback(abstract_surface: Pcairo_surface_t; func: cairo_surface_observer_callback_t; data: Pointer): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_surface_observer_add_flush_callback(abstract_surface: Pcairo_surface_t; func: cairo_surface_observer_callback_t; data: Pointer): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_surface_observer_add_finish_callback(abstract_surface: Pcairo_surface_t; func: cairo_surface_observer_callback_t; data: Pointer): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_surface_observer_print(surface: Pcairo_surface_t; write_func: cairo_write_func_t; closure: Pointer): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_surface_observer_elapsed(surface: Pcairo_surface_t): double; cdecl; external LIB_CAIRO;
+function  cairo_device_observer_print(device: Pcairo_device_t; write_func: cairo_write_func_t; closure: Pointer): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_device_observer_elapsed(device: Pcairo_device_t): double; cdecl; external LIB_CAIRO;
+function  cairo_device_observer_paint_elapsed(device: Pcairo_device_t): double; cdecl; external LIB_CAIRO;
+function  cairo_device_observer_mask_elapsed(device: Pcairo_device_t): double; cdecl; external LIB_CAIRO;
+function  cairo_device_observer_fill_elapsed(device: Pcairo_device_t): double; cdecl; external LIB_CAIRO;
+function  cairo_device_observer_stroke_elapsed(device: Pcairo_device_t): double; cdecl; external LIB_CAIRO;
+function  cairo_device_observer_glyphs_elapsed(device: Pcairo_device_t): double; cdecl; external LIB_CAIRO;
 function  cairo_surface_reference(surface: Pcairo_surface_t): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 function  cairo_surface_reference(surface: Pcairo_surface_t): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 procedure cairo_surface_finish(surface: Pcairo_surface_t); cdecl; external LIB_CAIRO;
 procedure cairo_surface_finish(surface: Pcairo_surface_t); cdecl; external LIB_CAIRO;
 procedure cairo_surface_destroy(surface: Pcairo_surface_t); cdecl; external LIB_CAIRO;
 procedure cairo_surface_destroy(surface: Pcairo_surface_t); cdecl; external LIB_CAIRO;
+function  cairo_surface_get_device(surface: Pcairo_surface_t): Pcairo_device_t; cdecl; external LIB_CAIRO;
 function  cairo_surface_get_reference_count(surface: Pcairo_surface_t): LongWord; cdecl; external LIB_CAIRO;
 function  cairo_surface_get_reference_count(surface: Pcairo_surface_t): LongWord; cdecl; external LIB_CAIRO;
 function  cairo_surface_status(surface: Pcairo_surface_t): cairo_status_t; cdecl; external LIB_CAIRO;
 function  cairo_surface_status(surface: Pcairo_surface_t): cairo_status_t; cdecl; external LIB_CAIRO;
 function  cairo_surface_get_type(surface: Pcairo_surface_t): cairo_surface_type_t; cdecl; external LIB_CAIRO;
 function  cairo_surface_get_type(surface: Pcairo_surface_t): cairo_surface_type_t; cdecl; external LIB_CAIRO;
@@ -548,6 +768,9 @@ function  cairo_surface_write_to_png(surface: Pcairo_surface_t; filename: Pchar)
 function  cairo_surface_write_to_png_stream(surface: Pcairo_surface_t; write_func: cairo_write_func_t; closure: pointer): cairo_status_t; cdecl; external LIB_CAIRO;
 function  cairo_surface_write_to_png_stream(surface: Pcairo_surface_t; write_func: cairo_write_func_t; closure: pointer): cairo_status_t; cdecl; external LIB_CAIRO;
 function  cairo_surface_get_user_data(surface: Pcairo_surface_t; key: Pcairo_user_data_key_t): pointer; cdecl; external LIB_CAIRO;
 function  cairo_surface_get_user_data(surface: Pcairo_surface_t; key: Pcairo_user_data_key_t): pointer; cdecl; external LIB_CAIRO;
 function  cairo_surface_set_user_data(surface: Pcairo_surface_t; key: Pcairo_user_data_key_t; user_data: pointer; destroy: cairo_destroy_func_t): cairo_status_t; cdecl; external LIB_CAIRO;
 function  cairo_surface_set_user_data(surface: Pcairo_surface_t; key: Pcairo_user_data_key_t; user_data: pointer; destroy: cairo_destroy_func_t): cairo_status_t; cdecl; external LIB_CAIRO;
+procedure cairo_surface_get_mime_data(surface: Pcairo_surface_t; const mime_type: PChar; const data: PPChar; length: LongWord); cdecl; external LIB_CAIRO;
+function  cairo_surface_set_mime_data(surface: Pcairo_surface_t; const mime_type: PChar; const data: PChar; length: LongWord; destroy: cairo_destroy_func_t; closure: Pointer): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_surface_supports_mime_type(surface: Pcairo_surface_t; const mime_type: PChar): cairo_bool_t; cdecl; external LIB_CAIRO;
 procedure cairo_surface_get_font_options(surface: Pcairo_surface_t; options: Pcairo_font_options_t); cdecl; external LIB_CAIRO;
 procedure cairo_surface_get_font_options(surface: Pcairo_surface_t; options: Pcairo_font_options_t); cdecl; external LIB_CAIRO;
 procedure cairo_surface_flush(surface: Pcairo_surface_t); cdecl; external LIB_CAIRO;
 procedure cairo_surface_flush(surface: Pcairo_surface_t); cdecl; external LIB_CAIRO;
 procedure cairo_surface_mark_dirty(surface: Pcairo_surface_t); cdecl; external LIB_CAIRO;
 procedure cairo_surface_mark_dirty(surface: Pcairo_surface_t); cdecl; external LIB_CAIRO;
@@ -555,10 +778,15 @@ procedure cairo_surface_mark_dirty_rectangle(surface: Pcairo_surface_t; x, y, wi
 procedure cairo_surface_set_device_offset(surface: Pcairo_surface_t; x_offset, y_offset: Double); cdecl; external LIB_CAIRO;
 procedure cairo_surface_set_device_offset(surface: Pcairo_surface_t; x_offset, y_offset: Double); cdecl; external LIB_CAIRO;
 procedure cairo_surface_get_device_offset(surface: Pcairo_surface_t; x_offset, y_offset: PDouble); cdecl; external LIB_CAIRO;
 procedure cairo_surface_get_device_offset(surface: Pcairo_surface_t; x_offset, y_offset: PDouble); cdecl; external LIB_CAIRO;
 procedure cairo_surface_set_fallback_resolution(surface: Pcairo_surface_t; x_pixels_per_inch, y_pixels_per_inch: Double); cdecl; external LIB_CAIRO;
 procedure cairo_surface_set_fallback_resolution(surface: Pcairo_surface_t; x_pixels_per_inch, y_pixels_per_inch: Double); cdecl; external LIB_CAIRO;
+procedure cairo_surface_get_fallback_resolution(surface: Pcairo_surface_t; x_pixels_per_inch, y_pixels_per_inch: Double); cdecl; external LIB_CAIRO;
+procedure cairo_surface_copy_page(surface: Pcairo_surface_t);  cdecl; external LIB_CAIRO;
+procedure cairo_surface_show_page(surface: Pcairo_surface_t); cdecl; external LIB_CAIRO;
+function  cairo_surface_has_show_text_glyphs(surface: Pcairo_surface_t): cairo_bool_t; cdecl; external LIB_CAIRO;
 
 
 (* Image-surface functions *)
 (* Image-surface functions *)
 
 
 function  cairo_image_surface_create(format: cairo_format_t; width, height: LongInt): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 function  cairo_image_surface_create(format: cairo_format_t; width, height: LongInt): Pcairo_surface_t; cdecl; external LIB_CAIRO;
+function  cairo_format_stride_for_width(format: cairo_format_t; width: LongInt): LongInt; cdecl; external LIB_CAIRO;
 function  cairo_image_surface_create_for_data(data: Pbyte; format: cairo_format_t; width, height, stride: LongInt): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 function  cairo_image_surface_create_for_data(data: Pbyte; format: cairo_format_t; width, height, stride: LongInt): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 function  cairo_image_surface_get_data(surface: Pcairo_surface_t): PChar; cdecl; external LIB_CAIRO;
 function  cairo_image_surface_get_data(surface: Pcairo_surface_t): PChar; cdecl; external LIB_CAIRO;
 function  cairo_image_surface_get_format(surface: Pcairo_surface_t): cairo_format_t; cdecl; external LIB_CAIRO;
 function  cairo_image_surface_get_format(surface: Pcairo_surface_t): cairo_format_t; cdecl; external LIB_CAIRO;
@@ -568,6 +796,26 @@ function  cairo_image_surface_get_stride(surface: Pcairo_surface_t): LongInt; cd
 function  cairo_image_surface_create_from_png(filename: Pchar): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 function  cairo_image_surface_create_from_png(filename: Pchar): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 function  cairo_image_surface_create_from_png_stream(read_func: cairo_read_func_t; closure: pointer): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 function  cairo_image_surface_create_from_png_stream(read_func: cairo_read_func_t; closure: pointer): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 
 
+(* Recording-surface functions *)
+
+function  cairo_recording_surface_create(content: cairo_content_t; const extents: Pcairo_rectangle_t): Pcairo_surface_t; cdecl; external LIB_CAIRO;
+procedure cairo_recording_surface_ink_extents(surface: Pcairo_surface_t; x0, y0, width, height: PDouble); cdecl; external LIB_CAIRO;
+function  cairo_recording_surface_get_extents(surface: Pcairo_surface_t; const extents: Pcairo_rectangle_t): cairo_bool_t; cdecl; external LIB_CAIRO;
+
+(* raster-source pattern (callback) functions *)
+
+function  cairo_pattern_create_raster_source(user_data: Pointer; content: cairo_content_t; width, height: LongInt): Pcairo_pattern_t; cdecl; external LIB_CAIRO;
+procedure cairo_raster_source_pattern_set_callback_data(pattern: Pcairo_pattern_t; data: Pointer); cdecl; external LIB_CAIRO;
+function  cairo_raster_source_pattern_get_callback_data(pattern: Pcairo_pattern_t): Pointer; cdecl; external LIB_CAIRO;
+procedure cairo_raster_source_pattern_set_acquire(pattern: Pcairo_pattern_t; acquire: cairo_raster_source_acquire_func_t; release: cairo_raster_source_release_func_t); cdecl; external LIB_CAIRO;
+procedure cairo_raster_source_pattern_get_acquire(pattern: Pcairo_pattern_t; acquire: Pcairo_raster_source_acquire_func_t; release: Pcairo_raster_source_release_func_t); cdecl; external LIB_CAIRO;
+procedure cairo_raster_source_pattern_set_snapshot(pattern: Pcairo_pattern_t; snapshot: cairo_raster_source_snapshot_func_t); cdecl; external LIB_CAIRO;
+function  cairo_raster_source_pattern_get_snapshot(pattern: Pcairo_pattern_t): cairo_raster_source_snapshot_func_t; cdecl; external LIB_CAIRO;
+procedure cairo_raster_source_pattern_set_copy(pattern: Pcairo_pattern_t; copy: cairo_raster_source_copy_func_t); cdecl; external LIB_CAIRO;
+function  cairo_raster_source_pattern_get_copy(pattern: Pcairo_pattern_t): cairo_raster_source_copy_func_t; cdecl; external LIB_CAIRO;
+procedure cairo_raster_source_pattern_set_finish(pattern: Pcairo_pattern_t; finish: cairo_raster_source_finish_func_t); cdecl; external LIB_CAIRO;
+function  cairo_raster_source_pattern_get_finish(pattern: Pcairo_pattern_t): cairo_raster_source_finish_func_t; cdecl; external LIB_CAIRO;
+
 (* Pattern creation functions *)
 (* Pattern creation functions *)
 
 
 function  cairo_pattern_create_rgb(red, green, blue: Double): Pcairo_pattern_t; cdecl; external LIB_CAIRO;
 function  cairo_pattern_create_rgb(red, green, blue: Double): Pcairo_pattern_t; cdecl; external LIB_CAIRO;
@@ -575,6 +823,7 @@ function  cairo_pattern_create_rgba(red, green, blue, alpha: Double): Pcairo_pat
 function  cairo_pattern_create_for_surface(surface: Pcairo_surface_t): Pcairo_pattern_t; cdecl; external LIB_CAIRO;
 function  cairo_pattern_create_for_surface(surface: Pcairo_surface_t): Pcairo_pattern_t; cdecl; external LIB_CAIRO;
 function  cairo_pattern_create_linear(x0, y0, x1, y1: Double): Pcairo_pattern_t; cdecl; external LIB_CAIRO;
 function  cairo_pattern_create_linear(x0, y0, x1, y1: Double): Pcairo_pattern_t; cdecl; external LIB_CAIRO;
 function  cairo_pattern_create_radial(cx0, cy0, radius0, cx1, cy1, radius1: Double): Pcairo_pattern_t; cdecl; external LIB_CAIRO;
 function  cairo_pattern_create_radial(cx0, cy0, radius0, cx1, cy1, radius1: Double): Pcairo_pattern_t; cdecl; external LIB_CAIRO;
+function  cairo_pattern_create_mesh: Pcairo_pattern_t; cdecl; external LIB_CAIRO;
 function  cairo_pattern_reference(pattern: Pcairo_pattern_t): Pcairo_pattern_t; cdecl; external LIB_CAIRO;
 function  cairo_pattern_reference(pattern: Pcairo_pattern_t): Pcairo_pattern_t; cdecl; external LIB_CAIRO;
 procedure cairo_pattern_destroy(pattern: Pcairo_pattern_t); cdecl; external LIB_CAIRO;
 procedure cairo_pattern_destroy(pattern: Pcairo_pattern_t); cdecl; external LIB_CAIRO;
 function  cairo_pattern_get_reference_count (pattern: Pcairo_pattern_t): LongWord; cdecl; external LIB_CAIRO;
 function  cairo_pattern_get_reference_count (pattern: Pcairo_pattern_t): LongWord; cdecl; external LIB_CAIRO;
@@ -584,18 +833,30 @@ function  cairo_pattern_set_user_data (pattern: Pcairo_pattern_t; key: Pcairo_us
 function  cairo_pattern_get_type(pattern: Pcairo_pattern_t): cairo_pattern_type_t; cdecl; external LIB_CAIRO;
 function  cairo_pattern_get_type(pattern: Pcairo_pattern_t): cairo_pattern_type_t; cdecl; external LIB_CAIRO;
 procedure cairo_pattern_add_color_stop_rgb(pattern: Pcairo_pattern_t; offset, red, green, blue: Double); cdecl; external LIB_CAIRO;
 procedure cairo_pattern_add_color_stop_rgb(pattern: Pcairo_pattern_t; offset, red, green, blue: Double); cdecl; external LIB_CAIRO;
 procedure cairo_pattern_add_color_stop_rgba(pattern: Pcairo_pattern_t; offset, red, green, blue, alpha: Double); cdecl; external LIB_CAIRO;
 procedure cairo_pattern_add_color_stop_rgba(pattern: Pcairo_pattern_t; offset, red, green, blue, alpha: Double); cdecl; external LIB_CAIRO;
+procedure cairo_mesh_pattern_begin_patch(pattern: Pcairo_pattern_t); cdecl; external LIB_CAIRO;
+procedure cairo_mesh_pattern_end_patch(pattern: Pcairo_pattern_t); cdecl; external LIB_CAIRO;
+procedure cairo_mesh_pattern_curve_to(pattern: Pcairo_pattern_t; x1, y1, x2, y2, x3, y3: Double); cdecl; external LIB_CAIRO;
+procedure cairo_mesh_pattern_line_to(pattern: Pcairo_pattern_t; x, y: Double); cdecl; external LIB_CAIRO;
+procedure cairo_mesh_pattern_move_to(pattern: Pcairo_pattern_t;	x, y: Double); cdecl; external LIB_CAIRO;
+procedure cairo_mesh_pattern_set_control_point(pattern: Pcairo_pattern_t; point_num: LongWord; x, y: Double); cdecl; external LIB_CAIRO;
+procedure cairo_mesh_pattern_set_corner_color_rgb(pattern: Pcairo_pattern_t; corner_num: LongWord; red, green, blue: Double); cdecl; external LIB_CAIRO;
+procedure cairo_mesh_pattern_set_corner_color_rgba(pattern: Pcairo_pattern_t; corner_num: LongWord; red, green, blue, alpha: Double); cdecl; external LIB_CAIRO;
 procedure cairo_pattern_set_matrix(pattern: Pcairo_pattern_t; matrix: Pcairo_matrix_t); cdecl; external LIB_CAIRO;
 procedure cairo_pattern_set_matrix(pattern: Pcairo_pattern_t; matrix: Pcairo_matrix_t); cdecl; external LIB_CAIRO;
 procedure cairo_pattern_get_matrix(pattern: Pcairo_pattern_t; matrix: Pcairo_matrix_t); cdecl; external LIB_CAIRO;
 procedure cairo_pattern_get_matrix(pattern: Pcairo_pattern_t; matrix: Pcairo_matrix_t); cdecl; external LIB_CAIRO;
 procedure cairo_pattern_set_extend(pattern: Pcairo_pattern_t; extend: cairo_extend_t); cdecl; external LIB_CAIRO;
 procedure cairo_pattern_set_extend(pattern: Pcairo_pattern_t; extend: cairo_extend_t); cdecl; external LIB_CAIRO;
 function  cairo_pattern_get_extend(pattern: Pcairo_pattern_t): cairo_extend_t; cdecl; external LIB_CAIRO;
 function  cairo_pattern_get_extend(pattern: Pcairo_pattern_t): cairo_extend_t; cdecl; external LIB_CAIRO;
 procedure cairo_pattern_set_filter(pattern: Pcairo_pattern_t; filter: cairo_filter_t); cdecl; external LIB_CAIRO;
 procedure cairo_pattern_set_filter(pattern: Pcairo_pattern_t; filter: cairo_filter_t); cdecl; external LIB_CAIRO;
 function  cairo_pattern_get_filter(pattern: Pcairo_pattern_t): cairo_filter_t; cdecl; external LIB_CAIRO;
 function  cairo_pattern_get_filter(pattern: Pcairo_pattern_t): cairo_filter_t; cdecl; external LIB_CAIRO;
-function  cairo_pattern_get_rgba (pattern: Pcairo_pattern_t; red, green, blue, alpha: PDouble): cairo_status_t; cdecl; external LIB_CAIRO;
-function  cairo_pattern_get_surface (pattern: Pcairo_pattern_t; surface: PPcairo_surface_t): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_pattern_get_rgba(pattern: Pcairo_pattern_t; red, green, blue, alpha: PDouble): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_pattern_get_surface(pattern: Pcairo_pattern_t; surface: PPcairo_surface_t): cairo_status_t; cdecl; external LIB_CAIRO;
 function  cairo_pattern_get_color_stop_rgba(pattern: Pcairo_pattern_t; index: LongInt; offset, red, green, blue, alpha: PDouble):cairo_status_t; cdecl; external LIB_CAIRO;
 function  cairo_pattern_get_color_stop_rgba(pattern: Pcairo_pattern_t; index: LongInt; offset, red, green, blue, alpha: PDouble):cairo_status_t; cdecl; external LIB_CAIRO;
 function  cairo_pattern_get_color_stop_count(pattern: Pcairo_pattern_t; count: PLongInt):cairo_status_t; cdecl; external LIB_CAIRO;
 function  cairo_pattern_get_color_stop_count(pattern: Pcairo_pattern_t; count: PLongInt):cairo_status_t; cdecl; external LIB_CAIRO;
-function  cairo_pattern_get_linear_points (pattern: Pcairo_pattern_t; x0, y0, x1, y1: PDouble): cairo_status_t; cdecl; external LIB_CAIRO;
-function  cairo_pattern_get_radial_circles (pattern: Pcairo_pattern_t; x0, y0, r0, x1, y1, r1:PDouble): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_pattern_get_linear_points(pattern: Pcairo_pattern_t; x0, y0, x1, y1: PDouble): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_pattern_get_radial_circles(pattern: Pcairo_pattern_t; x0, y0, r0, x1, y1, r1:PDouble): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_mesh_pattern_get_patch_count(pattern: Pcairo_pattern_t; count: PLongWord): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_mesh_pattern_get_path(pattern: Pcairo_pattern_t; patch_num: LongWord): Pcairo_path_t; cdecl; external LIB_CAIRO;
+function  cairo_mesh_pattern_get_corner_color_rgba(pattern: Pcairo_pattern_t; patch_num: LongWord; corner_num: LongWord; red, green, blue, alpha: PDouble): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_mesh_pattern_get_control_point(pattern: Pcairo_pattern_t; patch_num: LongWord; point_num: LongWord; x, y: PDouble): cairo_status_t; cdecl; external LIB_CAIRO;
 
 
 (* Matrix functions *)
 (* Matrix functions *)
 
 
@@ -612,16 +873,50 @@ procedure cairo_matrix_multiply(result, a, b: Pcairo_matrix_t); cdecl; external
 procedure cairo_matrix_transform_distance(matrix: Pcairo_matrix_t; dx, dy: PDouble); cdecl; external LIB_CAIRO;
 procedure cairo_matrix_transform_distance(matrix: Pcairo_matrix_t; dx, dy: PDouble); cdecl; external LIB_CAIRO;
 procedure cairo_matrix_transform_point(matrix: Pcairo_matrix_t; x, y: PDouble); cdecl; external LIB_CAIRO;
 procedure cairo_matrix_transform_point(matrix: Pcairo_matrix_t; x, y: PDouble); cdecl; external LIB_CAIRO;
 
 
+(* Region functions *)
+
+function  cairo_region_create: Pcairo_region_t; cdecl; external LIB_CAIRO;
+function  cairo_region_create_rectangle(const rectangle: Pcairo_rectangle_int_t): Pcairo_region_t; cdecl; external LIB_CAIRO;
+function  cairo_region_create_rectangles(const rects: Pcairo_rectangle_int_t; count: LongInt): Pcairo_region_t; cdecl; external LIB_CAIRO;
+function  cairo_region_copy(const original: Pcairo_region_t): Pcairo_region_t; cdecl; external LIB_CAIRO;
+function  cairo_region_reference(region: Pcairo_region_t): Pcairo_region_t; cdecl; external LIB_CAIRO;
+procedure cairo_region_destroy(region: Pcairo_region_t); cdecl; external LIB_CAIRO;
+function  cairo_region_equal(const a: Pcairo_region_t; const b: Pcairo_region_t): cairo_bool_t; cdecl; external LIB_CAIRO;
+function  cairo_region_status(const region: Pcairo_region_t): cairo_status_t; cdecl; external LIB_CAIRO;
+procedure cairo_region_get_extents(const region: Pcairo_region_t; extents: Pcairo_rectangle_int_t); cdecl; external LIB_CAIRO;
+function  cairo_region_num_rectangles(const region: Pcairo_region_t): LongInt; cdecl; external LIB_CAIRO;
+procedure cairo_region_get_rectangle(const region: Pcairo_region_t; nth: LongInt; rectangle: Pcairo_rectangle_int_t); cdecl; external LIB_CAIRO;
+function  cairo_region_is_empty(const region: Pcairo_region_t): cairo_bool_t ; cdecl; external LIB_CAIRO;
+function  cairo_region_contains_rectangle(const region: Pcairo_region_t; const rectangle: Pcairo_rectangle_int_t): cairo_region_overlap_t; cdecl; external LIB_CAIRO;
+function  cairo_region_contains_point(const region: Pcairo_region_t; x, y: LongInt): cairo_bool_t; cdecl; external LIB_CAIRO;
+procedure cairo_region_translate(const region: Pcairo_region_t; dx, dy: LongInt); cdecl; external LIB_CAIRO;
+function  cairo_region_subtract(dst: Pcairo_region_t; const other: Pcairo_region_t): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_region_subtract_rectangle(dst: Pcairo_region_t; const rectangle: Pcairo_rectangle_int_t): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_region_intersect(dst: Pcairo_region_t; const other: Pcairo_region_t): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_region_intersect_rectangle(dst: Pcairo_region_t; const rectangle: Pcairo_rectangle_int_t): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_region_union(dst: Pcairo_region_t; const other: Pcairo_region_t): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_region_union_rectangle(dst: Pcairo_region_t; const rectangle: Pcairo_rectangle_int_t): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_region_xor(dst: Pcairo_region_t; const other: Pcairo_region_t): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_region_xor_rectangle(dst: Pcairo_region_t; const rectangle: Pcairo_rectangle_int_t): cairo_status_t; cdecl; external LIB_CAIRO;
+
 (* PDF functions *)
 (* PDF functions *)
 
 
 function  cairo_pdf_surface_create(filename: PChar; width_in_points, height_in_points: Double): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 function  cairo_pdf_surface_create(filename: PChar; width_in_points, height_in_points: Double): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 function  cairo_pdf_surface_create_for_stream(write_func: cairo_write_func_t; closure: Pointer; width_in_points, height_in_points: Double): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 function  cairo_pdf_surface_create_for_stream(write_func: cairo_write_func_t; closure: Pointer; width_in_points, height_in_points: Double): Pcairo_surface_t; cdecl; external LIB_CAIRO;
+procedure cairo_pdf_surface_restrict_to_version(surface: Pcairo_surface_t; version: cairo_pdf_version_t); cdecl; external LIB_CAIRO;
+procedure cairo_pdf_get_versions(const versions: PPcairo_pdf_version_t; num_versions: PLongInt); cdecl; external LIB_CAIRO;
+function  cairo_pdf_version_to_string(version: cairo_pdf_version_t): PChar; cdecl; external LIB_CAIRO;
 procedure cairo_pdf_surface_set_size(surface: Pcairo_surface_t; width_in_points, height_in_points: Double); cdecl; external LIB_CAIRO;
 procedure cairo_pdf_surface_set_size(surface: Pcairo_surface_t; width_in_points, height_in_points: Double); cdecl; external LIB_CAIRO;
 
 
 (* PS functions *)
 (* PS functions *)
 
 
 function  cairo_ps_surface_create(filename: PChar; width_in_points, height_in_points: Double): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 function  cairo_ps_surface_create(filename: PChar; width_in_points, height_in_points: Double): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 function  cairo_ps_surface_create_for_stream(write_func: cairo_write_func_t; closure: Pointer; width_in_points, height_in_points: Double): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 function  cairo_ps_surface_create_for_stream(write_func: cairo_write_func_t; closure: Pointer; width_in_points, height_in_points: Double): Pcairo_surface_t; cdecl; external LIB_CAIRO;
+procedure cairo_ps_surface_restrict_to_level(surface: Pcairo_surface_t; level: cairo_ps_level_t); cdecl; external LIB_CAIRO;
+procedure cairo_ps_get_levels(const levels: PPcairo_ps_level_t; num_levels: PLongInt); cdecl; external LIB_CAIRO;
+function  cairo_ps_level_to_string(level: cairo_ps_level_t): PChar; cdecl; external LIB_CAIRO;
+procedure cairo_ps_surface_set_eps(surface: Pcairo_surface_t; eps: cairo_bool_t); cdecl; external LIB_CAIRO;
+function  cairo_ps_surface_get_eps (surface: Pcairo_surface_t): cairo_bool_t; cdecl; external LIB_CAIRO;
 procedure cairo_ps_surface_set_size(surface: Pcairo_surface_t; width_in_points, height_in_points: Double); cdecl; external LIB_CAIRO;
 procedure cairo_ps_surface_set_size(surface: Pcairo_surface_t; width_in_points, height_in_points: Double); cdecl; external LIB_CAIRO;
 procedure cairo_ps_surface_dsc_comment(surface: Pcairo_surface_t; comment: PChar); cdecl; external LIB_CAIRO;
 procedure cairo_ps_surface_dsc_comment(surface: Pcairo_surface_t; comment: PChar); cdecl; external LIB_CAIRO;
 procedure cairo_ps_surface_dsc_begin_setup(surface: Pcairo_surface_t); cdecl; external LIB_CAIRO;
 procedure cairo_ps_surface_dsc_begin_setup(surface: Pcairo_surface_t); cdecl; external LIB_CAIRO;
@@ -632,10 +927,53 @@ procedure cairo_ps_surface_dsc_begin_page_setup(surface: Pcairo_surface_t); cdec
 function  cairo_svg_surface_create(filename: PChar; width_in_points, height_in_points: Double): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 function  cairo_svg_surface_create(filename: PChar; width_in_points, height_in_points: Double): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 function  cairo_svg_surface_create_for_stream(write_func: cairo_write_func_t; closure: Pointer; width_in_points, height_in_points: Double): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 function  cairo_svg_surface_create_for_stream(write_func: cairo_write_func_t; closure: Pointer; width_in_points, height_in_points: Double): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 procedure cairo_svg_surface_restrict_to_version(surface: Pcairo_surface_t; version: cairo_svg_version_t); cdecl; external LIB_CAIRO;
 procedure cairo_svg_surface_restrict_to_version(surface: Pcairo_surface_t; version: cairo_svg_version_t); cdecl; external LIB_CAIRO;
-
 procedure cairo_svg_get_versions(versions: ppcairo_svg_version_t;num_versions:pcint);cdecl; external LIB_CAIRO;
 procedure cairo_svg_get_versions(versions: ppcairo_svg_version_t;num_versions:pcint);cdecl; external LIB_CAIRO;
 function  cairo_svg_version_to_string(version: cairo_svg_version_t): PChar; cdecl; external LIB_CAIRO;
 function  cairo_svg_version_to_string(version: cairo_svg_version_t): PChar; cdecl; external LIB_CAIRO;
 
 
+(* TEE functions *)
+
+function  cairo_tee_surface_create(master: Pcairo_surface_t): Pcairo_surface_t; cdecl; external LIB_CAIRO;
+procedure cairo_tee_surface_add(surface: Pcairo_surface_t; target: Pcairo_surface_t); cdecl; external LIB_CAIRO;
+procedure cairo_tee_surface_remove(surface: Pcairo_surface_t; target: Pcairo_surface_t); cdecl; external LIB_CAIRO;
+function  cairo_tee_surface_index(surface: Pcairo_surface_t; index: LongWord): Pcairo_surface_t; cdecl; external LIB_CAIRO;
+
+(* Backend device manipulation *)
+
+function cairo_device_reference(device: Pcairo_device_t): pcairo_device_t; cdecl; external LIB_CAIRO;
+function cairo_device_get_type(device: Pcairo_device_t): cairo_device_type_t; cdecl; external LIB_CAIRO;
+function cairo_device_status(device: Pcairo_device_t): cairo_status_t; cdecl; external LIB_CAIRO;
+function cairo_device_acquire(device: Pcairo_device_t): cairo_status_t; cdecl; external LIB_CAIRO;
+procedure cairo_device_release(device: Pcairo_device_t); cdecl; external LIB_CAIRO;
+procedure cairo_device_flush(device: Pcairo_device_t); cdecl; external LIB_CAIRO;
+procedure cairo_device_finish(device: Pcairo_device_t); cdecl; external LIB_CAIRO;
+procedure cairo_device_destroy(device: Pcairo_device_t); cdecl; external LIB_CAIRO;
+function cairo_device_get_reference_count(device: Pcairo_device_t): LongWord; cdecl; external LIB_CAIRO;
+function cairo_device_get_user_data (device: Pcairo_device_t; const key: pcairo_user_data_key_t): Pointer; cdecl; external LIB_CAIRO;
+function cairo_device_set_user_data (device: Pcairo_device_t; const key: pcairo_user_data_key_t; user_data: Pointer; destroy: cairo_destroy_func_t): cairo_status_t; cdecl; external LIB_CAIRO;
+
+(* Script functions *)
+
+function  cairo_script_create(const filename: PChar): Pcairo_device_t; cdecl; external LIB_CAIRO;
+function  cairo_script_create_for_stream(write_func: cairo_write_func_t; closure: Pointer): Pcairo_device_t; cdecl; external LIB_CAIRO;
+procedure cairo_script_write_comment(script: Pcairo_device_t; const comment:PChar; len: LongInt); cdecl; external LIB_CAIRO;
+procedure cairo_script_set_mode(script: Pcairo_device_t; mode: cairo_script_mode_t); cdecl; external LIB_CAIRO;
+function  cairo_script_get_mode(script: Pcairo_device_t): cairo_script_mode_t; cdecl; external LIB_CAIRO;
+function  cairo_script_surface_create(script: Pcairo_device_t; content: cairo_content_t; width, height: Double): Pcairo_surface_t; cdecl; external LIB_CAIRO;
+function  cairo_script_surface_create_for_target(script: Pcairo_device_t; target: Pcairo_surface_t): Pcairo_surface_t; cdecl; external LIB_CAIRO;
+function  cairo_script_from_recording_surface(script: Pcairo_device_t; recording_surface: Pcairo_surface_t): cairo_status_t; cdecl; external LIB_CAIRO;
+
+(* XXX expose csi_dictionary_t and pass to hooks *)
+
+function  cairo_script_interpreter_create: Pcairo_script_interpreter_t; cdecl; external LIB_CAIRO;
+procedure cairo_script_interpreter_install_hooks(ctx: Pcairo_script_interpreter_t; const hooks: Pcairo_script_interpreter_hooks_t); cdecl; external LIB_CAIRO;
+function  cairo_script_interpreter_run(ctx: Pcairo_script_interpreter_t; filename: PChar): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_script_interpreter_feed_stream(ctx: Pcairo_script_interpreter_t; var stream: File): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_script_interpreter_feed_string(ctx: Pcairo_script_interpreter_t; const line: PChar; len: LongInt): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_script_interpreter_get_line_number(ctx: Pcairo_script_interpreter_t): LongWord; cdecl; external LIB_CAIRO;
+function  cairo_script_interpreter_reference(ctx: Pcairo_script_interpreter_t): Pcairo_script_interpreter_t; cdecl; external LIB_CAIRO;
+function  cairo_script_interpreter_finish(ctx: Pcairo_script_interpreter_t): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_script_interpreter_destroy(ctx: Pcairo_script_interpreter_t): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_script_interpreter_translate_stream(var stream: File; write_func: cairo_write_func_t; closure: Pointer): cairo_status_t; cdecl; external LIB_CAIRO;
 
 
 (* Functions to be used while debugging (not intended for use in production code) *)
 (* Functions to be used while debugging (not intended for use in production code) *)
 
 

+ 12 - 4
packages/cairo/src/cairoft.pp

@@ -18,6 +18,7 @@ Based on:
 
 
  Original translation of cairo-ft.h by Jeffrey Pohlmeyer 
  Original translation of cairo-ft.h by Jeffrey Pohlmeyer 
  updated to version 1.4 by Luiz Américo Pereira Câmara 2007
  updated to version 1.4 by Luiz Américo Pereira Câmara 2007
+ updated to version 1.12 by Valdinilson Lourenço da Cunha 2012
 
 
 As per original authors wish, this file is dual licensed LGPL-MPL see the original file
 As per original authors wish, this file is dual licensed LGPL-MPL see the original file
 cairo.pp for the full license.
 cairo.pp for the full license.
@@ -43,13 +44,20 @@ type
   *)
   *)
   FcPattern = Pointer;
   FcPattern = Pointer;
   PFcPattern = ^FcPattern;
   PFcPattern = ^FcPattern;
-    
-function  cairo_ft_font_face_create_for_pattern(pattern:PFcPattern):Pcairo_font_face_t; cdecl; external LIB_CAIRO;
-procedure cairo_ft_font_options_substitute(options:Pcairo_font_options_t; pattern:PFcPattern); cdecl; external LIB_CAIRO;
+
+  cairo_ft_synthesize_t = (
+    CAIRO_FT_SYNTHESIZE_BOLD = 1 shl 0,
+    CAIRO_FT_SYNTHESIZE_OBLIQUE = 1 shl 1
+  );
+
 function  cairo_ft_font_face_create_for_ft_face(face:TFT_Face; load_flags:longint):Pcairo_font_face_t; cdecl; external LIB_CAIRO;
 function  cairo_ft_font_face_create_for_ft_face(face:TFT_Face; load_flags:longint):Pcairo_font_face_t; cdecl; external LIB_CAIRO;
+procedure cairo_ft_font_face_set_synthesize(font_face: Pcairo_font_face_t; synth_flags: LongWord); cdecl; external LIB_CAIRO;
+procedure cairo_ft_font_face_unset_synthesize(font_face: Pcairo_font_face_t; synth_flags: LongWord);  cdecl; external LIB_CAIRO;
+function  cairo_ft_font_face_get_synthesize(font_face: Pcairo_font_face_t): LongWord;  cdecl; external LIB_CAIRO;
 function  cairo_ft_scaled_font_lock_face(scaled_font:Pcairo_scaled_font_t):TFT_Face; cdecl; external LIB_CAIRO;
 function  cairo_ft_scaled_font_lock_face(scaled_font:Pcairo_scaled_font_t):TFT_Face; cdecl; external LIB_CAIRO;
 procedure cairo_ft_scaled_font_unlock_face(scaled_font:Pcairo_scaled_font_t); cdecl; external LIB_CAIRO;
 procedure cairo_ft_scaled_font_unlock_face(scaled_font:Pcairo_scaled_font_t); cdecl; external LIB_CAIRO;
-
+function  cairo_ft_font_face_create_for_pattern(pattern: PFcPattern): Pcairo_font_face_t; cdecl; external LIB_CAIRO;
+procedure cairo_ft_font_options_substitute(options: Pcairo_font_options_t; pattern: PFcPattern); cdecl; external LIB_CAIRO;
 
 
 implementation
 implementation
 
 

+ 303 - 0
packages/cairo/src/cairogobject.pp

@@ -0,0 +1,303 @@
+unit cairogobject;
+{
+  Cairo-gobject header translation by Dennis Golovan. Original header
+  of cairo-gobject.h
+
+ * cairo - a vector graphics library with display and print output
+ *
+ * Copyright © 2010 Red Hat Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is University of Southern
+ * California.
+ *
+ * Contributor(s):
+ *	Benjamin Otte <[email protected]>
+ *
+}
+interface
+{$mode ObjFpc}
+{$IFDEF FPC}
+  {$PACKRECORDS C}
+{$ENDIF}
+
+uses cairo;
+
+const 
+{$ifdef MSWINDOWS}
+  LIB_CAIROGOBJECT = LIB_CAIRO;
+  {$IFDEF FPC}
+    {$ifndef NO_SMART_LINK}
+      {$smartlink on}
+    {$endif}
+  {$ENDIF}
+{$else}
+  {$ifdef darwin}
+    LIB_CAIROGOBJECT = 'cairo-gobject';
+    {$linklib cairo-gobject}
+  {$else}
+    {$ifdef UseCustomLibs}
+    LIB_CAIROGOBJECT = '';
+    {$else}
+    LIB_CAIROGOBJECT = 'libcairo-gobject.so.2';
+    {$endif}
+  {$endif}
+{$endif}
+
+(* GObject Functions - structs *)
+
+function CAIRO_GOBJECT_TYPE_CONTEXT: GType;
+function cairo_gobject_context_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_DEVICE: GType;
+function cairo_gobject_device_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_PATTERN: GType;
+function cairo_gobject_pattern_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_SURFACE: GType;
+function cairo_gobject_surface_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_RECTANGLE: GType;
+function cairo_gobject_rectangle_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_SCALED_FONT: GType;
+function cairo_gobject_scaled_font_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_FONT_FACE: GType;
+function cairo_gobject_font_face_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_FONT_OPTIONS: GType;
+function cairo_gobject_font_options_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_RECTANGLE_INT: GType;
+function cairo_gobject_rectangle_int_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_REGION: GType;
+function cairo_gobject_region_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+
+(* GObject Functions - enums *)
+
+function CAIRO_GOBJECT_TYPE_STATUS: GType;
+function cairo_gobject_status_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_CONTENT: GType;
+function cairo_gobject_content_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_OPERATOR: GType;
+function cairo_gobject_operator_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_ANTIALIAS: GType;
+function cairo_gobject_antialias_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_FILL_RULE: GType;
+function cairo_gobject_fill_rule_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_LINE_CAP: GType;
+function cairo_gobject_line_cap_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_LINE_JOIN: GType;
+function cairo_gobject_line_join_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_CLUSTER_FLAGS: GType;
+function cairo_gobject_text_cluster_flags_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_FONT_SLANT: GType;
+function cairo_gobject_font_slant_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_FONT_WEIGHT: GType;
+function cairo_gobject_font_weight_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_SUBPIXEL_ORDER: GType;
+function cairo_gobject_subpixel_order_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_HINT_STYLE: GType;
+function cairo_gobject_hint_style_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_HNT_METRICS: GType;
+function cairo_gobject_hint_metrics_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_FONT_TYPE: GType;
+function cairo_gobject_font_type_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_PATH_DATA_TYPE: GType;
+function cairo_gobject_path_data_type_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_DEVICE_TYPE: GType;
+function cairo_gobject_device_type_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_SURFACE_TYPE: GType;
+function cairo_gobject_surface_type_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_FORMAT: GType;
+function cairo_gobject_format_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_PATTERN_TYPE: GType;
+function cairo_gobject_pattern_type_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_EXTEND: GType;
+function cairo_gobject_extend_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_FILTER: GType;
+function cairo_gobject_filter_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+function CAIRO_GOBJECT_TYPE_REGION_OVERLAP: GType;
+function cairo_gobject_region_overlap_get_type: GType; cdecl; external LIB_CAIROGOBJECT;
+
+implementation
+
+function CAIRO_GOBJECT_TYPE_CONTEXT: GType;
+begin
+  Result := cairo_gobject_context_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_DEVICE: GType;
+begin
+  Result :=  cairo_gobject_device_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_PATTERN: GType;
+begin
+  Result := cairo_gobject_pattern_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_SURFACE: GType;
+begin
+  Result := cairo_gobject_surface_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_RECTANGLE: GType;
+begin
+  Result := cairo_gobject_rectangle_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_SCALED_FONT: GType;
+begin
+  Result := cairo_gobject_scaled_font_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_FONT_FACE: GType;
+begin
+  Result := cairo_gobject_font_face_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_FONT_OPTIONS: GType;
+begin
+  Result := cairo_gobject_font_options_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_RECTANGLE_INT: GType;
+begin
+  Result := cairo_gobject_rectangle_int_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_REGION: GType;
+begin
+  Result := cairo_gobject_region_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_STATUS: GType;
+begin
+  Result := cairo_gobject_status_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_CONTENT: GType;
+begin
+  Result := cairo_gobject_content_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_OPERATOR: GType;
+begin
+  Result := cairo_gobject_operator_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_ANTIALIAS: GType;
+begin
+  Result := cairo_gobject_antialias_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_FILL_RULE: GType;
+begin
+  Result := cairo_gobject_fill_rule_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_LINE_CAP: GType;
+begin
+  Result := cairo_gobject_line_cap_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_LINE_JOIN: GType;
+begin
+  Result := cairo_gobject_line_join_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_CLUSTER_FLAGS: GType;
+begin
+  Result := cairo_gobject_text_cluster_flags_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_FONT_SLANT: GType;
+begin
+  Result := cairo_gobject_font_slant_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_FONT_WEIGHT: GType;
+begin
+  Result := cairo_gobject_font_weight_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_SUBPIXEL_ORDER: GType;
+begin
+  Result := cairo_gobject_subpixel_order_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_HINT_STYLE: GType;
+begin
+  Result := cairo_gobject_hint_style_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_HNT_METRICS: GType;
+begin
+  Result := cairo_gobject_hint_metrics_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_FONT_TYPE: GType;
+begin
+  Result := cairo_gobject_font_type_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_PATH_DATA_TYPE: GType;
+begin
+  Result := cairo_gobject_path_data_type_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_DEVICE_TYPE: GType;
+begin
+  Result := cairo_gobject_device_type_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_SURFACE_TYPE: GType;
+begin
+  Result := cairo_gobject_surface_type_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_FORMAT: GType;
+begin
+  Result := cairo_gobject_format_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_PATTERN_TYPE: GType;
+begin
+  Result := cairo_gobject_pattern_type_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_EXTEND: GType;
+begin
+  Result := cairo_gobject_extend_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_FILTER: GType;
+begin
+  Result := cairo_gobject_filter_get_type;
+end;
+
+function CAIRO_GOBJECT_TYPE_REGION_OVERLAP: GType;
+begin
+  Result := cairo_gobject_region_overlap_get_type;
+end;
+
+end.

+ 16 - 10
packages/cairo/src/cairowin32.pp

@@ -16,6 +16,8 @@ unit CairoWin32;
 
 
 Translation of cairo-win32.h version 1.4 by Luiz Américo Pereira Câmara 2007
 Translation of cairo-win32.h version 1.4 by Luiz Américo Pereira Câmara 2007
 
 
+Updated to cairo for windows version 1.10 by Valdinilson Lourenço da Cunha 2012
+
 For consistency with the other cairo header files, this file is dual
 For consistency with the other cairo header files, this file is dual
 licensed LGPL-MPL see the file cairo.pp for the full license.
 licensed LGPL-MPL see the file cairo.pp for the full license.
 }
 }
@@ -27,20 +29,24 @@ interface
 uses
 uses
   Cairo, windows;
   Cairo, windows;
 
 
-function cairo_win32_surface_create(hdc: HDC): Pcairo_surface_t; cdecl; external LIB_CAIRO;
-function cairo_win32_surface_create_with_ddb(hdc: HDC; format: cairo_format_t; width, height: longint): Pcairo_surface_t; cdecl; external LIB_CAIRO;
-function cairo_win32_surface_create_with_dib(format: cairo_format_t; width, height: longint): Pcairo_surface_t; cdecl; external LIB_CAIRO;
-function cairo_win32_surface_get_dc(surface: pcairo_surface_t): HDC; cdecl; external LIB_CAIRO;
-function cairo_win32_surface_get_image(surface: pcairo_surface_t): Pcairo_surface_t; cdecl; external LIB_CAIRO;
-function cairo_win32_font_face_create_for_logfontw(logfont: pLOGFONTW): Pcairo_font_face_t; cdecl; external LIB_CAIRO;
-function cairo_win32_font_face_create_for_hfont(font: HFONT): Pcairo_font_face_t; cdecl; external LIB_CAIRO;
-function cairo_win32_scaled_font_select_font(scaled_font: pcairo_scaled_font_t; hdc: HDC): cairo_status_t; cdecl; external LIB_CAIRO;
+function  cairo_win32_surface_create(dc: HDC): Pcairo_surface_t; cdecl; external LIB_CAIRO;
+function  cairo_win32_printing_surface_create(dc: HDC): Pcairo_surface_t; cdecl; external LIB_CAIRO;
+function  cairo_win32_surface_create_with_ddb(dc: HDC; format: cairo_format_t; width, height: longint): Pcairo_surface_t; cdecl; external LIB_CAIRO;
+function  cairo_win32_surface_create_with_dib(format: cairo_format_t; width, height: longint): Pcairo_surface_t; cdecl; external LIB_CAIRO;
+function  cairo_win32_surface_get_dc(surface: pcairo_surface_t): HDC; cdecl; external LIB_CAIRO;
+function  cairo_win32_surface_get_image(surface: pcairo_surface_t): Pcairo_surface_t; cdecl; external LIB_CAIRO;
+
+(* Win32 font support *)
+
+function  cairo_win32_font_face_create_for_logfontw(logfont: pLOGFONTW): Pcairo_font_face_t; cdecl; external LIB_CAIRO;
+function  cairo_win32_font_face_create_for_hfont(font: HFONT): Pcairo_font_face_t; cdecl; external LIB_CAIRO;
+function  cairo_win32_font_face_create_for_logfontw_hfont(logfont: PLOGFONTW; font: HFONT): Pcairo_font_face_t; cdecl; external LIB_CAIRO;
+function  cairo_win32_scaled_font_select_font(scaled_font: pcairo_scaled_font_t; hdc: HDC): cairo_status_t; cdecl; external LIB_CAIRO;
 procedure cairo_win32_scaled_font_done_font(scaled_font: pcairo_scaled_font_t); cdecl; external LIB_CAIRO;
 procedure cairo_win32_scaled_font_done_font(scaled_font: pcairo_scaled_font_t); cdecl; external LIB_CAIRO;
-function cairo_win32_scaled_font_get_metrics_factor(scaled_font: pcairo_scaled_font_t): double; cdecl; external LIB_CAIRO;
+function  cairo_win32_scaled_font_get_metrics_factor(scaled_font: pcairo_scaled_font_t): double; cdecl; external LIB_CAIRO;
 procedure cairo_win32_scaled_font_get_logical_to_device(scaled_font: pcairo_scaled_font_t; logical_to_device: pcairo_matrix_t); cdecl; external LIB_CAIRO;
 procedure cairo_win32_scaled_font_get_logical_to_device(scaled_font: pcairo_scaled_font_t; logical_to_device: pcairo_matrix_t); cdecl; external LIB_CAIRO;
 procedure cairo_win32_scaled_font_get_device_to_logical(scaled_font: pcairo_scaled_font_t; device_to_logical: pcairo_matrix_t); cdecl; external LIB_CAIRO;
 procedure cairo_win32_scaled_font_get_device_to_logical(scaled_font: pcairo_scaled_font_t; device_to_logical: pcairo_matrix_t); cdecl; external LIB_CAIRO;
 
 
 implementation
 implementation
 
 
-
 end.
 end.

+ 19 - 5
packages/cairo/src/cairoxlib.pp

@@ -17,6 +17,10 @@ unit CairoXlib;
  Translation of cairo-xlib.h version 1.4
  Translation of cairo-xlib.h version 1.4
  by Jeffrey Pohlmeyer 
  by Jeffrey Pohlmeyer 
  updated to version 1.4 by Luiz Américo Pereira Câmara 2007
  updated to version 1.4 by Luiz Américo Pereira Câmara 2007
+ 
+ - Translation and addition of cairo-xlib-xrender.h
+ - updated to version 1.12
+ by Valdinilson Lourenço da Cunha 2012
 
 
  As per original authors wish, this file is dual licensed LGPL-MPL see the original file
  As per original authors wish, this file is dual licensed LGPL-MPL see the original file
   cairo.pp for the full license.
   cairo.pp for the full license.
@@ -31,16 +35,26 @@ uses
   
   
 function  cairo_xlib_surface_create(dpy: PDisplay; drawable: TDrawable; visual: PVisual; width, height: LongInt): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 function  cairo_xlib_surface_create(dpy: PDisplay; drawable: TDrawable; visual: PVisual; width, height: LongInt): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 function  cairo_xlib_surface_create_for_bitmap(dpy: PDisplay; bitmap: TPixmap; screen: PScreen; width, height: LongInt): Pcairo_surface_t; cdecl; external LIB_CAIRO;
 function  cairo_xlib_surface_create_for_bitmap(dpy: PDisplay; bitmap: TPixmap; screen: PScreen; width, height: LongInt): Pcairo_surface_t; cdecl; external LIB_CAIRO;
-function  cairo_xlib_surface_create_with_xrender_format(dpy: PDisplay; drawable: TDrawable; screen: PScreen; format: PXRenderPictFormat; width, height:LongInt): Pcairo_surface_t; cdecl; external LIB_CAIRO;
-function  cairo_xlib_surface_get_depth(surface: Pcairo_surface_t): LongInt; cdecl; external LIB_CAIRO;
+procedure cairo_xlib_surface_set_size(surface: Pcairo_surface_t; width, height: LongInt); cdecl; external LIB_CAIRO;
+procedure cairo_xlib_surface_set_drawable(surface: Pcairo_surface_t; drawable: TDrawable; width, height: LongInt); cdecl; external LIB_CAIRO;
 function  cairo_xlib_surface_get_display(surface: Pcairo_surface_t): PDisplay; cdecl; external LIB_CAIRO;
 function  cairo_xlib_surface_get_display(surface: Pcairo_surface_t): PDisplay; cdecl; external LIB_CAIRO;
 function  cairo_xlib_surface_get_drawable(surface: Pcairo_surface_t): TDrawable; cdecl; external LIB_CAIRO;
 function  cairo_xlib_surface_get_drawable(surface: Pcairo_surface_t): TDrawable; cdecl; external LIB_CAIRO;
-function  cairo_xlib_surface_get_height(surface: Pcairo_surface_t): LongInt; cdecl; external LIB_CAIRO;
 function  cairo_xlib_surface_get_screen(surface: Pcairo_surface_t): PScreen; cdecl; external LIB_CAIRO;
 function  cairo_xlib_surface_get_screen(surface: Pcairo_surface_t): PScreen; cdecl; external LIB_CAIRO;
 function  cairo_xlib_surface_get_visual(surface: Pcairo_surface_t): PVisual; cdecl; external LIB_CAIRO;
 function  cairo_xlib_surface_get_visual(surface: Pcairo_surface_t): PVisual; cdecl; external LIB_CAIRO;
+function  cairo_xlib_surface_get_depth(surface: Pcairo_surface_t): LongInt; cdecl; external LIB_CAIRO;
 function  cairo_xlib_surface_get_width(surface: Pcairo_surface_t): LongInt; cdecl; external LIB_CAIRO;
 function  cairo_xlib_surface_get_width(surface: Pcairo_surface_t): LongInt; cdecl; external LIB_CAIRO;
-procedure cairo_xlib_surface_set_size(surface: Pcairo_surface_t; width, height: LongInt); cdecl; external LIB_CAIRO;
-procedure cairo_xlib_surface_set_drawable(surface: Pcairo_surface_t; drawable: TDrawable; width, height: LongInt); cdecl; external LIB_CAIRO;
+function  cairo_xlib_surface_get_height(surface: Pcairo_surface_t): LongInt; cdecl; external LIB_CAIRO;
+
+(* debug interface *)
+
+procedure cairo_xlib_device_debug_cap_xrender_version(device: Pcairo_device_t; major_version, minor_version: LongInt); cdecl; external LIB_CAIRO;
+procedure cairo_xlib_device_debug_set_precision(device: Pcairo_device_t; precision: LongInt); cdecl; external LIB_CAIRO;
+function  cairo_xlib_device_debug_get_precision(device: Pcairo_device_t): LongInt; cdecl; external LIB_CAIRO;
+
+(* xlib render *)
+
+function  cairo_xlib_surface_create_with_xrender_format (dpy: PDisplay; drawable: TDrawable; screen: PScreen; format: PXRenderPictFormat; width, height: LongInt): Pcairo_surface_t; cdecl; external LIB_CAIRO;
+function  cairo_xlib_surface_get_xrender_format(surface: Pcairo_surface_t): PXRenderPictFormat; cdecl; external LIB_CAIRO;
 
 
 implementation
 implementation
 
 

+ 24 - 7
packages/cdrom/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 endif
 override PACKAGE_NAME=cdrom
 override PACKAGE_NAME=cdrom
 override PACKAGE_VERSION=2.7.1
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 2 - 2
packages/cdrom/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 fpcdir=../..
 
 
 [prerules]
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 
 [rules]
 [rules]
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.

+ 26 - 5
packages/cdrom/examples/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -529,6 +529,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_PROGRAMS+=getdiscid showcds
 override TARGET_PROGRAMS+=getdiscid showcds
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_PROGRAMS+=getdiscid showcds
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override TARGET_PROGRAMS+=getdiscid showcds
 override TARGET_PROGRAMS+=getdiscid showcds
 endif
 endif
@@ -920,7 +923,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1112,6 +1115,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -1140,10 +1144,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1799,6 +1811,15 @@ REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_CDROM=1
 REQUIRE_PACKAGES_CDROM=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_CDROM=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -2234,7 +2255,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 24 - 7
packages/chm/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 endif
 override PACKAGE_NAME=chm
 override PACKAGE_NAME=chm
 override PACKAGE_VERSION=2.7.1
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 2 - 2
packages/chm/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 fpcdir=../..
 
 
 [prerules]
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 
 [rules]
 [rules]
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.

+ 5 - 3
packages/chm/src/chmcmd.lpr

@@ -23,10 +23,10 @@ program chmcmd;
 {$mode objfpc}{$H+}
 {$mode objfpc}{$H+}
 
 
 uses
 uses
-  Classes, Sysutils, chmfilewriter, GetOpts;
+  {$ifdef LZX_USETHREADS}{$ifdef Unix}cthreads,{$endif}{$endif} Classes, Sysutils, chmfilewriter, GetOpts;
 
 
 Const
 Const
-  CHMCMDVersion = '2.6.0';
+  CHMCMDVersion = '2.6.1';
 
 
 Procedure Usage;
 Procedure Usage;
 
 
@@ -101,7 +101,7 @@ var
 
 
 procedure OnError (Project: TChmProject;errorkind:TChmProjectErrorKind;msg:String;detailevel:integer=0);
 procedure OnError (Project: TChmProject;errorkind:TChmProjectErrorKind;msg:String;detailevel:integer=0);
 begin
 begin
-  if detailevel<=alloweddetaillevel then
+  if (detailevel<=alloweddetaillevel) or (errorkind < chmnote) then
     if errorkind<>chmnone then
     if errorkind<>chmnone then
       writeln(ChmErrorKindText[errorkind],': ',msg)
       writeln(ChmErrorKindText[errorkind],': ',msg)
     else
     else
@@ -150,6 +150,8 @@ begin
     end;
     end;
   OutStream := TFileStream.Create(Project.OutputFileName, fmCreate, fmOpenWrite);
   OutStream := TFileStream.Create(Project.OutputFileName, fmCreate, fmOpenWrite);
   Project.WriteChm(OutStream);
   Project.WriteChm(OutStream);
+  if Project.ScanHtmlContents then
+    Project.ShowUndefinedAnchors;
   if ishhp and GenerateXMLForHHP then
   if ishhp and GenerateXMLForHHP then
     begin
     begin
       Writeln('Generating XML ',xmlname,'.');
       Writeln('Generating XML ',xmlname,'.');

+ 95 - 27
packages/chm/src/chmfilewriter.pas

@@ -60,6 +60,7 @@ type
     fOtherFiles : TStrings; // Files found in a scan.
     fOtherFiles : TStrings; // Files found in a scan.
     fAllowedExtensions: TStringList;
     fAllowedExtensions: TStringList;
     fTotalFileList : TAvlTree;
     fTotalFileList : TAvlTree;
+    fAnchorList    : TStringList;
     FSpareString   : TStringIndex;
     FSpareString   : TStringIndex;
     FBasePath      : String;     // location of the .hhp file. Needed to resolve relative paths
     FBasePath      : String;     // location of the .hhp file. Needed to resolve relative paths
     FReadmeMessage : String;     // readme message
     FReadmeMessage : String;     // readme message
@@ -75,6 +76,7 @@ type
     procedure ScanList(toscan,newfiles:TStrings;recursion:boolean);
     procedure ScanList(toscan,newfiles:TStrings;recursion:boolean);
     procedure ScanSitemap(sitemap:TChmSiteMap;newfiles:TStrings;recursion:boolean);
     procedure ScanSitemap(sitemap:TChmSiteMap;newfiles:TStrings;recursion:boolean);
     function  FileInTotalList(const s:String):boolean;
     function  FileInTotalList(const s:String):boolean;
+    function  SanitizeURL(const basepath, instring, localpath, localname:string; var outstring:String):Boolean;
   public
   public
     constructor Create; virtual;
     constructor Create; virtual;
     destructor Destroy; override;
     destructor Destroy; override;
@@ -82,6 +84,7 @@ type
     procedure LoadFromhhp (AFileName:String;LeaveInclude:Boolean); virtual;
     procedure LoadFromhhp (AFileName:String;LeaveInclude:Boolean); virtual;
     procedure SaveToFile(AFileName: String); virtual;
     procedure SaveToFile(AFileName: String); virtual;
     procedure WriteChm(AOutStream: TStream); virtual;
     procedure WriteChm(AOutStream: TStream); virtual;
+    procedure ShowUndefinedAnchors;
     function ProjectDir: String;
     function ProjectDir: String;
     procedure LoadSitemaps;
     procedure LoadSitemaps;
     procedure AddFileWithContext(contextid:integer;filename:ansistring;contextname:ansistring='');
     procedure AddFileWithContext(contextid:integer;filename:ansistring;contextname:ansistring='');
@@ -126,6 +129,23 @@ implementation
 
 
 uses XmlCfg, CHMTypes;
 uses XmlCfg, CHMTypes;
 
 
+type
+
+  { TFirstReference }
+
+  TFirstReference = class
+  public
+   Location: string;
+   constructor Create(Const ALocation: string);
+  end;
+
+{ TFirstReference }
+
+constructor TFirstReference.Create(const ALocation: string);
+begin
+  Location := ALocation;
+end;
+
 { TChmProject }
 { TChmProject }
 
 
 function TChmProject.GetData(const DataName: String; out PathInChm: String; out
 function TChmProject.GetData(const DataName: String; out PathInChm: String; out
@@ -187,6 +207,9 @@ begin
   ScanHtmlContents:=False;
   ScanHtmlContents:=False;
   FTotalFileList:=TAvlTree.Create(@CompareStrings);
   FTotalFileList:=TAvlTree.Create(@CompareStrings);
   FSparestring  :=TStringIndex.Create;
   FSparestring  :=TStringIndex.Create;
+  fAnchorList := TStringList.Create;
+  fAnchorList.Sorted := True;
+  fAnchorList.OwnsObjects := True;
 end;
 end;
 
 
 destructor TChmProject.Destroy;
 destructor TChmProject.Destroy;
@@ -206,6 +229,7 @@ begin
   FIndex.free;
   FIndex.free;
   FTocStream.Free;
   FTocStream.Free;
   FIndexStream.Free;
   FIndexStream.Free;
+  fAnchorList.Free;
   inherited Destroy;
   inherited Destroy;
 end;
 end;
 
 
@@ -690,11 +714,12 @@ begin
 end;
 end;
 
 
 const
 const
-   protocols   : array[0..2] of string = ('HTTP:','FTP:','MS-ITS:');
-   protocollen : array[0..2] of integer= ( 5 ,4 ,7);
+   protocols   : array[0..3] of string = ('HTTP:','FTP:','MS-ITS:', 'MAILTO:');
+   protocollen : array[0..3] of integer= ( 5 ,4 ,7, 7);
 
 
-function sanitizeurl(const basepath,instring:string;var outstring:String):Boolean;
+function TChmProject.SanitizeURL(const basepath,instring,localpath,localname:string;var outstring:String):Boolean;
 var i,j,len : integer;
 var i,j,len : integer;
+  Anchor: String;
 begin
 begin
   result:=true; outstring:='';
   result:=true; outstring:='';
   if instring='' then
   if instring='' then
@@ -703,6 +728,7 @@ begin
   len:=length(instring);
   len:=length(instring);
   if len=0 then
   if len=0 then
     exit(false);
     exit(false);
+  { Check for protocols before adding local path }
   i:=0;
   i:=0;
   while (i<=high(protocols)) do
   while (i<=high(protocols)) do
     begin
     begin
@@ -710,11 +736,22 @@ begin
         exit(false);
         exit(false);
       inc(i);
       inc(i);
     end;
     end;
-   outstring:=instring;
+   outstring:=localpath+instring;
 
 
    i:=pos('#',outstring);
    i:=pos('#',outstring);
-   if i<>0 then
+   if i<>0 then begin
+     if i > 1 then
+       Anchor := outstring
+     else
+       Anchor := localname+outstring;
+     j := fAnchorList.IndexOf(Anchor);
+     if j < 0 then begin
+       fAnchorList.AddObject(Anchor,TFirstReference.Create(localname));
+       Anchor := '(new) '+Anchor;
+     end;
+     Error(CHMNote, 'Anchor found '+Anchor+' while scanning '+localname,1);
      delete(outstring,i,length(outstring)-i+1);
      delete(outstring,i,length(outstring)-i+1);
+   end;
 
 
   outstring:=expandfilename(StringReplace(outstring,'%20',' ',[rfReplaceAll]));// expandfilename(instring));
   outstring:=expandfilename(StringReplace(outstring,'%20',' ',[rfReplaceAll]));// expandfilename(instring));
 
 
@@ -737,37 +774,44 @@ procedure TChmProject.ScanList(toscan,newfiles:TStrings;recursion:boolean);
 var
 var
   localpath : string;
   localpath : string;
 
 
-procedure checkattributes(node:TDomNode;attributename:string;filelist :TStringList);
+function findattribute(node:TDomNode;attributename:string):String;
 var
 var
     Attributes: TDOMNamedNodeMap;
     Attributes: TDOMNamedNodeMap;
     atnode    : TDomNode;
     atnode    : TDomNode;
-    fn        : String;
     n         : integer;
     n         : integer;
 begin
 begin
+  Result := '';
   if assigned(node) then
   if assigned(node) then
     begin
     begin
       Attributes:=node.Attributes;
       Attributes:=node.Attributes;
       if assigned(attributes) then
       if assigned(attributes) then
-         begin
-           for n:=0 to attributes.length-1 do
-             begin
-               atnode :=attributes[n];
-               if assigned(atnode) and (uppercase(atnode.nodename)=attributename) then
-                 begin
-                   if sanitizeurl(fbasepath,localpath+atnode.nodevalue,fn) then
-                    if not FileInTotalList(uppercase(fn)) then
-                      filelist.add(fn);
-                 end;
-             end;
-         end;
+        for n:=0 to attributes.length-1 do
+          begin
+            atnode :=attributes[n];
+            if assigned(atnode) and (uppercase(atnode.nodename)=attributename) then
+              exit(atnode.nodevalue);
+          end;
     end;
     end;
 end;
 end;
 
 
+procedure checkattributes(node:TDomNode;attributename:string; const localname: string; filelist :TStringList);
+var
+    fn  : String;
+    val : String;
+begin
+  val := findattribute(node,attributename);
+  if sanitizeurl(fbasepath,val,localpath,localname,fn) then
+    if (Length(fn) > 0) { Skip links to self using named anchors }
+        and not FileInTotalList(uppercase(fn)) then
+      filelist.add(fn);
+end;
+
 
 
-function scantags(prnt:TDomNode;filelist:TStringlist):TDomNode;
+function scantags(prnt:TDomNode; const localname: string; filelist:TStringlist):TDomNode;
 // Seach first matching tag in siblings
 // Seach first matching tag in siblings
 var chld: TDomNode;
 var chld: TDomNode;
     s   : ansistring;
     s   : ansistring;
+    i   : Integer;
 begin
 begin
   result:=nil;
   result:=nil;
   if assigned(prnt )  then
   if assigned(prnt )  then
@@ -775,24 +819,39 @@ begin
       chld:=prnt.firstchild;
       chld:=prnt.firstchild;
       while assigned(chld) do
       while assigned(chld) do
         begin
         begin
-          scantags(chld,filelist);  // depth first.
+          scantags(chld, localname, filelist);  // depth first.
           if (chld is TDomElement) then
           if (chld is TDomElement) then
             begin
             begin
               s:=uppercase(tdomelement(chld).tagname);
               s:=uppercase(tdomelement(chld).tagname);
               if s='LINK' then
               if s='LINK' then
                 begin
                 begin
                   //printattributes(chld,'');
                   //printattributes(chld,'');
-                  checkattributes(chld,'HREF',filelist);
+                  checkattributes(chld,'HREF',localname,filelist);
                 end;
                 end;
              if s='IMG'then
              if s='IMG'then
                begin
                begin
                   //printattributes(chld,'');
                   //printattributes(chld,'');
-                  checkattributes(chld,'SRC',filelist);
+                  checkattributes(chld,'SRC',localname,filelist);
                end;
                end;
              if s='A'then
              if s='A'then
                begin
                begin
                   //printattributes(chld,'');
                   //printattributes(chld,'');
-                  checkattributes(chld,'HREF',filelist);
+                  checkattributes(chld,'HREF',localname,filelist);
+                  s := findattribute(chld,'NAME');
+                  if s <> '' then
+                    begin
+                      i := fAnchorList.IndexOf(localname+'#'+s);
+                      if i < 0 then begin
+                        fAnchorList.Add(localname+'#'+s);
+                        Error(ChmNote,'New Anchor with name '+s+' found while scanning '+localname,1);
+                      end else if fAnchorList.Objects[i] = nil then
+                        Error(chmwarning,'Duplicate anchor definitions with name '+s+' found while scanning '+localname,1)
+                      else begin
+                        fAnchorList.Objects[i].Free;
+                        fAnchorList.Objects[i] := nil;
+                        Error(ChmNote,'Anchor with name '+s+' defined while scanning '+localname,1);
+                      end;
+                    end;
                 end;
                 end;
             end;
             end;
           chld:=chld.nextsibling;
           chld:=chld.nextsibling;
@@ -818,7 +877,7 @@ begin
   if FileInTotalList(vn2) then
   if FileInTotalList(vn2) then
    begin
    begin
      Error(ChmNote,'Found duplicate file '+vn+' while scanning '+fn,1);
      Error(ChmNote,'Found duplicate file '+vn+' while scanning '+fn,1);
-     exit(false);
+     exit(true);
    end;
    end;
 
 
   result:=false;
   result:=false;
@@ -851,7 +910,7 @@ begin
                localpath:=extractfilepath(fn);
                localpath:=extractfilepath(fn);
                if (length(localpath)>0) and not (localpath[length(localpath)] in ['/','\']) then
                if (length(localpath)>0) and not (localpath[length(localpath)] in ['/','\']) then
                  localpath:=localpath+pathsep;
                  localpath:=localpath+pathsep;
-               scantags(domdoc,localfilelist);
+               scantags(domdoc,extractfilename(fn),localfilelist);
                for i:=0 to localFilelist.count-1 do
                for i:=0 to localFilelist.count-1 do
                  begin
                  begin
                    s:=localfilelist[i];
                    s:=localfilelist[i];
@@ -896,7 +955,7 @@ begin
   for i:=0 to it.count -1 do
   for i:=0 to it.count -1 do
     begin
     begin
       x:=it.item[i];
       x:=it.item[i];
-      if sanitizeurl(fbasepath,x.local,S) then   // sanitize, remove stuff etc.
+      if sanitizeurl(fbasepath,x.local,'','Site Map for '+x.Text,S) then   // sanitize, remove stuff etc.
         begin
         begin
           if not FileInTotalList(uppercase(s)) then
           if not FileInTotalList(uppercase(s)) then
             begin
             begin
@@ -1066,6 +1125,15 @@ begin
   Writer.Free;
   Writer.Free;
 end;
 end;
 
 
+procedure TChmProject.ShowUndefinedAnchors;
+var
+  i:Integer;
+begin
+  for i := 0 to fAnchorList.Count-1 do
+    if fAnchorList.Objects[i] <> nil then
+      Error(chmerror,'Anchor '+fAnchorList[i]+' undefined; first use '+TFirstReference(fAnchorList.Objects[i]).Location);
+end;
+
 procedure TChmProject.LoadSitemaps;
 procedure TChmProject.LoadSitemaps;
 // #IDXHDR (merged files) goes into the system file, and need to keep  TOC sitemap around
 // #IDXHDR (merged files) goes into the system file, and need to keep  TOC sitemap around
 begin
 begin

+ 2 - 2
packages/chm/src/chmreader.pas

@@ -156,7 +156,7 @@ type
     destructor Destroy; override;
     destructor Destroy; override;
     function GetObject(Name: String): TMemoryStream;
     function GetObject(Name: String): TMemoryStream;
     function IsAnOpenFile(AFileName: String): Boolean;
     function IsAnOpenFile(AFileName: String): Boolean;
-    function ObjectExists(Name: String; var fChm: TChmReader = nil): QWord;
+    function ObjectExists(Name: String; var fChm: TChmReader): QWord;
     //properties
     //properties
     property Chm[Index: Integer]: TChmReader read GetChm;
     property Chm[Index: Integer]: TChmReader read GetChm;
     property FileName[Index: Integer]: String read GetFileName;
     property FileName[Index: Integer]: String read GetFileName;
@@ -1712,7 +1712,7 @@ begin
   fUnNotifiedFiles.Clear;
   fUnNotifiedFiles.Clear;
 end;
 end;
 
 
-function TChmFileList.ObjectExists(Name: String; var fChm: TChmReader = nil): QWord;
+function TChmFileList.ObjectExists(Name: String; var fChm: TChmReader): QWord;
 begin
 begin
   Result := 0;
   Result := 0;
   if Count = 0 then exit;
   if Count = 0 then exit;

+ 8 - 8
packages/chm/src/chmwriter.pas

@@ -1282,8 +1282,8 @@ begin
   // write guid 4662DAAF-D393-11D0-9A56-00C04FB68BF7
   // write guid 4662DAAF-D393-11D0-9A56-00C04FB68BF7
   ObjStream.WriteDWord(NtoLE($4662DAAF));
   ObjStream.WriteDWord(NtoLE($4662DAAF));
   ObjStream.WriteWord(NtoLE($D393));
   ObjStream.WriteWord(NtoLE($D393));
-  ObjStream.WriteWord(NtoLE($11D0));
-  ObjStream.WriteWord(NtoLE($569A));
+  ObjStream.WriteWord(NtoLE(word($11D0)));
+  ObjStream.WriteWord(NtoLE(word($569A)));
   ObjStream.WriteByte($00);
   ObjStream.WriteByte($00);
   ObjStream.WriteByte($C0);
   ObjStream.WriteByte($C0);
   ObjStream.WriteByte($4F);
   ObjStream.WriteByte($4F);
@@ -1332,14 +1332,14 @@ begin
   ObjStream.WriteDWord(NtoLE($E66561C6));
   ObjStream.WriteDWord(NtoLE($E66561C6));
   ObjStream.WriteDWord(NtoLE($73DF6561));
   ObjStream.WriteDWord(NtoLE($73DF6561));
   ObjStream.WriteDWord(NtoLE($656F8C73));
   ObjStream.WriteDWord(NtoLE($656F8C73));
-  ObjStream.WriteWord(NtoLE($6F9C));
-  ObjStream.WriteByte(NtoLE($65));
+  ObjStream.WriteWord(NtoLE(word($6F9C)));
+  ObjStream.WriteByte($65);
   // third bit of second entry
   // third bit of second entry
   // write guid 8FA0D5A8-DEDF-11D0-9A61-00C04FB68BF7
   // write guid 8FA0D5A8-DEDF-11D0-9A61-00C04FB68BF7
   ObjStream.WriteDWord(NtoLE($8FA0D5A8));
   ObjStream.WriteDWord(NtoLE($8FA0D5A8));
   ObjStream.WriteWord(NtoLE($DEDF));
   ObjStream.WriteWord(NtoLE($DEDF));
-  ObjStream.WriteWord(NtoLE($11D0));
-  ObjStream.WriteWord(NtoLE($619A));
+  ObjStream.WriteWord(NtoLE(word($11D0)));
+  ObjStream.WriteWord(NtoLE(word($619A)));
   ObjStream.WriteByte($00);
   ObjStream.WriteByte($00);
   ObjStream.WriteByte($C0);
   ObjStream.WriteByte($C0);
   ObjStream.WriteByte($4F);
   ObjStream.WriteByte($4F);
@@ -1357,8 +1357,8 @@ begin
   // write guid 4662DAB0-D393-11D0-9A56-00C04FB68B66
   // write guid 4662DAB0-D393-11D0-9A56-00C04FB68B66
   ObjStream.WriteDWord(NtoLE($4662DAB0));
   ObjStream.WriteDWord(NtoLE($4662DAB0));
   ObjStream.WriteWord(NtoLE($D393));
   ObjStream.WriteWord(NtoLE($D393));
-  ObjStream.WriteWord(NtoLE($11D0));
-  ObjStream.WriteWord(NtoLE($569A));
+  ObjStream.WriteWord(NtoLE(word($11D0)));
+  ObjStream.WriteWord(NtoLE(word($569A)));
   ObjStream.WriteByte($00);
   ObjStream.WriteByte($00);
   ObjStream.WriteByte($C0);
   ObjStream.WriteByte($C0);
   ObjStream.WriteByte($4F);
   ObjStream.WriteByte($4F);

+ 24 - 7
packages/cocoaint/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 endif
 override PACKAGE_NAME=cocoaint
 override PACKAGE_NAME=cocoaint
 override PACKAGE_VERSION=2.7.1
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 2 - 2
packages/cocoaint/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 fpcdir=../..
 
 
 [prerules]
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 
 [rules]
 [rules]
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.

+ 24 - 7
packages/dblib/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 endif
 override PACKAGE_NAME=dblib
 override PACKAGE_NAME=dblib
 override PACKAGE_VERSION=2.7.1
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 2 - 2
packages/dblib/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 fpcdir=../..
 
 
 [prerules]
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 
 [rules]
 [rules]
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.

+ 75 - 24
packages/dblib/src/dblib.pp

@@ -69,26 +69,26 @@ const
   DBTDS_72     = 10; // Microsoft SQL Server 2005
   DBTDS_72     = 10; // Microsoft SQL Server 2005
   DBTDS_73     = 11; // Microsoft SQL Server 2008
   DBTDS_73     = 11; // Microsoft SQL Server 2008
 
 
-  //from sqlfront.h ,   sybdb.h for freetds
+  //from sqlfront.h , sybdb.h for FreeTDS
   DBSETHOST=1;
   DBSETHOST=1;
   DBSETUSER=2;
   DBSETUSER=2;
-  DBSETPWD=3;
-  DBSETAPP={$IFDEF freetds}5{$ELSE}4{$ENDIF};
+  DBSETPWD =3;
+  DBSETAPP ={$IFDEF freetds}5{$ELSE}4{$ENDIF};
   {$IFDEF freetds}
   {$IFDEF freetds}
-  DBSETHID=     4;
-  DBSETBCP=	6;
-  DBSETNATLANG=	7;
-  DBSETNOSHORT=	8;
-  DBSETHIER=	9;
-  DBSETCHARSET=	10;
-  DBSETPACKET=	11;
-  DBSETENCRYPT=	12;
-  DBSETLABELED=	13;
-  DBSETDBNAME=	14;
-   {$ELSE}
-  DBSETID=5;
-  DBSETLANG=6;
-  DBSETSECURE=7;
+  DBSETHID    = 4;
+  DBSETBCP    = 6;
+  DBSETNATLANG= 7;
+  DBSETNOSHORT= 8;
+  DBSETHIER   = 9;
+  DBSETCHARSET= 10;
+  DBSETPACKET = 11;
+  DBSETENCRYPT= 12;
+  DBSETLABELED= 13;
+  DBSETDBNAME = 14;
+  {$ELSE}
+  DBSETID     = 5;
+  DBSETLANG   = 6;
+  DBSETSECURE = 7;
   DBSET_LOGINTIME=10;
   DBSET_LOGINTIME=10;
   DBSETFALLBACK=12;
   DBSETFALLBACK=12;
   {$ENDIF}
   {$ENDIF}
@@ -143,15 +143,18 @@ const
   SQLDATETIM4=$3a;
   SQLDATETIM4=$3a;
   SQLDECIMAL=$6a;
   SQLDECIMAL=$6a;
   SQLNUMERIC=$6c;
   SQLNUMERIC=$6c;
-  //from tds.h:
+  // from proto.h:
   SYBNTEXT=$63;
   SYBNTEXT=$63;
-  SYBINT8=$7F;
-  SYBUNIQUE=$24;
+  // MS only types:
+  SYBINT8   =$7F;
+  SYBUNIQUE =$24;
   SYBVARIANT=$62;
   SYBVARIANT=$62;
-  //XSYBVARCHAR=$A7;
-  //XSYBNVARCHAR=$E7;
-  //XSYBNCHAR = $EF;
-  //XSYBBINARY= $AD;
+  SYBMSUDT  =$F0;
+  SYBMSXML  =$F1;
+  SYBMSDATE =$28;
+  SYBMSTIME =$29;
+  SYBMSDATETIME2=$2A;
+  SYBMSDATETIMEOFFSET=$2B; 
 
 
   MAXTABLENAME ={$IFDEF freetds}512+1{$ELSE}30{$ENDIF};
   MAXTABLENAME ={$IFDEF freetds}512+1{$ELSE}30{$ENDIF};
   MAXCOLNAMELEN={$IFDEF freetds}512+1{$ELSE}30{$ENDIF};
   MAXCOLNAMELEN={$IFDEF freetds}512+1{$ELSE}30{$ENDIF};
@@ -184,6 +187,7 @@ type
   ULONG=longword;
   ULONG=longword;
 
 
   // DB-Library datatypes
   // DB-Library datatypes
+  DBBOOL=byte;           // unsigned char
   DBCHAR=shortint;
   DBCHAR=shortint;
   DBBIT=byte;
   DBBIT=byte;
   DBTINYINT=byte;
   DBTINYINT=byte;
@@ -200,6 +204,18 @@ type
   end;
   end;
   PDBDATETIME=^DBDATETIME;
   PDBDATETIME=^DBDATETIME;
 
 
+  DBDATETIMEALL=record
+    time: qword;         // time, 7 digit precision (64-bit unsigned)
+    date: longint;       // date, 0 = 1900-01-01 (32-bit int)
+    offset: smallint;    // time offset (16-bit int)
+    info: word;          // unsigned short time_prec:3;
+                         // unsigned short _res:10;
+                         // unsigned short has_time:1;
+                         // unsigned short has_date:1;
+                         // unsigned short has_offset:1;
+  end;
+  PDBDATETIMEALL=^DBDATETIMEALL;
+
   // DBDATEREC structure used by dbdatecrack
   // DBDATEREC structure used by dbdatecrack
   DBDATEREC=packed record
   DBDATEREC=packed record
     case boolean of
     case boolean of
@@ -237,6 +253,11 @@ type
   end;
   end;
   PDBDATEREC=^DBDATEREC;
   PDBDATEREC=^DBDATEREC;
 
 
+  DBMONEY=record
+    mnyhigh: DBINT;
+    mnylow: ULONG;
+  end;
+
   DBNUMERIC=packed record
   DBNUMERIC=packed record
    	precision: BYTE;
    	precision: BYTE;
    	scale: BYTE;
    	scale: BYTE;
@@ -307,12 +328,15 @@ var
   function dbprtype(token:INT):PChar; cdecl; external DBLIBDLL;
   function dbprtype(token:INT):PChar; cdecl; external DBLIBDLL;
   function dbdatlen(dbproc:PDBPROCESS; column:INT):DBINT; cdecl; external DBLIBDLL;
   function dbdatlen(dbproc:PDBPROCESS; column:INT):DBINT; cdecl; external DBLIBDLL;
   function dbdata(dbproc:PDBPROCESS; column:INT):PByte; cdecl; external DBLIBDLL;
   function dbdata(dbproc:PDBPROCESS; column:INT):PByte; cdecl; external DBLIBDLL;
+  function dbwillconvert(srctype, desttype: INT):{$IFDEF freetds}DBBOOL{$ELSE}BOOL{$ENDIF}; cdecl; external DBLIBDLL;
   function dbconvert(dbproc:PDBPROCESS; srctype:INT; src:PByte; srclen:DBINT; desttype:INT; dest:PByte; destlen:DBINT):INT; cdecl; external DBLIBDLL;
   function dbconvert(dbproc:PDBPROCESS; srctype:INT; src:PByte; srclen:DBINT; desttype:INT; dest:PByte; destlen:DBINT):INT; cdecl; external DBLIBDLL;
   function dbdatecrack(dbproc:PDBPROCESS; dateinfo:PDBDATEREC; datetime: PDBDATETIME):RETCODE; cdecl; external DBLIBDLL;
   function dbdatecrack(dbproc:PDBPROCESS; dateinfo:PDBDATEREC; datetime: PDBDATETIME):RETCODE; cdecl; external DBLIBDLL;
   function dbcount(dbproc:PDBPROCESS):DBINT; cdecl; external DBLIBDLL;
   function dbcount(dbproc:PDBPROCESS):DBINT; cdecl; external DBLIBDLL;
   function dbiscount(dbproc:PDBPROCESS):BOOL; cdecl; external DBLIBDLL;
   function dbiscount(dbproc:PDBPROCESS):BOOL; cdecl; external DBLIBDLL;
   function dbcancel(dbproc:PDBPROCESS):RETCODE; cdecl; external DBLIBDLL;
   function dbcancel(dbproc:PDBPROCESS):RETCODE; cdecl; external DBLIBDLL;
   function dbcanquery(dbproc:PDBPROCESS):RETCODE; cdecl; external DBLIBDLL;
   function dbcanquery(dbproc:PDBPROCESS):RETCODE; cdecl; external DBLIBDLL;
+  function dbhasretstat(dbproc:PDBPROCESS):DBBOOL; cdecl; external DBLIBDLL;
+  function dbretstatus(dbproc:PDBPROCESS):DBINT; cdecl; external DBLIBDLL;
   procedure dbfreelogin(login:PLOGINREC); cdecl; external DBLIBDLL {$IFDEF freetds}name 'dbloginfree'{$ENDIF};
   procedure dbfreelogin(login:PLOGINREC); cdecl; external DBLIBDLL {$IFDEF freetds}name 'dbloginfree'{$ENDIF};
   procedure dbexit(); cdecl; external DBLIBDLL;
   procedure dbexit(); cdecl; external DBLIBDLL;
   {$IFDEF ntwdblib}
   {$IFDEF ntwdblib}
@@ -353,12 +377,15 @@ var
   dbprtype: function(token:INT):PChar; cdecl;
   dbprtype: function(token:INT):PChar; cdecl;
   dbdatlen: function(dbproc:PDBPROCESS; column:INT):DBINT; cdecl;
   dbdatlen: function(dbproc:PDBPROCESS; column:INT):DBINT; cdecl;
   dbdata: function(dbproc:PDBPROCESS; column:INT):PByte; cdecl;
   dbdata: function(dbproc:PDBPROCESS; column:INT):PByte; cdecl;
+  dbwillconvert: function(srctype, desttype: INT):{$IFDEF freetds}DBBOOL{$ELSE}BOOL{$ENDIF}; cdecl;
   dbconvert: function(dbproc:PDBPROCESS; srctype:INT; src:PByte; srclen:DBINT; desttype:INT; dest:PByte; destlen:DBINT):INT; cdecl;
   dbconvert: function(dbproc:PDBPROCESS; srctype:INT; src:PByte; srclen:DBINT; desttype:INT; dest:PByte; destlen:DBINT):INT; cdecl;
   dbdatecrack: function(dbproc:PDBPROCESS; dateinfo:PDBDATEREC; datetime: PDBDATETIME):RETCODE; cdecl;
   dbdatecrack: function(dbproc:PDBPROCESS; dateinfo:PDBDATEREC; datetime: PDBDATETIME):RETCODE; cdecl;
   dbcount: function(dbproc:PDBPROCESS):DBINT; cdecl;
   dbcount: function(dbproc:PDBPROCESS):DBINT; cdecl;
   dbiscount: function(dbproc:PDBPROCESS):BOOL; cdecl;
   dbiscount: function(dbproc:PDBPROCESS):BOOL; cdecl;
   dbcancel: function(dbproc:PDBPROCESS):RETCODE; cdecl;
   dbcancel: function(dbproc:PDBPROCESS):RETCODE; cdecl;
   dbcanquery: function(dbproc:PDBPROCESS):RETCODE; cdecl;
   dbcanquery: function(dbproc:PDBPROCESS):RETCODE; cdecl;
+  dbhasretstat: function(dbproc:PDBPROCESS):DBBOOL; cdecl;
+  dbretstatus: function(dbproc:PDBPROCESS):DBINT; cdecl;
   dbexit: procedure(); cdecl;
   dbexit: procedure(); cdecl;
   dbfreelogin: procedure(login:PLOGINREC); cdecl;
   dbfreelogin: procedure(login:PLOGINREC); cdecl;
   {$IFDEF ntwdblib}
   {$IFDEF ntwdblib}
@@ -392,6 +419,8 @@ procedure dbwinexit;
 {$ENDIF}
 {$ENDIF}
 function dbsetlcharset(login:PLOGINREC; charset:PChar):RETCODE;
 function dbsetlcharset(login:PLOGINREC; charset:PChar):RETCODE;
 function dbsetlsecure(login:PLOGINREC):RETCODE;
 function dbsetlsecure(login:PLOGINREC):RETCODE;
+function dbdatetimeallcrack(dta: PDBDATETIMEALL): TDateTime;
+function dbmoneytocurr(pdbmoney: PQWord): Currency;
 
 
 function InitialiseDBLib(const LibraryName : ansistring): integer;
 function InitialiseDBLib(const LibraryName : ansistring): integer;
 procedure ReleaseDBLib;
 procedure ReleaseDBLib;
@@ -447,12 +476,15 @@ begin
    pointer(dbprtype) := GetProcedureAddress(DBLibLibraryHandle,'dbprtype');
    pointer(dbprtype) := GetProcedureAddress(DBLibLibraryHandle,'dbprtype');
    pointer(dbdatlen) := GetProcedureAddress(DBLibLibraryHandle,'dbdatlen');
    pointer(dbdatlen) := GetProcedureAddress(DBLibLibraryHandle,'dbdatlen');
    pointer(dbdata) := GetProcedureAddress(DBLibLibraryHandle,'dbdata');
    pointer(dbdata) := GetProcedureAddress(DBLibLibraryHandle,'dbdata');
+   pointer(dbwillconvert) := GetProcedureAddress(DBLibLibraryHandle,'dbwillconvert');
    pointer(dbconvert) := GetProcedureAddress(DBLibLibraryHandle,'dbconvert');
    pointer(dbconvert) := GetProcedureAddress(DBLibLibraryHandle,'dbconvert');
    pointer(dbdatecrack) := GetProcedureAddress(DBLibLibraryHandle,'dbdatecrack');
    pointer(dbdatecrack) := GetProcedureAddress(DBLibLibraryHandle,'dbdatecrack');
    pointer(dbcount) := GetProcedureAddress(DBLibLibraryHandle,'dbcount');
    pointer(dbcount) := GetProcedureAddress(DBLibLibraryHandle,'dbcount');
    pointer(dbiscount) := GetProcedureAddress(DBLibLibraryHandle,'dbiscount');
    pointer(dbiscount) := GetProcedureAddress(DBLibLibraryHandle,'dbiscount');
    pointer(dbcancel) := GetProcedureAddress(DBLibLibraryHandle,'dbcancel');
    pointer(dbcancel) := GetProcedureAddress(DBLibLibraryHandle,'dbcancel');
    pointer(dbcanquery) := GetProcedureAddress(DBLibLibraryHandle,'dbcanquery');
    pointer(dbcanquery) := GetProcedureAddress(DBLibLibraryHandle,'dbcanquery');
+   pointer(dbhasretstat) := GetProcedureAddress(DBLibLibraryHandle,'dbhasretstat');
+   pointer(dbretstatus) := GetProcedureAddress(DBLibLibraryHandle,'dbretstatus');
    pointer(dbexit) := GetProcedureAddress(DBLibLibraryHandle,'dbexit');
    pointer(dbexit) := GetProcedureAddress(DBLibLibraryHandle,'dbexit');
    pointer(dbfreelogin) := GetProcedureAddress(DBLibLibraryHandle,{$IFDEF freetds}'dbloginfree'{$ELSE}'dbfreelogin'{$ENDIF});
    pointer(dbfreelogin) := GetProcedureAddress(DBLibLibraryHandle,{$IFDEF freetds}'dbloginfree'{$ELSE}'dbfreelogin'{$ENDIF});
    pointer(dbclose) := GetProcedureAddress(DBLibLibraryHandle,'dbclose');
    pointer(dbclose) := GetProcedureAddress(DBLibLibraryHandle,'dbclose');
@@ -567,6 +599,25 @@ begin
 end;
 end;
 {$ENDIF}
 {$ENDIF}
 
 
+
+function dbdatetimeallcrack(dta: PDBDATETIMEALL): TDateTime;
+begin
+  if dta^.info and $4000 = 0 then
+    Result := 0
+  else
+    Result := dta^.date + 2;
+  Result := ComposeDateTime(Result, dta^.time/MSecsPerDay/10000 + dta^.offset/MinsPerDay);
+end;
+
+function dbmoneytocurr(pdbmoney: PQWord): Currency;
+begin
+{$IFDEF ENDIAN_LITTLE}
+  PQWord(@Result)^ := pdbmoney^ shr 32 or pdbmoney^ shl 32;
+{$ELSE}
+  move(pdbmoney^, Result, sizeof(Currency));
+{$ENDIF}
+end;
+
 {
 {
 //ntwdblib uses low significant values first
 //ntwdblib uses low significant values first
 //freetds  uses variable length array (based on precision) see numeric.c: tds_numeric_bytes_per_prec
 //freetds  uses variable length array (based on precision) see numeric.c: tds_numeric_bytes_per_prec

+ 24 - 7
packages/dbus/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 endif
 override PACKAGE_NAME=dbus
 override PACKAGE_NAME=dbus
 override PACKAGE_VERSION=2.7.1
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 2 - 2
packages/dbus/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 fpcdir=../..
 
 
 [prerules]
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 
 [rules]
 [rules]
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.

+ 26 - 5
packages/dbus/examples/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -529,6 +529,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_PROGRAMS+=busexample
 override TARGET_PROGRAMS+=busexample
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_PROGRAMS+=busexample
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override TARGET_PROGRAMS+=busexample
 override TARGET_PROGRAMS+=busexample
 endif
 endif
@@ -920,7 +923,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1112,6 +1115,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -1140,10 +1144,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1799,6 +1811,15 @@ REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_DBUS=1
 REQUIRE_PACKAGES_DBUS=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_DBUS=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -2234,7 +2255,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 24 - 7
packages/dts/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 endif
 override PACKAGE_NAME=dts
 override PACKAGE_NAME=dts
 override PACKAGE_VERSION=2.7.1
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 2 - 2
packages/dts/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 fpcdir=../..
 
 
 [prerules]
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 
 [rules]
 [rules]
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.

+ 24 - 7
packages/fastcgi/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 endif
 override PACKAGE_NAME=fastcgi
 override PACKAGE_NAME=fastcgi
 override PACKAGE_VERSION=2.7.1
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 2 - 2
packages/fastcgi/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 fpcdir=../..
 
 
 [prerules]
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 
 [rules]
 [rules]
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.

+ 24 - 7
packages/fcl-async/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 endif
 override PACKAGE_NAME=fcl-async
 override PACKAGE_NAME=fcl-async
 override PACKAGE_VERSION=2.7.1
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 2 - 2
packages/fcl-async/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 fpcdir=../..
 
 
 [prerules]
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 
 [rules]
 [rules]
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.

+ 24 - 7
packages/fcl-base/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 endif
 override PACKAGE_NAME=fcl-base
 override PACKAGE_NAME=fcl-base
 override PACKAGE_VERSION=2.7.1
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 2 - 2
packages/fcl-base/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 fpcdir=../..
 
 
 [prerules]
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 
 [rules]
 [rules]
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.

+ 34 - 5
packages/fcl-base/examples/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -529,6 +529,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_PROGRAMS+=stringl dparser fstream mstream list threads testrtf cfgtest xmldump htdump testez tidea b64test b64test2 b64enc b64dec restest testz testz2 istream doecho testol testcont txmlreg testreg tstelcmd testapp testcgi testbs testbf cachetest poolmm1 poolmm2 tarmakercons tarmakerconsgzip avltreetest testmime decodeascii85 encodeascii85  sockcli isockcli dsockcli socksvr isocksvr dsocksvr testhres testnres testsres testrhre testrnre testrsre testur ipcserver ipcclient debugtest dbugsrv asiotest testtimer
 override TARGET_PROGRAMS+=stringl dparser fstream mstream list threads testrtf cfgtest xmldump htdump testez tidea b64test b64test2 b64enc b64dec restest testz testz2 istream doecho testol testcont txmlreg testreg tstelcmd testapp testcgi testbs testbf cachetest poolmm1 poolmm2 tarmakercons tarmakerconsgzip avltreetest testmime decodeascii85 encodeascii85  sockcli isockcli dsockcli socksvr isocksvr dsocksvr testhres testnres testsres testrhre testrnre testrsre testur ipcserver ipcclient debugtest dbugsrv asiotest testtimer
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_PROGRAMS+=stringl dparser fstream mstream list threads testrtf cfgtest xmldump htdump testez tidea b64test b64test2 b64enc b64dec restest testz testz2 istream doecho testol testcont txmlreg testreg tstelcmd testapp testcgi testbs testbf cachetest poolmm1 poolmm2 tarmakercons tarmakerconsgzip avltreetest testmime decodeascii85 encodeascii85
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override TARGET_PROGRAMS+=stringl dparser fstream mstream list threads testrtf cfgtest xmldump htdump testez tidea b64test b64test2 b64enc b64dec restest testz testz2 istream doecho testol testcont txmlreg testreg tstelcmd testapp testcgi testbs testbf cachetest poolmm1 poolmm2 tarmakercons tarmakerconsgzip avltreetest testmime decodeascii85 encodeascii85
 override TARGET_PROGRAMS+=stringl dparser fstream mstream list threads testrtf cfgtest xmldump htdump testez tidea b64test b64test2 b64enc b64dec restest testz testz2 istream doecho testol testcont txmlreg testreg tstelcmd testapp testcgi testbs testbf cachetest poolmm1 poolmm2 tarmakercons tarmakerconsgzip avltreetest testmime decodeascii85 encodeascii85
 endif
 endif
@@ -920,7 +923,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1112,6 +1115,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -1140,10 +1144,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -2359,6 +2371,23 @@ REQUIRE_PACKAGES_FCL-REGISTRY=1
 REQUIRE_PACKAGES_FCL-WEB=1
 REQUIRE_PACKAGES_FCL-WEB=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-XML=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-FPCUNIT=1
+REQUIRE_PACKAGES_FCL-IMAGE=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
+REQUIRE_PACKAGES_FCL-WEB=1
+REQUIRE_PACKAGES_FCL-XML=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -3122,7 +3151,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 2 - 0
packages/fcl-base/fpmake.pp

@@ -19,6 +19,7 @@ begin
     P.Version:='2.7.1';
     P.Version:='2.7.1';
     P.Dependencies.Add('univint',[Darwin,iPhoneSim]);
     P.Dependencies.Add('univint',[Darwin,iPhoneSim]);
     P.Dependencies.Add('fcl-res');
     P.Dependencies.Add('fcl-res');
+    p.Dependencies.Add('rtl-objpas');
 
 
     P.Author := '<various>';
     P.Author := '<various>';
     P.License := 'LGPL with modification, ';
     P.License := 'LGPL with modification, ';
@@ -73,6 +74,7 @@ begin
           AddUnit('contnrs');
           AddUnit('contnrs');
         end;
         end;
     T:=P.Targets.AddUnit('iostream.pp');
     T:=P.Targets.AddUnit('iostream.pp');
+    T:=P.Targets.AddUnit('nullstream.pp');
     T:=P.Targets.AddUnit('maskutils.pp');
     T:=P.Targets.AddUnit('maskutils.pp');
       T.ResourceStrings:=true;
       T.ResourceStrings:=true;
     T:=P.Targets.AddUnit('pooledmm.pp');
     T:=P.Targets.AddUnit('pooledmm.pp');

File diff suppressed because it is too large
+ 260 - 270
packages/fcl-base/src/contnrs.pp


+ 49 - 16
packages/fcl-base/src/custapp.pp

@@ -63,6 +63,7 @@ Type
     Function HasOption(Const S : String) : Boolean;
     Function HasOption(Const S : String) : Boolean;
     Function HasOption(Const C : Char; Const S : String) : Boolean;
     Function HasOption(Const C : Char; Const S : String) : Boolean;
     Function CheckOptions(Const ShortOptions : String; Const Longopts : TStrings; Opts,NonOpts : TStrings; AllErrors : Boolean = False) : String;
     Function CheckOptions(Const ShortOptions : String; Const Longopts : TStrings; Opts,NonOpts : TStrings; AllErrors : Boolean = False) : String;
+    Function CheckOptions(Const ShortOptions : String; Const Longopts : Array of string; Opts,NonOpts : TStrings; AllErrors : Boolean = False) : String;
     Function CheckOptions(Const ShortOptions : String; Const Longopts : TStrings; AllErrors : Boolean = False) : String;
     Function CheckOptions(Const ShortOptions : String; Const Longopts : TStrings; AllErrors : Boolean = False) : String;
     Function CheckOptions(Const ShortOptions : String; Const LongOpts : Array of string; AllErrors : Boolean = False) : String;
     Function CheckOptions(Const ShortOptions : String; Const LongOpts : Array of string; AllErrors : Boolean = False) : String;
     Function CheckOptions(Const ShortOptions : String; Const LongOpts : String; AllErrors : Boolean = False) : String;
     Function CheckOptions(Const ShortOptions : String; Const LongOpts : String; AllErrors : Boolean = False) : String;
@@ -181,14 +182,15 @@ begin
   Result:=GetEnvironmentVariable(VarName);
   Result:=GetEnvironmentVariable(VarName);
 end;
 end;
 
 
-Procedure TCustomApplication.GetEnvironmentList(List : TStrings;NamesOnly : Boolean);
+procedure TCustomApplication.GetEnvironmentList(List: TStrings;
+  NamesOnly: Boolean);
 
 
 begin
 begin
   // Routine must be in custapp.inc
   // Routine must be in custapp.inc
   SysGetEnvironmentList(List,NamesOnly);
   SysGetEnvironmentList(List,NamesOnly);
 end;
 end;
 
 
-Procedure TCustomApplication.GetEnvironmentList(List : TStrings);
+procedure TCustomApplication.GetEnvironmentList(List: TStrings);
 
 
 begin
 begin
   GetEnvironmentList(List,False);
   GetEnvironmentList(List,False);
@@ -229,13 +231,13 @@ begin
   // Do nothing. Override in descendent classes.
   // Do nothing. Override in descendent classes.
 end;
 end;
 
 
-Procedure TCustomApplication.DoLog(EventType : TEventType; const Msg : String);
+procedure TCustomApplication.DoLog(EventType: TEventType; const Msg: String);
 
 
 begin
 begin
   // Do nothing, override in descendants
   // Do nothing, override in descendants
 end;
 end;
 
 
-Procedure TCustomApplication.Log(EventType : TEventType; const Msg : String);
+procedure TCustomApplication.Log(EventType: TEventType; const Msg: String);
 
 
 begin
 begin
   If (FEventLogFilter=[]) or (EventType in FEventLogFilter) then
   If (FEventLogFilter=[]) or (EventType in FEventLogFilter) then
@@ -299,12 +301,13 @@ begin
   FTerminated:=True;
   FTerminated:=True;
 end;
 end;
 
 
-function TCustomApplication.GetOptionValue(Const S: String): String;
+function TCustomApplication.GetOptionValue(const S: String): String;
 begin
 begin
   Result:=GetoptionValue(#255,S);
   Result:=GetoptionValue(#255,S);
 end;
 end;
 
 
-function TCustomApplication.GetOptionValue(Const C: Char; Const S: String): String;
+function TCustomApplication.GetOptionValue(const C: Char; const S: String
+  ): String;
 
 
 Var
 Var
   B : Boolean;
   B : Boolean;
@@ -330,12 +333,13 @@ begin
     else
     else
       begin // short options have form '-o value'
       begin // short options have form '-o value'
       If (I<ParamCount) then
       If (I<ParamCount) then
-        Result:=Params[I+1];
+        if (Copy(Params[I+1],1,1)<>'-') then
+          Result:=Params[I+1];
       end;
       end;
     end;
     end;
 end;
 end;
 
 
-function TCustomApplication.HasOption(Const S: String): Boolean;
+function TCustomApplication.HasOption(const S: String): Boolean;
 
 
 Var
 Var
   B : Boolean;
   B : Boolean;
@@ -344,7 +348,8 @@ begin
   Result:=FindOptionIndex(S,B)<>-1;
   Result:=FindOptionIndex(S,B)<>-1;
 end;
 end;
 
 
-function TCustomApplication.FindOptionIndex(Const S : String; Var Longopt : Boolean) : Integer;
+function TCustomApplication.FindOptionIndex(const S: String;
+  var Longopt: Boolean): Integer;
 
 
 Var
 Var
   SO,O : String;
   SO,O : String;
@@ -380,7 +385,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-function TCustomApplication.HasOption(Const C: Char; Const S: String): Boolean;
+function TCustomApplication.HasOption(const C: Char; const S: String): Boolean;
 
 
 Var
 Var
   B : Boolean;
   B : Boolean;
@@ -390,7 +395,8 @@ begin
 end;
 end;
 
 
 
 
-Function TCustomApplication.CheckOptions(Const ShortOptions : String; Const Longopts : TStrings; AllErrors : Boolean = False) : String;
+function TCustomApplication.CheckOptions(const ShortOptions: String;
+  const Longopts: TStrings; AllErrors: Boolean): String;
 
 
 begin
 begin
   Result:=CheckOptions(ShortOptions,LongOpts,Nil,Nil,AllErrors);
   Result:=CheckOptions(ShortOptions,LongOpts,Nil,Nil,AllErrors);
@@ -401,12 +407,14 @@ ResourceString
   SErrNoOptionAllowed = 'Option at position %d does not allow an argument: %s';
   SErrNoOptionAllowed = 'Option at position %d does not allow an argument: %s';
   SErrOptionNeeded = 'Option at position %d needs an argument : %s';
   SErrOptionNeeded = 'Option at position %d needs an argument : %s';
 
 
-Function TCustomApplication.CheckOptions(Const ShortOptions : String; Const Longopts : TStrings; Opts,NonOpts : TStrings; AllErrors : Boolean = False) : String;
+function TCustomApplication.CheckOptions(const ShortOptions: String;
+  const Longopts: TStrings; Opts, NonOpts: TStrings; AllErrors: Boolean
+  ): String;
 
 
 Var
 Var
   I,J,L,P : Integer;
   I,J,L,P : Integer;
   O,OV,SO : String;
   O,OV,SO : String;
-  HaveArg : Boolean;
+  UsedArg,HaveArg : Boolean;
 
 
   Function FindLongOpt(S : String) : boolean;
   Function FindLongOpt(S : String) : boolean;
 
 
@@ -414,6 +422,9 @@ Var
     I : integer;
     I : integer;
 
 
   begin
   begin
+    Result:=Assigned(LongOpts);
+    if Not Result then
+      exit;
     If CaseSensitiveOptions then
     If CaseSensitiveOptions then
       begin
       begin
       I:=LongOpts.Count-1;
       I:=LongOpts.Count-1;
@@ -496,6 +507,7 @@ begin
         else // Short Option.
         else // Short Option.
           begin
           begin
           HaveArg:=(I<ParamCount) and (Length(ParamStr(I+1))>0) and (ParamStr(I+1)[1]<>FOptionChar);
           HaveArg:=(I<ParamCount) and (Length(ParamStr(I+1))>0) and (ParamStr(I+1)[1]<>FOptionChar);
+          UsedArg:=False;
           If HaveArg then
           If HaveArg then
             OV:=Paramstr(I+1);
             OV:=Paramstr(I+1);
           If Not CaseSensitiveOptions then
           If Not CaseSensitiveOptions then
@@ -516,11 +528,12 @@ begin
                   If (J<L) or not haveArg then // Must be last in multi-opt !!
                   If (J<L) or not haveArg then // Must be last in multi-opt !!
                     AddToResult(Format(SErrOptionNeeded,[I,O[J]]));
                     AddToResult(Format(SErrOptionNeeded,[I,O[J]]));
                 O:=O[j]; // O is added to arguments.
                 O:=O[j]; // O is added to arguments.
+                UsedArg:=True;
                 end;
                 end;
               end;
               end;
             Inc(J);
             Inc(J);
             end;
             end;
-          If HaveArg then
+          If HaveArg and UsedArg then
             begin
             begin
             Inc(I); // Skip argument.
             Inc(I); // Skip argument.
             O:=O[Length(O)]; // O is added to arguments !
             O:=O[Length(O)]; // O is added to arguments !
@@ -535,7 +548,26 @@ begin
     end;
     end;
 end;
 end;
 
 
-Function TCustomApplication.CheckOptions(Const ShortOptions : String; Const LongOpts : Array of string; AllErrors : Boolean = False) : String;
+function TCustomApplication.CheckOptions(const ShortOptions: String;
+  const Longopts: array of string; Opts, NonOpts: TStrings; AllErrors: Boolean
+  ): String;
+Var
+  L : TStringList;
+  I : Integer;
+
+begin
+  L:=TStringList.Create;
+  Try
+    For I:=0 to High(LongOpts) do
+      L.Add(LongOpts[i]);
+    Result:=CheckOptions(ShortOptions,L,Opts,NonOpts,AllErrors);
+  Finally
+    L.Free;
+  end;
+end;
+
+function TCustomApplication.CheckOptions(const ShortOptions: String;
+  const LongOpts: array of string; AllErrors: Boolean): String;
 
 
 Var
 Var
   L : TStringList;
   L : TStringList;
@@ -552,7 +584,8 @@ begin
   end;
   end;
 end;
 end;
 
 
-Function TCustomApplication.CheckOptions(Const ShortOptions : String; Const LongOpts : String; AllErrors : Boolean = False) : String;
+function TCustomApplication.CheckOptions(const ShortOptions: String;
+  const LongOpts: String; AllErrors: Boolean): String;
 
 
 Const
 Const
   SepChars = ' '#10#13#9;
   SepChars = ' '#10#13#9;

+ 1 - 1
packages/fcl-base/src/fpexprpars.pp

@@ -695,7 +695,7 @@ Resourcestring
   SErrInvalidNumber = 'Invalid numerical value : %s';
   SErrInvalidNumber = 'Invalid numerical value : %s';
   SErrNoOperand = 'No operand for unary operation %s';
   SErrNoOperand = 'No operand for unary operation %s';
   SErrNoleftOperand = 'No left operand for binary operation %s';
   SErrNoleftOperand = 'No left operand for binary operation %s';
-  SErrNoRightOperand = 'No left operand for binary operation %s';
+  SErrNoRightOperand = 'No right operand for binary operation %s';
   SErrNoNegation = 'Cannot negate expression of type %s : %s';
   SErrNoNegation = 'Cannot negate expression of type %s : %s';
   SErrNoNOTOperation = 'Cannot perform "not" on expression of type %s: %s';
   SErrNoNOTOperation = 'Cannot perform "not" on expression of type %s: %s';
   SErrTypesDoNotMatch = 'Type mismatch: %s<>%s for expressions "%s" and "%s".';
   SErrTypesDoNotMatch = 'Type mismatch: %s<>%s for expressions "%s" and "%s".';

+ 7 - 4
packages/fcl-base/src/fpmimetypes.pp

@@ -28,13 +28,12 @@ Type
   TMimeType = Class(TObject)
   TMimeType = Class(TObject)
   private
   private
     FExtensions: String;
     FExtensions: String;
-    FExtentions: String;
     FMimeType: String;
     FMimeType: String;
   Public
   Public
     Constructor Create(Const AMimeType,AExtensions : String);
     Constructor Create(Const AMimeType,AExtensions : String);
     Procedure MergeExtensions(AExtensions : String);
     Procedure MergeExtensions(AExtensions : String);
     Property MimeType : String Read FMimeType Write FMimeType;
     Property MimeType : String Read FMimeType Write FMimeType;
-    Property Extensions : String Read FExtensions Write FExtentions;
+    Property Extensions : String Read FExtensions Write FExtensions;
   end;
   end;
 
 
   { TFPMimeTypes }
   { TFPMimeTypes }
@@ -266,7 +265,9 @@ Var
 begin
 begin
   T:=FindMimeByType(AMimeType);
   T:=FindMimeByType(AMimeType);
   if Assigned(T) then
   if Assigned(T) then
-    Result:=T.Extensions;
+    Result:=T.Extensions
+  else
+    Result:='';
 end;
 end;
 
 
 function TFPMimeTypes.GetMimeType(const AExtension: String): String;
 function TFPMimeTypes.GetMimeType(const AExtension: String): String;
@@ -276,7 +277,9 @@ Var
 begin
 begin
   T:=FindMimeByExt(AExtension);
   T:=FindMimeByExt(AExtension);
   if Assigned(T) then
   if Assigned(T) then
-    Result:=T.MimeType;
+    Result:=T.MimeType
+  else
+    Result:='';
 end;
 end;
 
 
 function TFPMimeTypes.GetKnownMimeTypes(AList: TStrings): Integer;
 function TFPMimeTypes.GetKnownMimeTypes(AList: TStrings): Integer;

+ 84 - 0
packages/fcl-base/src/inifiles.pp

@@ -56,6 +56,24 @@ interface
 uses classes, sysutils, contnrs;
 uses classes, sysutils, contnrs;
 
 
 type
 type
+
+  { TStringHash }
+
+  TStringHash  = class
+  private
+    FAddReplacesExisting: Boolean;
+    FHashList : TFPDataHashTable;
+  public
+    constructor Create(ACapacity : Cardinal = 256);
+    destructor Destroy;override;
+    procedure Add(const Key: string; Value: Integer);
+    procedure Clear;
+    function Modify(const Key: string; Value: Integer): Boolean;
+    procedure Remove(const Key: string);
+    function ValueOf(const Key: string): Integer;
+    Property AddReplacesExisting : Boolean Read FAddReplacesExisting Write FAddReplacesExisting;
+  end;
+
   { THashedStringList }
   { THashedStringList }
 
 
   THashedStringList = class(TStringList)
   THashedStringList = class(TStringList)
@@ -167,6 +185,7 @@ type
     FStream: TStream;
     FStream: TStream;
     FCacheUpdates: Boolean;
     FCacheUpdates: Boolean;
     FDirty : Boolean;
     FDirty : Boolean;
+    FBOM : String;
     procedure FillSectionList(AStrings: TStrings);
     procedure FillSectionList(AStrings: TStrings);
     Procedure DeleteSection(ASection : TIniFileSection);
     Procedure DeleteSection(ASection : TIniFileSection);
     Procedure MaybeDeleteSection(ASection : TIniFileSection);
     Procedure MaybeDeleteSection(ASection : TIniFileSection);
@@ -231,6 +250,59 @@ begin
     Result := (Copy(AString, 1, 1) = Comment);
     Result := (Copy(AString, 1, 1) = Comment);
 end;
 end;
 
 
+{ TStringHash }
+
+constructor TStringHash.Create(ACapacity : Cardinal = 256);
+begin
+  FHashList := TFPDataHashTable.Create;
+end;
+
+destructor TStringHash.Destroy;
+begin
+  FreeAndNil(FHashList);
+  inherited;
+end;
+
+procedure TStringHash.Add(const Key: string; Value: Integer);
+begin
+  if Not (AddReplacesExisting and Modify(Key,Value)) then
+    FHashList.Add(Key, Pointer(Value));
+end;
+
+procedure TStringHash.Clear;
+begin
+  FHashList.Clear;
+end;
+
+function TStringHash.Modify(const Key: string; Value: Integer): Boolean;
+Var
+  AIndex : Integer;
+  Node : THTDataNode;
+
+begin
+  Node := THTDataNode(FHashList.Find(Key));
+  Result:=Assigned(Node);
+  if Result Then
+    Node.Data:=Pointer(Value);
+end;
+
+procedure TStringHash.Remove(const Key: string);
+
+begin
+  FHashList.Delete(Key);
+end;
+
+function TStringHash.ValueOf(const Key: string): Integer;
+Var
+  N : THTDataNode;
+begin
+  N:=THTDataNode(FHashList.Find(Key));
+  If Assigned(N) then
+    Result:=PTrInt(N.Data)
+  else
+    Result:=-1;
+end;
+
 { THashedStringList }
 { THashedStringList }
 
 
 destructor THashedStringList.Destroy;
 destructor THashedStringList.Destroy;
@@ -627,6 +699,7 @@ constructor TIniFile.Create(const AFileName: string; AEscapeLineFeeds : Boolean
 var
 var
   slLines: TStringList;
   slLines: TStringList;
 begin
 begin
+  FBOM := '';
   If Not (self is TMemIniFile) then
   If Not (self is TMemIniFile) then
     StripQuotes:=True;
     StripQuotes:=True;
   inherited Create(AFileName,AEscapeLineFeeds);
   inherited Create(AFileName,AEscapeLineFeeds);
@@ -648,6 +721,7 @@ constructor TIniFile.Create(AStream: TStream; AEscapeLineFeeds : Boolean = False
 var
 var
   slLines: TStringList;
   slLines: TStringList;
 begin
 begin
+  FBOM := '';
   inherited Create('',AEscapeLineFeeds);
   inherited Create('',AEscapeLineFeeds);
   FStream := AStream;
   FStream := AStream;
   slLines := TStringList.Create;
   slLines := TStringList.Create;
@@ -672,6 +746,9 @@ begin
 end;
 end;
 
 
 procedure TIniFile.FillSectionList(AStrings: TStrings);
 procedure TIniFile.FillSectionList(AStrings: TStrings);
+const
+  Utf8Bom    = #$EF#$BB#$BF;        { Die einzelnen BOM Typen }
+
 var
 var
   i,j: integer;
   i,j: integer;
   sLine, sIdent, sValue: string;
   sLine, sIdent, sValue: string;
@@ -706,6 +783,11 @@ begin
   FSectionList.Clear;
   FSectionList.Clear;
   if FEscapeLineFeeds then
   if FEscapeLineFeeds then
     RemoveBackslashes;
     RemoveBackslashes;
+  if (AStrings.Count > 0) and (copy(AStrings.Strings[0],1,Length(Utf8Bom)) = Utf8Bom) then
+  begin
+    FBOM := Utf8Bom;
+    AStrings.Strings[0] := copy(AStrings.Strings[0],Length(Utf8Bom)+1,Length(AStrings.Strings[0]));
+  end;
   for i := 0 to AStrings.Count-1 do begin
   for i := 0 to AStrings.Count-1 do begin
     sLine := Trim(AStrings[i]);
     sLine := Trim(AStrings[i]);
     if sLine > '' then
     if sLine > '' then
@@ -963,6 +1045,8 @@ begin
         if (i < FSectionList.Count-1) and not IsComment(Name) then
         if (i < FSectionList.Count-1) and not IsComment(Name) then
           slLines.Add('');
           slLines.Add('');
       end;
       end;
+    if slLines.Count > 0 then
+      slLines.Strings[0] := FBOM + slLines.Strings[0];
     if FFileName > '' then
     if FFileName > '' then
       begin
       begin
       D:=ExtractFilePath(FFileName);
       D:=ExtractFilePath(FFileName);

+ 1 - 1
packages/fcl-base/src/nullstream.pp

@@ -45,7 +45,7 @@ type
 
 
 implementation
 implementation
 
 
-const
+Resourcestring
   SInvalidOperation = 'Cannot perform this operation on a NullStream.';
   SInvalidOperation = 'Cannot perform this operation on a NullStream.';
 
 
 Function TNullStream.GetSize : int64;
 Function TNullStream.GetSize : int64;

+ 9 - 3
packages/fcl-base/src/rttiutils.pp

@@ -62,13 +62,16 @@ type
   TReadStrEvent = function(const ASection, Item, Default: string): string of object;
   TReadStrEvent = function(const ASection, Item, Default: string): string of object;
   TWriteStrEvent = procedure(const ASection, Item, Value: string) of object;
   TWriteStrEvent = procedure(const ASection, Item, Value: string) of object;
   TEraseSectEvent = procedure(const ASection: string) of object;
   TEraseSectEvent = procedure(const ASection: string) of object;
-
+  TPropStorageOption = (psoAlwaysStoreStringsCount);
+  TPropStorageOptions = set of TPropStorageOption;
+  
   TPropsStorage = class(TObject)
   TPropsStorage = class(TObject)
   private
   private
     FObject: TObject;
     FObject: TObject;
     FOwner: TComponent;
     FOwner: TComponent;
     FPrefix: string;
     FPrefix: string;
     FSection: string;
     FSection: string;
+    FOptions : TPropStorageOptions;
     FOnReadString: TReadStrEvent;
     FOnReadString: TReadStrEvent;
     FOnWriteString: TWriteStrEvent;
     FOnWriteString: TWriteStrEvent;
     FOnEraseSection: TEraseSectEvent;
     FOnEraseSection: TEraseSectEvent;
@@ -113,6 +116,7 @@ type
     procedure LoadProperties(PropList: TStrings);
     procedure LoadProperties(PropList: TStrings);
     procedure LoadObjectsProps(AComponent: TComponent; StoredList: TStrings);
     procedure LoadObjectsProps(AComponent: TComponent; StoredList: TStrings);
     procedure StoreObjectsProps(AComponent: TComponent; StoredList: TStrings);
     procedure StoreObjectsProps(AComponent: TComponent; StoredList: TStrings);
+    Property Options : TPropStorageOptions Read FOptions Write FOptions; 
     property AObject: TObject read FObject write FObject;
     property AObject: TObject read FObject write FObject;
     property Prefix: string read FPrefix write FPrefix;
     property Prefix: string read FPrefix write FPrefix;
     property Section: string read FSection write FSection;
     property Section: string read FSection write FSection;
@@ -465,11 +469,13 @@ begin
   List := TObject(GetObjectProp(Self.FObject, PropInfo));
   List := TObject(GetObjectProp(Self.FObject, PropInfo));
   SectName := Format('%s.%s', [Section, GetItemName(PropInfo^.Name)]);
   SectName := Format('%s.%s', [Section, GetItemName(PropInfo^.Name)]);
   EraseSection(SectName);
   EraseSection(SectName);
-  if (List is TStrings) and (TStrings(List).Count > 0) then begin
+  if (List is TStrings) 
+     and ((TStrings(List).Count > 0) or (psoAlwaysStoreStringsCount in Options)) then 
+    begin
     WriteString(SectName, sCount, IntToStr(TStrings(List).Count));
     WriteString(SectName, sCount, IntToStr(TStrings(List).Count));
     for I := 0 to TStrings(List).Count - 1 do
     for I := 0 to TStrings(List).Count - 1 do
       WriteString(SectName, Format(sItem, [I]), TStrings(List)[I]);
       WriteString(SectName, Format(sItem, [I]), TStrings(List)[I]);
-  end;
+    end;
 end;
 end;
 
 
 function TPropsStorage.StoreComponentProperty(PropInfo: PPropInfo): string;
 function TPropsStorage.StoreComponentProperty(PropInfo: PPropInfo): string;

+ 24 - 7
packages/fcl-db/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 endif
 override PACKAGE_NAME=fcl-db
 override PACKAGE_NAME=fcl-db
 override PACKAGE_VERSION=2.7.1
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

+ 2 - 2
packages/fcl-db/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 fpcdir=../..
 
 
 [prerules]
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 endif
 ifdef CPU_TARGET
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 
 [rules]
 [rules]
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.
 # Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.

+ 1 - 1
packages/fcl-db/examples/dbftool.lpi

@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <CONFIG>
 <CONFIG>
   <ProjectOptions>
   <ProjectOptions>
     <Version Value="9"/>
     <Version Value="9"/>

+ 34 - 36
packages/fcl-db/examples/dbftool.lpr

@@ -36,7 +36,7 @@ type
 
 
   TDBFTool = class(TCustomApplication)
   TDBFTool = class(TCustomApplication)
   private
   private
-    procedure ExportDBF(var MyDbf: TDbf);
+    procedure ExportDBF(var MyDbf: TDbf; ExportFormat: string);
   protected
   protected
     procedure DoRun; override;
     procedure DoRun; override;
   public
   public
@@ -48,7 +48,6 @@ type
   procedure CreateDemoDBFs(Directory: string; TableLevel: integer);
   procedure CreateDemoDBFs(Directory: string; TableLevel: integer);
   // Creates 2 demonstration DBFs in Directory with dbase compatibility level
   // Creates 2 demonstration DBFs in Directory with dbase compatibility level
   // TableLevel
   // TableLevel
-  // and specified codepage (if not CODEPAGE_NOT_SPECIFIED)
   var
   var
     NewDBF: TDBF;
     NewDBF: TDBF;
     i: integer;
     i: integer;
@@ -65,7 +64,7 @@ type
       else
       else
         NewDBF.TableLevel := TableLevel;
         NewDBF.TableLevel := TableLevel;
 
 
-      NewDBF.TableName := 'CUSTOMER.DBF';
+      NewDBF.TableName := 'customer.dbf';
       writeln('Creating ', NewDBF.TableName, ' with table level ', NewDBF.TableLevel);
       writeln('Creating ', NewDBF.TableName, ' with table level ', NewDBF.TableLevel);
       if TableLevel >= 30 then
       if TableLevel >= 30 then
       begin
       begin
@@ -111,7 +110,7 @@ type
           end;
           end;
           5:
           5:
           begin
           begin
-            NewDBF.FieldByName('CUSTOMER').AsString := 'Felipe Bank';
+            NewDBF.FieldByName('CUSTOMER').AsString := 'Felipe''s Bank';
             NewDBF.FieldByName('CITY').AsString := 'Manchester';
             NewDBF.FieldByName('CITY').AsString := 'Manchester';
             NewDBF.FieldByName('COUNTRY').AsString := 'England';
             NewDBF.FieldByName('COUNTRY').AsString := 'England';
           end;
           end;
@@ -126,7 +125,7 @@ type
     NewDBF := TDBF.Create(nil);
     NewDBF := TDBF.Create(nil);
     try
     try
       if Directory = '' then
       if Directory = '' then
-        NewDBF.FilePath := '' { application directory}
+        NewDBF.FilePath := '' {application directory}
       else
       else
         NewDBF.FilePathFull := ExpandFileName(Directory) {full absolute path};
         NewDBF.FilePathFull := ExpandFileName(Directory) {full absolute path};
       if TableLevel <= 0 then
       if TableLevel <= 0 then
@@ -134,7 +133,7 @@ type
       else
       else
         NewDBF.TableLevel := TableLevel;
         NewDBF.TableLevel := TableLevel;
 
 
-      NewDBF.TableName := 'EMPLOYEE.DBF';
+      NewDBF.TableName := 'employee.dbf';
       writeln('Creating ', NewDBF.TableName, ' with table level ', NewDBF.TableLevel);
       writeln('Creating ', NewDBF.TableName, ' with table level ', NewDBF.TableLevel);
       if TableLevel >= 30 then
       if TableLevel >= 30 then
       begin
       begin
@@ -262,36 +261,43 @@ type
     end;
     end;
   end;
   end;
 
 
-  procedure PrintRecord(DBf: TDBf; RecordNumber: integer);
-  // Prints contents of a record to screen
+  procedure PrintRecords(DBf: TDBf);
+  // Prints contents of available records to screen
   var
   var
     i: integer;
     i: integer;
+    RecordCount: integer;
   begin
   begin
-    writeln('Record ' + IntToStr(RecordNumber));
-    for i := 0 to DBf.Fields.Count - 1 do
+    Dbf.First;
+    RecordCount:=0;
+    while not (Dbf.EOF) do
     begin
     begin
-      if DBF.fields[i].IsNull then
-        writeln('Field ', DBf.Fields[i].FieldName, ' is          ***NULL***')
-      else
-      if DBF.Fields[i].DataType in [ftVarBytes, ftBytes] then
-        writeln('Field ', DBF.Fields[i].FieldName, ' has value: binary ' + BinFieldToHex(DBF.Fields[i]))
-      else
-        writeln('Field ', DBf.Fields[i].FieldName, ' has value: ' + DBf.fields[i].AsString);
+      RecordCount := RecordCount + 1;
+      writeln('Record ' + IntToStr(RecordCount));
+      for i := 0 to DBf.Fields.Count - 1 do
+      begin
+        if DBF.fields[i].IsNull then
+          writeln('Field ', DBf.Fields[i].FieldName, ' is          ***NULL***')
+        else
+        if DBF.Fields[i].DataType in [ftVarBytes, ftBytes] then
+          writeln('Field ', DBF.Fields[i].FieldName, ' has value: binary ' + BinFieldToHex(DBF.Fields[i]))
+        else
+          writeln('Field ', DBf.Fields[i].FieldName, ' has value: ' + DBf.fields[i].AsString);
+      end;
+      DBF.Next;
+      writeln('');
     end;
     end;
   end;
   end;
 
 
   { TDBFTool }
   { TDBFTool }
 
 
-  procedure TDBFTool.ExportDBF(var MyDbf: TDbf);
-  // Exports recordset to another format depending on user selection
+  procedure TDBFTool.ExportDBF(var MyDbf: TDbf; ExportFormat: string);
+  // Exports recordset to specified format
   var
   var
-    ExportFormatText: string;
     ExportSettings: TCustomExportFormatSettings;
     ExportSettings: TCustomExportFormatSettings;
     Exporter: TCustomFileExporter;
     Exporter: TCustomFileExporter;
   begin
   begin
-    ExportFormatText := UpperCase(GetOptionValue('exportformat'));
     try
     try
-      case ExportFormatText of
+      case UpperCase(ExportFormat) of
         'ACCESS', 'MSACCESS':
         'ACCESS', 'MSACCESS':
         begin
         begin
           Exporter := TXMLXSDExporter.Create(nil);
           Exporter := TXMLXSDExporter.Create(nil);
@@ -390,7 +396,7 @@ type
         end
         end
         else
         else
         begin
         begin
-          writeln('***Error: Unknown export format ' + ExportFormatText + ' specified' + '. Aborting');
+          writeln('***Error: Unknown export format ' + ExportFormat + ' specified' + '. Aborting');
           Exporter := nil;
           Exporter := nil;
           ExportSettings := nil;
           ExportSettings := nil;
           Terminate;
           Terminate;
@@ -418,11 +424,10 @@ type
     ErrorMsg: string;
     ErrorMsg: string;
     FileNo: integer;
     FileNo: integer;
     MyDbf: TDbf;
     MyDbf: TDbf;
-    RecCount: integer;
-    TableLevel: integer; //todo: use it
+    TableLevel: integer;
   begin
   begin
     // quick check parameters
     // quick check parameters
-    ErrorMsg := CheckOptions('h', 'codepage: createdemo exportformat: help tablelevel:');
+    ErrorMsg := CheckOptions('h', 'createdemo exportformat: help tablelevel:');
     if ErrorMsg <> '' then
     if ErrorMsg <> '' then
     begin
     begin
       ShowException(Exception.Create(ErrorMsg));
       ShowException(Exception.Create(ErrorMsg));
@@ -488,19 +493,12 @@ type
             writeln('Database tablelevel: ' + IntToStr(MyDbf.TableLevel));
             writeln('Database tablelevel: ' + IntToStr(MyDbf.TableLevel));
             writeln('Database codepage:   ' + IntToStr(MyDBF.CodePage));
             writeln('Database codepage:   ' + IntToStr(MyDBF.CodePage));
 
 
-            RecCount := 1;
-            while not (MyDbf.EOF) do
-            begin
-              PrintRecord(MyDBF, RecCount);
-              MyDBF.Next;
-              RecCount := RecCount + 1;
-              writeln('');
-            end;
+            PrintRecords(MyDBF);
 
 
             if HasOption('exportformat') then
             if HasOption('exportformat') then
             begin
             begin
               try
               try
-                ExportDBF(MyDbf);
+                ExportDBF(MyDbf,GetOptionValue('exportformat'));
               except
               except
                 on E: Exception do
                 on E: Exception do
                 begin
                 begin
@@ -551,7 +549,7 @@ type
     writeln(' 30                    Visual FoxPro');
     writeln(' 30                    Visual FoxPro');
     writeln(' --exportformat=<text> export dbfs to format. Format can be:');
     writeln(' --exportformat=<text> export dbfs to format. Format can be:');
     writeln(' access                Microsoft Access XML');
     writeln(' access                Microsoft Access XML');
-    writeln(' adonet                ADO.Net dataset');
+    writeln(' adonet                ADO.Net dataset XML');
     writeln(' csvexcel              Excel/Creativyst format CSV text file (with locale dependent output)');
     writeln(' csvexcel              Excel/Creativyst format CSV text file (with locale dependent output)');
     writeln(' csvRFC4180            LibreOffice/RFC4180 format CSV text file');
     writeln(' csvRFC4180            LibreOffice/RFC4180 format CSV text file');
     writeln(' dataset               Delphi dataset XML');
     writeln(' dataset               Delphi dataset XML');

+ 60 - 0
packages/fcl-db/examples/sqlite3loadlib.lpr

@@ -0,0 +1,60 @@
+program sqlite3loadlib;
+
+{$mode objfpc}{$H+}
+
+uses
+  {$IFDEF UNIX}{$IFDEF UseCThreads}
+  cthreads,
+  {$ENDIF}{$ENDIF}
+  Classes, sysutils,
+  sqldb,
+  sqldblib, sqlite3conn;
+
+var
+  LibLoader: TSQLDBLibraryLoader;
+  Conn: TSQlite3Connection;
+  Tran: TSQLTransaction;
+  Q: TSQLQuery;
+  Existed: boolean;
+begin
+  LibLoader:=TSQLDBLibraryLoader.Create(nil);
+  try
+    LibLoader.ConnectionType:='SQLite3';
+    LibLoader.LibraryName:='d:\auxinst\sqlite\sqlite3.dll';
+    LibLoader.Enabled := true;
+    LibLoader.LoadLibrary;
+  finally
+    LibLoader.Free;
+  end;
+
+  Conn:=TSQlite3Connection.create(nil);
+  try
+    Tran:=TSQLTransaction.create(nil);
+    Q:=TSQLQuery.Create(nil);
+    Conn.DatabaseName:='test.sqlite';
+    existed:=fileexists(conn.databasename);
+    Conn.Transaction:=Tran;
+    Q.DataBase:=Conn;
+    Conn.Open;
+    Tran.StartTransaction;
+    if not(existed) then
+    begin
+      // create test table
+      Conn.ExecuteDirect('create table test (id integer, name varchar(255))');
+    end;
+    Q.SQL.Text:='select id,name from test ';
+    Q.Open;
+    Q.Last; //force recordcount update
+    writeln('recordcount: '+inttostr(q.RecordCount));
+    Tran.Commit;
+    Q.Close;
+    Conn.Close;
+  finally
+    Q.Free;
+    Tran.Free;
+    Conn.Free;
+    //LibLoader.Free;
+  end;
+  writeln('Program complete. Press a key to continue.');
+  readln;
+end.

+ 99 - 0
packages/fcl-db/examples/sqlparser.pp

@@ -0,0 +1,99 @@
+program sqlparser;
+
+{**
+ * example usage of fpc TSqlParser
+ *
+ * @author : Fajar Khairil
+*}
+
+
+{$mode objfpc}{$H+}
+
+uses
+  Classes, fpsqlparser, fpsqltree;
+  
+var
+  parser : TSQLParser;
+  aInput: TStringStream;
+  source: TSQLSelectStatement;
+  QExpresion: TSQLBinaryExpression;
+  stmtSelect: TSQLSelectStatement;
+  lField: TSQLTableFieldDef;
+  lTable: TSQLSimpleTableReference;
+  lWhere: TSQLBinaryExpression;
+  leftValue: TSQLIdentifierName;
+  rightValue: TSQLIntegerLiteral;
+  
+begin
+  aInput := TStringStream.Create('SELECT name,age FROM PERSON WHERE id = 5');
+  parser := TSQLParser.Create(aInput);
+  try
+    source := TSQLSelectStatement(parser.Parse);
+
+    //TABLES AND FIELDS
+    Writeln('Tables : ',source.Tables[0].GetAsSQL([]));
+    Writeln('Fields : ',source.Fields[0].GetAsSQL([])+','+source.Fields[1].GetAsSQL([]) );
+
+    //WHERE CLAUSE
+    QExpresion := TSQLBinaryExpression(source.Where);
+    WriteLn('Where Expr Operation : ', QExpresion.Operation );
+    WriteLn('Where Expr Left : ', QExpresion.Left.GetAsSQL([]) );
+    WriteLn('Where Expr Right : ', QExpresion.Right.GetAsSQL([]) );
+    WriteLn('-----------PARSING DONE-----------');
+    WriteLn();
+
+
+    WriteLn('----------Reversing From Tree To Sql Statement ----------');
+    stmtSelect := TSQLSelectStatement.Create(nil);
+
+    //build Table
+    lTable := TSQLSimpleTableReference.Create(stmtSelect);
+    stmtSelect.Tables.add(lTable);
+    lTable.ObjectName := TSQLIdentifierName.Create(lTable);
+    lTable.ObjectName.Name:= 'persons';
+    lTable.AliasName := TSQLIdentifierName.Create(lTable);
+    lTable.AliasName.Name:= 'p';
+
+    //Build Fields
+    lField := TSQLTableFieldDef.Create(stmtSelect);
+    lField.FieldName := TSQLIdentifierName.Create(lField);
+    lField.FieldName.Name:= lTable.AliasName.Name+'.name';
+    stmtSelect.Fields.Add(lField);
+
+    lField := TSQLTableFieldDef.Create(stmtSelect);
+    lField.FieldName := TSQLIdentifierName.Create(lField);
+    lField.FieldName.Name:= lTable.AliasName.Name+'.age';
+    stmtSelect.Fields.Add(lField);
+    //end Build Fields
+
+    //Where Expression
+    lWhere := TSQLBinaryExpression.Create(stmtSelect);
+    stmtSelect.Where := lWhere;
+    lWhere.Operation:= boEQ;
+
+    //left side of BinaryExpression
+    lWhere.Left := TSQLIdentifierExpression.Create(lWhere);
+    leftValue := TSQLIdentifierName.Create(lWhere.left);
+    TSQLIdentifierExpression(lWhere.Left).Identifier :=  leftValue;
+    leftValue.Name:= lTable.AliasName.Name+'.id';
+
+    //right side of BinaryExpression
+    lWhere.right := TSQLLiteralExpression.Create(lWhere);
+    rightValue := TSQLIntegerLiteral.Create(lWhere.right);
+    TSQLLiteralExpression(lWhere.right).Literal := rightValue;
+    rightValue.Value:= 5;
+    //end Where Expression
+
+    //kick!!
+    WriteLn( stmtSelect.GetAsSQL([sfoDoubleQuotes,sfoBackQuoteIdentifier]) );
+
+    WriteLn('-----------Reverse DONE-----------');
+    WriteLn();
+  finally
+    stmtSelect.Free;
+    source.free;
+    aInput.Free;
+    parser.Free;
+  end;
+end.
+

+ 9 - 4
packages/fcl-db/fpmake.pp

@@ -68,6 +68,8 @@ begin
 
 
     P.Dependencies.Add('fcl-base');
     P.Dependencies.Add('fcl-base');
     P.Dependencies.Add('fcl-xml');
     P.Dependencies.Add('fcl-xml');
+    P.Dependencies.Add('rtl-objpas');
+    P.Dependencies.Add('rtl-extra'); // clocale
     P.Dependencies.Add('ibase', SqldbConnectionOSes);
     P.Dependencies.Add('ibase', SqldbConnectionOSes);
     P.Dependencies.Add('mysql', SqldbConnectionOSes);
     P.Dependencies.Add('mysql', SqldbConnectionOSes);
     P.Dependencies.Add('odbc', SqldbConnectionOSes);
     P.Dependencies.Add('odbc', SqldbConnectionOSes);
@@ -583,6 +585,7 @@ begin
         begin
         begin
           AddUnit('db');
           AddUnit('db');
         end;
         end;
+
     T:=P.Targets.AddUnit('mysql40conn.pas', SqldbConnectionOSes);
     T:=P.Targets.AddUnit('mysql40conn.pas', SqldbConnectionOSes);
     T.ResourceStrings:=true;
     T.ResourceStrings:=true;
       with T.Dependencies do
       with T.Dependencies do
@@ -603,7 +606,8 @@ begin
           AddUnit('db');
           AddUnit('db');
           AddUnit('dbconst');
           AddUnit('dbconst');
         end;
         end;
-    T:=P.Targets.AddUnit('mysql4conn.pas', SqldbConnectionOSes);
+
+    T:=P.Targets.AddUnit('mysql50conn.pas', SqldbConnectionOSes);
     T.ResourceStrings:=true;
     T.ResourceStrings:=true;
       with T.Dependencies do
       with T.Dependencies do
         begin
         begin
@@ -613,7 +617,8 @@ begin
           AddUnit('db');
           AddUnit('db');
           AddUnit('dbconst');
           AddUnit('dbconst');
         end;
         end;
-    T:=P.Targets.AddUnit('mysql50conn.pas', SqldbConnectionOSes);
+
+    T:=P.Targets.AddUnit('mysql51conn.pas', SqldbConnectionOSes);
     T.ResourceStrings:=true;
     T.ResourceStrings:=true;
       with T.Dependencies do
       with T.Dependencies do
         begin
         begin
@@ -624,7 +629,7 @@ begin
           AddUnit('dbconst');
           AddUnit('dbconst');
         end;
         end;
 
 
-    T:=P.Targets.AddUnit('mysql51conn.pas', SqldbConnectionOSes);
+    T:=P.Targets.AddUnit('mysql55conn.pas', SqldbConnectionOSes);
     T.ResourceStrings:=true;
     T.ResourceStrings:=true;
       with T.Dependencies do
       with T.Dependencies do
         begin
         begin
@@ -635,7 +640,7 @@ begin
           AddUnit('dbconst');
           AddUnit('dbconst');
         end;
         end;
 
 
-    T:=P.Targets.AddUnit('mysql55conn.pas', SqldbConnectionOSes);
+    T:=P.Targets.AddUnit('mysql56conn.pas', SqldbConnectionOSes);
     T.ResourceStrings:=true;
     T.ResourceStrings:=true;
       with T.Dependencies do
       with T.Dependencies do
         begin
         begin

+ 36 - 5
packages/fcl-db/src/base/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -532,6 +532,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_UNITS+=dbconst db dbwhtml bufdataset_parser bufdataset dbcoll sqlscript xmldatapacketreader
 override TARGET_UNITS+=dbconst db dbwhtml bufdataset_parser bufdataset dbcoll sqlscript xmldatapacketreader
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_UNITS+=dbconst db dbwhtml bufdataset_parser bufdataset dbcoll sqlscript xmldatapacketreader
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override TARGET_UNITS+=dbconst db dbwhtml bufdataset_parser bufdataset dbcoll sqlscript xmldatapacketreader
 override TARGET_UNITS+=dbconst db dbwhtml bufdataset_parser bufdataset dbcoll sqlscript xmldatapacketreader
 endif
 endif
@@ -751,6 +754,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_RSTS+=dbconst dbcoll sqlscript xmldatapacketreader
 override TARGET_RSTS+=dbconst dbcoll sqlscript xmldatapacketreader
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_RSTS+=dbconst dbcoll sqlscript xmldatapacketreader
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override TARGET_RSTS+=dbconst dbcoll sqlscript xmldatapacketreader
 override TARGET_RSTS+=dbconst dbcoll sqlscript xmldatapacketreader
 endif
 endif
@@ -971,6 +977,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override COMPILER_OPTIONS+=-S2h
 override COMPILER_OPTIONS+=-S2h
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_OPTIONS+=-S2h
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override COMPILER_OPTIONS+=-S2h
 override COMPILER_OPTIONS+=-S2h
 endif
 endif
@@ -1190,6 +1199,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override COMPILER_UNITDIR+=../dbase
 override COMPILER_UNITDIR+=../dbase
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_UNITDIR+=../dbase
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override COMPILER_UNITDIR+=../dbase
 override COMPILER_UNITDIR+=../dbase
 endif
 endif
@@ -1580,7 +1592,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1772,6 +1784,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -1800,10 +1813,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -2529,6 +2550,16 @@ REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-XML=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -3005,7 +3036,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

File diff suppressed because it is too large
+ 295 - 178
packages/fcl-db/src/base/bufdataset.pas


+ 33 - 11
packages/fcl-db/src/base/database.inc

@@ -294,7 +294,7 @@ begin
   end;
   end;
 end;
 end;
 
 
-Procedure TDBTransaction.InternalHandleException;
+procedure TDBTransaction.InternalHandleException;
 
 
 begin
 begin
   if assigned(classes.ApplicationHandleException) then
   if assigned(classes.ApplicationHandleException) then
@@ -303,33 +303,55 @@ begin
     ShowException(ExceptObject,ExceptAddr);
     ShowException(ExceptObject,ExceptAddr);
 end;
 end;
 
 
-Procedure TDBTransaction.CheckActive;
+procedure TDBTransaction.CheckActive;
 
 
 begin
 begin
   If not FActive Then
   If not FActive Then
     DatabaseError(STransNotActive,Self);
     DatabaseError(STransNotActive,Self);
 end;
 end;
 
 
-Procedure TDBTransaction.CheckInActive;
+procedure TDBTransaction.CheckInactive;
 
 
 begin
 begin
   If FActive Then
   If FActive Then
     DatabaseError(STransActive,Self);
     DatabaseError(STransActive,Self);
 end;
 end;
 
 
-Procedure TDBTransaction.CloseTrans;
+procedure TDBTransaction.Commit;
+begin
+  EndTransaction;
+end;
+
+procedure TDBTransaction.CommitRetaining;
+begin
+  Commit;
+  StartTransaction;
+end;
+
+procedure TDBTransaction.Rollback;
+begin
+  EndTransaction;
+end;
+
+procedure TDBTransaction.RollbackRetaining;
+begin
+  RollBack;
+  StartTransaction;
+end;
+
+procedure TDBTransaction.CloseTrans;
 
 
 begin
 begin
   FActive := false;
   FActive := false;
 end;
 end;
 
 
-Procedure TDBTransaction.OpenTrans;
+procedure TDBTransaction.openTrans;
 
 
 begin
 begin
   FActive := true;
   FActive := true;
 end;
 end;
 
 
-Procedure TDBTransaction.SetDatabase (Value : TDatabase);
+procedure TDBTransaction.SetDatabase(Value: TDatabase);
 
 
 begin
 begin
   If Value<>FDatabase then
   If Value<>FDatabase then
@@ -343,14 +365,14 @@ begin
     end;
     end;
 end;
 end;
 
 
-constructor TDBTransaction.create(AOwner : TComponent);
+constructor TDBTransaction.Create(AOwner: TComponent);
 
 
 begin
 begin
   inherited create(AOwner);
   inherited create(AOwner);
   FDatasets:=TList.Create;
   FDatasets:=TList.Create;
 end;
 end;
 
 
-Procedure TDBTransaction.CheckDatabase;
+procedure TDBTransaction.CheckDatabase;
 
 
 begin
 begin
   If (FDatabase=Nil) then
   If (FDatabase=Nil) then
@@ -369,7 +391,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-Destructor TDBTransaction.Destroy;
+destructor TDBTransaction.destroy;
 
 
 begin
 begin
   Database:=Nil;
   Database:=Nil;
@@ -389,7 +411,7 @@ begin
       TDBDataset(FDataSets[i]).Transaction:=Nil;
       TDBDataset(FDataSets[i]).Transaction:=Nil;
 end;
 end;
 
 
-Function TDBTransaction.GetDataSetCount : Longint;
+function TDBTransaction.GetDataSetCount: Longint;
 
 
 begin
 begin
   If Assigned(FDatasets) Then
   If Assigned(FDatasets) Then
@@ -422,7 +444,7 @@ begin
     DatabaseErrorFmt(SDatasetRegistered,[DS.Name]);
     DatabaseErrorFmt(SDatasetRegistered,[DS.Name]);
 end;
 end;
 
 
-Function TDBTransaction.GetDataset(Index : longint) : TDBDataset;
+function TDBTransaction.GetDataset(Index: longint): TDBDataset;
 
 
 begin
 begin
   If Assigned(FDatasets) then
   If Assigned(FDatasets) then

File diff suppressed because it is too large
+ 143 - 127
packages/fcl-db/src/base/dataset.inc


+ 12 - 6
packages/fcl-db/src/base/datasource.inc

@@ -463,6 +463,8 @@ Var
   DS : TDataset;
   DS : TDataset;
   F  : TField;
   F  : TField;
   I : Integer;
   I : Integer;
+  P : TParam;
+
 
 
 begin
 begin
   FN:='';
   FN:='';
@@ -472,13 +474,17 @@ begin
     F:=Nil;
     F:=Nil;
     For I:=0 to FParams.Count-1 do
     For I:=0 to FParams.Count-1 do
       begin
       begin
-      If Assigned(DS) then
-        F:=DS.FindField(FParams[i].Name);
-      If (Not Assigned(DS)) or (not DS.Active) or (F<>Nil) then
+      P:=FParams[i];
+      if not P.Bound then
         begin
         begin
-        If (FN<>'') then
-          FN:=FN+';';
-        FN:=FN+FParams[i].Name; 
+        If Assigned(DS) then
+          F:=DS.FindField(P.Name);
+        If (Not Assigned(DS)) or (not DS.Active) or (F<>Nil) then
+          begin
+          If (FN<>'') then
+            FN:=FN+';';
+          FN:=FN+P.Name;
+          end;
         end;
         end;
       end;
       end;
     end;
     end;

+ 147 - 102
packages/fcl-db/src/base/db.pas

@@ -1,6 +1,6 @@
 {
 {
     This file is part of the Free Pascal run time library.
     This file is part of the Free Pascal run time library.
-    Copyright (c) 1999-2000 by Michael Van Canneyt, member of the
+    Copyright (c) 1999-2014 by Michael Van Canneyt, member of the
     Free Pascal development team
     Free Pascal development team
 
 
 
 
@@ -100,13 +100,8 @@ type
 
 
   TFieldClass = class of TField;
   TFieldClass = class of TField;
 
 
-{
-  TFieldType = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord,
-    ftBoolean, ftFloat, ftDate, ftTime, ftDateTime,
-    ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic,
-    ftFmtMemo, ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor);
-}
-
+  // Data type for field.
+  // The order is determined by Delphi compatibility
   TFieldType = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord,
   TFieldType = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord,
     ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate,  ftTime, ftDateTime,
     ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate,  ftTime, ftDateTime,
     ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo,
     ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo,
@@ -115,7 +110,7 @@ type
     ftDataSet, ftOraBlob, ftOraClob, ftVariant, ftInterface,
     ftDataSet, ftOraBlob, ftOraClob, ftVariant, ftInterface,
     ftIDispatch, ftGuid, ftTimeStamp, ftFMTBcd, ftFixedWideChar, ftWideMemo);
     ftIDispatch, ftGuid, ftTimeStamp, ftFMTBcd, ftFixedWideChar, ftWideMemo);
 
 
-{ Part of DBCommon, but temporary defined here (bug 8206) }
+{ Part of DBCommon, but temporarily defined here (bug 8206) }
 
 
  TFieldMap = array[TFieldType] of Byte;
  TFieldMap = array[TFieldType] of Byte;
 
 
@@ -133,7 +128,7 @@ type
   TFieldAttribute = (faHiddenCol, faReadonly, faRequired, faLink, faUnNamed, faFixed);
   TFieldAttribute = (faHiddenCol, faReadonly, faRequired, faLink, faUnNamed, faFixed);
   TFieldAttributes = set of TFieldAttribute;
   TFieldAttributes = set of TFieldAttribute;
 
 
-  { TNamedItem }
+{ TNamedItem }
 
 
   TNamedItem = class(TCollectionItem)
   TNamedItem = class(TCollectionItem)
   private
   private
@@ -147,7 +142,7 @@ type
     property Name : string read FName write SetDisplayName;
     property Name : string read FName write SetDisplayName;
   end;
   end;
 
 
-  { TDefCollection }
+{ TDefCollection }
 
 
   TDefCollection = class(TOwnedCollection)
   TDefCollection = class(TOwnedCollection)
   private
   private
@@ -164,7 +159,7 @@ type
     property Updated: boolean read FUpdated write FUpdated;
     property Updated: boolean read FUpdated write FUpdated;
   end;
   end;
 
 
-  { TFieldDef }
+{ TFieldDef }
 
 
   TFieldDef = class(TNamedItem)
   TFieldDef = class(TNamedItem)
   Private
   Private
@@ -198,6 +193,7 @@ type
     property Precision: Longint read FPrecision write SetPrecision;
     property Precision: Longint read FPrecision write SetPrecision;
     property Size: Integer read FSize write SetSize;
     property Size: Integer read FSize write SetSize;
   end;
   end;
+  TFieldDefClass = Class of TFieldDef;
 
 
 { TFieldDefs }
 { TFieldDefs }
 
 
@@ -206,9 +202,12 @@ type
     FHiddenFields : Boolean;
     FHiddenFields : Boolean;
     function GetItem(Index: Longint): TFieldDef;
     function GetItem(Index: Longint): TFieldDef;
     procedure SetItem(Index: Longint; const AValue: TFieldDef);
     procedure SetItem(Index: Longint; const AValue: TFieldDef);
+  Protected
+    Class Function FieldDefClass : TFieldDefClass; virtual;
   public
   public
     constructor Create(ADataSet: TDataSet);
     constructor Create(ADataSet: TDataSet);
 //    destructor Destroy; override;
 //    destructor Destroy; override;
+    Function Add(const AName: string; ADataType: TFieldType; ASize: Word; ARequired: Boolean; AFieldNo : Integer) : TFieldDef; overload;
     procedure Add(const AName: string; ADataType: TFieldType; ASize: Word; ARequired: Boolean); overload;
     procedure Add(const AName: string; ADataType: TFieldType; ASize: Word; ARequired: Boolean); overload;
     procedure Add(const AName: string; ADataType: TFieldType; ASize: Word); overload;
     procedure Add(const AName: string; ADataType: TFieldType; ASize: Word); overload;
     procedure Add(const AName: string; ADataType: TFieldType); overload;
     procedure Add(const AName: string; ADataType: TFieldType); overload;
@@ -222,6 +221,7 @@ type
     Property HiddenFields : Boolean Read FHiddenFields Write FHiddenFields;
     Property HiddenFields : Boolean Read FHiddenFields Write FHiddenFields;
     property Items[Index: Longint]: TFieldDef read GetItem write SetItem; default;
     property Items[Index: Longint]: TFieldDef read GetItem write SetItem; default;
   end;
   end;
+  TFieldDefsClass = Class of TFieldDefs;
 
 
 { TField }
 { TField }
 
 
@@ -241,7 +241,7 @@ type
     Value: Variant;
     Value: Variant;
   end;
   end;
 
 
-  { TLookupList }
+{ TLookupList }
 
 
   TLookupList = class(TObject)
   TLookupList = class(TObject)
   private
   private
@@ -256,7 +256,7 @@ type
     procedure ValuesToStrings(AStrings: TStrings);
     procedure ValuesToStrings(AStrings: TStrings);
   end;
   end;
 
 
-  { TField }
+{ TField }
 
 
   TField = class(TComponent)
   TField = class(TComponent)
   private
   private
@@ -272,6 +272,7 @@ type
     FDisplayLabel : String;
     FDisplayLabel : String;
     FDisplayWidth : Longint;
     FDisplayWidth : Longint;
     FEditMask: TEditMask;
     FEditMask: TEditMask;
+    FFieldDef: TFieldDef;
     FFieldKind : TFieldKind;
     FFieldKind : TFieldKind;
     FFieldName : String;
     FFieldName : String;
     FFieldNo : Longint;
     FFieldNo : Longint;
@@ -302,7 +303,7 @@ type
     function GetIndex : longint;
     function GetIndex : longint;
     function GetLookup: Boolean;
     function GetLookup: Boolean;
     procedure SetAlignment(const AValue: TAlignMent);
     procedure SetAlignment(const AValue: TAlignMent);
-    procedure SetIndex(const AValue: Integer);
+    procedure SetIndex(const AValue: Longint);
     function GetDisplayText: String;
     function GetDisplayText: String;
     function GetEditText: String;
     function GetEditText: String;
     procedure SetEditText(const AValue: string);
     procedure SetEditText(const AValue: string);
@@ -410,7 +411,7 @@ type
     property FieldNo: Longint read FFieldNo;
     property FieldNo: Longint read FFieldNo;
     property IsIndexField: Boolean read FIsIndexField;
     property IsIndexField: Boolean read FIsIndexField;
     property IsNull: Boolean read GetIsNull;
     property IsNull: Boolean read GetIsNull;
-    property Lookup: Boolean read GetLookup write SetLookup;
+    property Lookup: Boolean read GetLookup write SetLookup; deprecated;
     property NewValue: Variant read GetNewValue write SetNewValue;
     property NewValue: Variant read GetNewValue write SetNewValue;
     property Offset: word read FOffset;
     property Offset: word read FOffset;
     property Size: Integer read FSize write SetSize;
     property Size: Integer read FSize write SetSize;
@@ -419,6 +420,7 @@ type
     property Value: variant read GetAsVariant write SetAsVariant;
     property Value: variant read GetAsVariant write SetAsVariant;
     property OldValue: variant read GetOldValue;
     property OldValue: variant read GetOldValue;
     property LookupList: TLookupList read GetLookupList;
     property LookupList: TLookupList read GetLookupList;
+    Property FieldDef : TFieldDef Read FFieldDef;
   published
   published
     property Alignment : TAlignment read FAlignment write SetAlignment default taLeftJustify;
     property Alignment : TAlignment read FAlignment write SetAlignment default taLeftJustify;
     property CustomConstraint: string read FCustomConstraint write FCustomConstraint;
     property CustomConstraint: string read FCustomConstraint write FCustomConstraint;
@@ -506,8 +508,8 @@ type
     property Value: WideString read GetAsWideString write SetAsWideString;
     property Value: WideString read GetAsWideString write SetAsWideString;
   end;
   end;
 
 
-
 { TNumericField }
 { TNumericField }
+
   TNumericField = class(TField)
   TNumericField = class(TField)
   Private
   Private
     FDisplayFormat : String;
     FDisplayFormat : String;
@@ -854,14 +856,21 @@ type
 
 
 { TBlobField }
 { TBlobField }
   TBlobStreamMode = (bmRead, bmWrite, bmReadWrite);
   TBlobStreamMode = (bmRead, bmWrite, bmReadWrite);
-  TBlobType = ftBlob..ftWideMemo;
+  // This type is needed for compatibility. While it should contain only blob
+  // types, it actually does not.
+  // Instead of this, please use ftBlobTypes
+  TBlobType = ftBlob..ftWideMemo deprecated
+    'Warning: Does not contain BLOB types. Please use ftBlobTypes.';
 
 
   TBlobField = class(TField)
   TBlobField = class(TField)
   private
   private
-    FBlobType : TBlobType;
     FModified : Boolean;
     FModified : Boolean;
     FTransliterate : Boolean;
     FTransliterate : Boolean;
     Function GetBlobStream (Mode : TBlobStreamMode) : TStream;
     Function GetBlobStream (Mode : TBlobStreamMode) : TStream;
+    // Wrapper that retrieves FDataType as a TBlobType
+    function GetBlobType: TBlobType;
+    // Wrapper that calls SetFieldtype
+    procedure SetBlobType(AValue: TBlobType);
   protected
   protected
     procedure FreeBuffers; override;
     procedure FreeBuffers; override;
     function GetAsBytes: TBytes; override;
     function GetAsBytes: TBytes; override;
@@ -890,7 +899,7 @@ type
     property Value: string read GetAsString write SetAsString;
     property Value: string read GetAsString write SetAsString;
     property Transliterate: Boolean read FTransliterate write FTransliterate;
     property Transliterate: Boolean read FTransliterate write FTransliterate;
   published
   published
-    property BlobType: TBlobType read FBlobType write FBlobType;
+    property BlobType: TBlobType read GetBlobType write SetBlobType;
     property Size default 0;
     property Size default 0;
   end;
   end;
 
 
@@ -1000,6 +1009,7 @@ type
   public
   public
     constructor Create(Owner: TIndexDefs; const AName, TheFields: string;
     constructor Create(Owner: TIndexDefs; const AName, TheFields: string;
       TheOptions: TIndexOptions); overload;
       TheOptions: TIndexOptions); overload;
+  published    
     property Expression: string read GetExpression write SetExpression;
     property Expression: string read GetExpression write SetExpression;
     property Fields: string read FFields write FFields;
     property Fields: string read FFields write FFields;
     property CaseInsFields: string read FCaseinsFields write SetCaseInsFields;
     property CaseInsFields: string read FCaseinsFields write SetCaseInsFields;
@@ -1080,10 +1090,11 @@ type
       FOnChange : TNotifyEvent;
       FOnChange : TNotifyEvent;
       FValidFieldKinds : TFieldKinds;
       FValidFieldKinds : TFieldKinds;
     Protected
     Protected
+      Procedure ClearFieldDefs;
       Procedure Changed;
       Procedure Changed;
       Procedure CheckfieldKind(Fieldkind : TFieldKind; Field : TField);
       Procedure CheckfieldKind(Fieldkind : TFieldKind; Field : TField);
       Function GetCount : Longint;
       Function GetCount : Longint;
-      Function GetField (Index : longint) : TField;
+      Function GetField (Index : Integer) : TField;
       Procedure SetField(Index: Integer; Value: TField);
       Procedure SetField(Index: Integer; Value: TField);
       Procedure SetFieldIndex (Field : TField;Value : Integer);
       Procedure SetFieldIndex (Field : TField;Value : Integer);
       Property OnChange : TNotifyEvent Read FOnChange Write FOnChange;
       Property OnChange : TNotifyEvent Read FOnChange Write FOnChange;
@@ -1106,9 +1117,9 @@ type
       Property Dataset : TDataset Read FDataset;
       Property Dataset : TDataset Read FDataset;
       Property Fields [Index : Integer] : TField Read GetField Write SetField; default;
       Property Fields [Index : Integer] : TField Read GetField Write SetField; default;
     end;
     end;
+  TFieldsClass = Class of TFields;
 
 
-
-  { TParam }
+{ TParam }
 
 
   TBlobData = AnsiString;  // Delphi defines it as alias to TBytes
   TBlobData = AnsiString;  // Delphi defines it as alias to TBytes
 
 
@@ -1138,6 +1149,7 @@ type
     Procedure AssignParam(Param: TParam);
     Procedure AssignParam(Param: TParam);
     Procedure AssignTo(Dest: TPersistent); override;
     Procedure AssignTo(Dest: TPersistent); override;
     Function GetAsBoolean: Boolean;
     Function GetAsBoolean: Boolean;
+    Function GetAsBytes: TBytes;
     Function GetAsCurrency: Currency;
     Function GetAsCurrency: Currency;
     Function GetAsDateTime: TDateTime;
     Function GetAsDateTime: TDateTime;
     Function GetAsFloat: Double;
     Function GetAsFloat: Double;
@@ -1150,8 +1162,10 @@ type
     Function GetDisplayName: string; override;
     Function GetDisplayName: string; override;
     Function GetIsNull: Boolean;
     Function GetIsNull: Boolean;
     Function IsEqual(AValue: TParam): Boolean;
     Function IsEqual(AValue: TParam): Boolean;
+    Procedure SetAsBCD(const AValue: Currency);
     Procedure SetAsBlob(const AValue: TBlobData);
     Procedure SetAsBlob(const AValue: TBlobData);
     Procedure SetAsBoolean(AValue: Boolean);
     Procedure SetAsBoolean(AValue: Boolean);
+    Procedure SetAsBytes(const AValue: TBytes);
     Procedure SetAsCurrency(const AValue: Currency);
     Procedure SetAsCurrency(const AValue: Currency);
     Procedure SetAsDate(const AValue: TDateTime);
     Procedure SetAsDate(const AValue: TDateTime);
     Procedure SetAsDateTime(const AValue: TDateTime);
     Procedure SetAsDateTime(const AValue: TDateTime);
@@ -1184,8 +1198,10 @@ type
     Procedure LoadFromStream(Stream: TStream; BlobType: TBlobType);
     Procedure LoadFromStream(Stream: TStream; BlobType: TBlobType);
     Procedure SetBlobData(Buffer: Pointer; ASize: Integer);
     Procedure SetBlobData(Buffer: Pointer; ASize: Integer);
     Procedure SetData(Buffer: Pointer);
     Procedure SetData(Buffer: Pointer);
+    Property AsBCD : Currency read GetAsCurrency write SetAsBCD;
     Property AsBlob : TBlobData read GetAsString write SetAsBlob;
     Property AsBlob : TBlobData read GetAsString write SetAsBlob;
     Property AsBoolean : Boolean read GetAsBoolean write SetAsBoolean;
     Property AsBoolean : Boolean read GetAsBoolean write SetAsBoolean;
+    Property AsBytes : TBytes read GetAsBytes write SetAsBytes;
     Property AsCurrency : Currency read GetAsCurrency write SetAsCurrency;
     Property AsCurrency : Currency read GetAsCurrency write SetAsCurrency;
     Property AsDate : TDateTime read GetAsDateTime write SetAsDate;
     Property AsDate : TDateTime read GetAsDateTime write SetAsDate;
     Property AsDateTime : TDateTime read GetAsDateTime write SetAsDateTime;
     Property AsDateTime : TDateTime read GetAsDateTime write SetAsDateTime;
@@ -1203,7 +1219,6 @@ type
     Property IsNull : Boolean read GetIsNull;
     Property IsNull : Boolean read GetIsNull;
     Property NativeStr : string read FNativeStr write FNativeStr;
     Property NativeStr : string read FNativeStr write FNativeStr;
     Property Text : string read GetAsString write SetText;
     Property Text : string read GetAsString write SetText;
-    Property Value : Variant read GetAsVariant write SetAsVariant stored IsParamStored;
     property AsWideString: WideString read GetAsWideString write SetAsWideString;
     property AsWideString: WideString read GetAsWideString write SetAsWideString;
   published
   published
     Property DataType : TFieldType read FDataType write SetDataType;
     Property DataType : TFieldType read FDataType write SetDataType;
@@ -1212,10 +1227,11 @@ type
     Property ParamType : TParamType read FParamType write FParamType;
     Property ParamType : TParamType read FParamType write FParamType;
     Property Precision : Integer read FPrecision write FPrecision default 0;
     Property Precision : Integer read FPrecision write FPrecision default 0;
     Property Size : Integer read FSize write FSize default 0;
     Property Size : Integer read FSize write FSize default 0;
+    Property Value : Variant read GetAsVariant write SetAsVariant stored IsParamStored;
   end;
   end;
+  TParamClass = Class of TParam;
 
 
-
-  { TParams }
+{ TParams }
 
 
   TParams = class(TCollection)
   TParams = class(TCollection)
   private
   private
@@ -1228,7 +1244,9 @@ type
     Procedure AssignTo(Dest: TPersistent); override;
     Procedure AssignTo(Dest: TPersistent); override;
     Function  GetDataSet: TDataSet;
     Function  GetDataSet: TDataSet;
     Function  GetOwner: TPersistent; override;
     Function  GetOwner: TPersistent; override;
+    Class Function ParamClass : TParamClass; virtual;
   public
   public
+    Constructor Create(AOwner: TPersistent; AItemClass : TCollectionItemClass); overload;
     Constructor Create(AOwner: TPersistent); overload;
     Constructor Create(AOwner: TPersistent); overload;
     Constructor Create; overload;
     Constructor Create; overload;
     Procedure AddParam(Value: TParam);
     Procedure AddParam(Value: TParam);
@@ -1382,7 +1400,7 @@ type
     FDisableControlsCount : Integer;
     FDisableControlsCount : Integer;
     FDisableControlsState : TDatasetState;
     FDisableControlsState : TDatasetState;
     FCurrentRecord: Longint;
     FCurrentRecord: Longint;
-    FDataSources : TList;
+    FDataSources : TFPList;
     FDefaultFields: Boolean;
     FDefaultFields: Boolean;
     FEOF: Boolean;
     FEOF: Boolean;
     FEnableControlsEvent : TDataEvent;
     FEnableControlsEvent : TDataEvent;
@@ -1468,7 +1486,7 @@ type
     procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
     procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
     function  GetFieldClass(FieldType: TFieldType): TFieldClass; virtual;
     function  GetFieldClass(FieldType: TFieldType): TFieldClass; virtual;
     Function  GetfieldCount : Integer;
     Function  GetfieldCount : Integer;
-    function  GetFieldValues(const fieldname : string) : Variant; virtual;
+    function  GetFieldValues(const FieldName : string) : Variant; virtual;
     function  GetIsIndexField(Field: TField): Boolean; virtual;
     function  GetIsIndexField(Field: TField): Boolean; virtual;
     function  GetIndexDefs(IndexDefs : TIndexDefs; IndexTypes : TIndexOptions) : TIndexDefs;
     function  GetIndexDefs(IndexDefs : TIndexDefs; IndexTypes : TIndexOptions) : TIndexDefs;
     function  GetNextRecords: Longint; virtual;
     function  GetNextRecords: Longint; virtual;
@@ -1497,7 +1515,7 @@ type
     procedure SetFiltered(Value: Boolean); virtual;
     procedure SetFiltered(Value: Boolean); virtual;
     procedure SetFilterOptions(Value: TFilterOptions); virtual;
     procedure SetFilterOptions(Value: TFilterOptions); virtual;
     procedure SetFilterText(const Value: string); virtual;
     procedure SetFilterText(const Value: string); virtual;
-    procedure SetFieldValues(const fieldname: string; Value: Variant); virtual;
+    procedure SetFieldValues(const FieldName: string; Value: Variant); virtual;
     procedure SetFound(const Value: Boolean); virtual;
     procedure SetFound(const Value: Boolean); virtual;
     procedure SetModified(Value: Boolean);
     procedure SetModified(Value: Boolean);
     procedure SetName(const Value: TComponentName); override;
     procedure SetName(const Value: TComponentName); override;
@@ -1505,7 +1523,7 @@ type
     procedure SetRecNo(Value: Longint); virtual;
     procedure SetRecNo(Value: Longint); virtual;
     procedure SetState(Value: TDataSetState);
     procedure SetState(Value: TDataSetState);
     function SetTempState(const Value: TDataSetState): TDataSetState;
     function SetTempState(const Value: TDataSetState): TDataSetState;
-    Function Tempbuffer: TRecordBuffer;
+    Function TempBuffer: TRecordBuffer;
     procedure UpdateIndexDefs; virtual;
     procedure UpdateIndexDefs; virtual;
     property ActiveRecord: Longint read FActiveRecord;
     property ActiveRecord: Longint read FActiveRecord;
     property CurrentRecord: Longint read FCurrentRecord;
     property CurrentRecord: Longint read FCurrentRecord;
@@ -1535,6 +1553,8 @@ type
     procedure SetBookmarkFlag(Buffer: TRecordBuffer; Value: TBookmarkFlag); virtual;
     procedure SetBookmarkFlag(Buffer: TRecordBuffer; Value: TBookmarkFlag); virtual;
     procedure SetBookmarkData(Buffer: TRecordBuffer; Data: Pointer); virtual;
     procedure SetBookmarkData(Buffer: TRecordBuffer; Data: Pointer); virtual;
     procedure SetUniDirectional(const Value: Boolean);
     procedure SetUniDirectional(const Value: Boolean);
+    class function FieldDefsClass : TFieldDefsClass; virtual;
+    class function FieldsClass : TFieldsClass; virtual;
   protected { abstract methods }
   protected { abstract methods }
     function GetRecord(Buffer: TRecordBuffer; GetMode: TGetMode; DoCheck: Boolean): TGetResult; virtual; abstract;
     function GetRecord(Buffer: TRecordBuffer; GetMode: TGetMode; DoCheck: Boolean): TGetResult; virtual; abstract;
     procedure InternalClose; virtual; abstract;
     procedure InternalClose; virtual; abstract;
@@ -1642,7 +1662,7 @@ type
     property RecordSize: Word read GetRecordSize;
     property RecordSize: Word read GetRecordSize;
     property State: TDataSetState read FState;
     property State: TDataSetState read FState;
     property Fields : TFields read FFieldList;
     property Fields : TFields read FFieldList;
-    property FieldValues[fieldname : string] : Variant read GetFieldValues write SetFieldValues; default;
+    property FieldValues[FieldName : string] : Variant read GetFieldValues write SetFieldValues; default;
     property Filter: string read FFilterText write SetFilterText;
     property Filter: string read FFilterText write SetFilterText;
     property Filtered: Boolean read FFiltered write SetFiltered default False;
     property Filtered: Boolean read FFiltered write SetFiltered default False;
     property FilterOptions: TFilterOptions read FFilterOptions write SetFilterOptions;
     property FilterOptions: TFilterOptions read FFilterOptions write SetFilterOptions;
@@ -1864,6 +1884,10 @@ type
     Procedure CheckDatabase;
     Procedure CheckDatabase;
     Procedure CheckActive;
     Procedure CheckActive;
     Procedure CheckInactive;
     Procedure CheckInactive;
+    procedure Commit; virtual;
+    procedure CommitRetaining; virtual;
+    procedure Rollback; virtual;
+    procedure RollbackRetaining; virtual;
     procedure EndTransaction; virtual; abstract;
     procedure EndTransaction; virtual; abstract;
     procedure StartTransaction; virtual; abstract;
     procedure StartTransaction; virtual; abstract;
     procedure InternalHandleException; virtual;
     procedure InternalHandleException; virtual;
@@ -1979,85 +2003,101 @@ type
 
 
 
 
 const
 const
-  FieldTypetoVariantMap : array[TFieldType] of Integer = (varError, varOleStr, varSmallint,
-    varInteger, varSmallint, varBoolean, varDouble, varCurrency, varCurrency,
-    varDate, varDate, varDate, varOleStr, varOleStr, varInteger, varOleStr,
-    varOleStr, varOleStr, varOleStr, varOleStr, varOleStr, varOleStr, varError,
-    varOleStr, varOleStr, varError, varError, varError, varError, varError,
-    varOleStr, varOleStr, varVariant, varUnknown, varDispatch, varOleStr,
-    varOleStr, varDouble, varOleStr,varOleStr);
+  FieldTypetoVariantMap : array[TFieldType] of Integer =
+    (
+      {ftUnknown} varError,
+      {ftString} varOleStr,
+      {ftSmallint} varSmallint,
+      {ftInteger} varInteger,
+      {ftWord} varSmallint,
+      {ftBoolean} varBoolean,
+      {ftFloat} varDouble,
+      {ftCurrency} varCurrency,
+      {ftBCD} varCurrency,
+      {ftDate} varDate,
+      {ftTime} varDate,
+      {ftDateTime} varDate,
+      {ftBytes} varOleStr,
+      {ftVarBytes} varOleStr,
+      {ftAutoInc} varInteger,
+      {ftBlob} varOleStr,
+      {ftMemo} varOleStr,
+      {ftGraphic} varOleStr,
+      {ftFmtMemo} varOleStr,
+      {ftParadoxOle} varOleStr,
+      {ftDBaseOle} varOleStr,
+      {ftTypedBinary} varOleStr,
+      {ftCursor} varError,
+      {ftFixedChar} varOleStr,
+      {ftWideString} varOleStr,
+      {ftLargeint} varError,
+      {ftADT} varError,
+      {ftArray} varError,
+      {ftReference} varError,
+      {ftDataSet} varError,
+      {ftOraBlob} varOleStr,
+      {ftOraClob} varOleStr,
+      {ftVariant} varVariant,
+      {ftInterface} varUnknown,
+      {ftIDispatch} varDispatch,
+      {ftGuid} varOleStr,
+      {ftTimeStamp} varOleStr,
+      {ftFMTBcd} varDouble,
+      {ftFixedWideChar} varOleStr,
+      {ftWideMemo} varOleStr
+    );
 
 
 
 
 Const
 Const
   Fieldtypenames : Array [TFieldType] of String[15] =
   Fieldtypenames : Array [TFieldType] of String[15] =
     (
     (
-      'Unknown',
-      'String',
-      'Smallint',
-      'Integer',
-      'Word',
-      'Boolean',
-      'Float',
-      'Currency',
-      'BCD',
-      'Date',
-      'Time',
-      'DateTime',
-      'Bytes',
-      'VarBytes',
-      'AutoInc',
-      'Blob',
-      'Memo',
-      'Graphic',
-      'FmtMemo',
-      'ParadoxOle',
-      'DBaseOle',
-      'TypedBinary',
-      'Cursor',
-      'FixedChar',
-      'WideString',
-      'Largeint',
-      'ADT',
-      'Array',
-      'Reference',
-      'DataSet',
-      'OraBlob',
-      'OraClob',
-      'Variant',
-      'Interface',
-      'IDispatch',
-      'Guid',
-      'TimeStamp',
-      'FMTBcd',
-      'FixedWideChar',
-      'WideMemo'
+      {ftUnknown} 'Unknown',
+      {ftString} 'String',
+      {ftSmallint} 'Smallint',
+      {ftInteger} 'Integer',
+      {ftWord} 'Word',
+      {ftBoolean} 'Boolean',
+      {ftFloat} 'Float',
+      {ftCurrency} 'Currency',
+      {ftBCD} 'BCD',
+      {ftDate} 'Date',
+      {ftTime} 'Time',
+      {ftDateTime} 'DateTime',
+      {ftBytes} 'Bytes',
+      {ftVarBytes} 'VarBytes',
+      {ftAutoInc} 'AutoInc',
+      {ftBlob} 'Blob',
+      {ftMemo} 'Memo',
+      {ftGraphic} 'Graphic',
+      {ftFmtMemo} 'FmtMemo',
+      {ftParadoxOle} 'ParadoxOle',
+      {ftDBaseOle} 'DBaseOle',
+      {ftTypedBinary} 'TypedBinary',
+      {ftCursor} 'Cursor',
+      {ftFixedChar} 'FixedChar',
+      {ftWideString} 'WideString',
+      {ftLargeint} 'Largeint',
+      {ftADT} 'ADT',
+      {ftArray} 'Array',
+      {ftReference} 'Reference',
+      {ftDataSet} 'DataSet',
+      {ftOraBlob} 'OraBlob',
+      {ftOraClob} 'OraClob',
+      {ftVariant} 'Variant',
+      {ftInterface} 'Interface',
+      {ftIDispatch} 'IDispatch',
+      {ftGuid} 'Guid',
+      {ftTimeStamp} 'TimeStamp',
+      {ftFMTBcd} 'FMTBcd',
+      {ftFixedWideChar} 'FixedWideChar',
+      {ftWideMemo} 'WideMemo'
     );
     );
-    { 'Unknown',
-      'String',
-      'Smallint',
-      'Integer',
-      'Word',
-      'Boolean',
-      'Float',
-      'Date',
-      'Time',
-      'DateTime',
-      'Bytes',
-      'VarBytes',
-      'AutoInc',
-      'Blob',
-      'Memo',
-      'Graphic',
-      'FmtMemo',
-      'ParadoxOle',
-      'DBaseOle',
-      'TypedBinary',
-      'Cursor'
-    );}
+
 
 
 const
 const
   DefaultFieldClasses : Array [TFieldType] of TFieldClass =
   DefaultFieldClasses : Array [TFieldType] of TFieldClass =
-    ( { ftUnknown} Tfield,
+    (
+      { ftUnknown} Tfield,
       { ftString} TStringField,
       { ftString} TStringField,
       { ftSmallint} TSmallIntField,
       { ftSmallint} TSmallIntField,
       { ftInteger} TLongintField,
       { ftInteger} TLongintField,
@@ -2102,6 +2142,11 @@ const
   dsEditModes = [dsEdit, dsInsert, dsSetKey];
   dsEditModes = [dsEdit, dsInsert, dsSetKey];
   dsWriteModes = [dsEdit, dsInsert, dsSetKey, dsCalcFields, dsFilter,
   dsWriteModes = [dsEdit, dsInsert, dsSetKey, dsCalcFields, dsFilter,
     dsNewValue, dsInternalCalc];
     dsNewValue, dsInternalCalc];
+  // Correct list of all field types that are BLOB types.
+  // Please use this instead of checking TBlobType which will give
+  // incorrect results
+  ftBlobTypes = [ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle,
+    ftDBaseOle, ftTypedBinary, ftOraBlob, ftOraClob, ftWideMemo];
 
 
 { Auxiliary functions }
 { Auxiliary functions }
 
 
@@ -2199,7 +2244,7 @@ procedure TNamedItem.SetDisplayName(const AValue: string);
 Var TmpInd : Integer;
 Var TmpInd : Integer;
 begin
 begin
   if FName=AValue then exit;
   if FName=AValue then exit;
-  if (AValue <> '') and (Collection is TFieldDefs) then
+  if (AValue <> '') and (Collection is TFieldDefs ) then
     begin
     begin
     TmpInd :=  (TDefCollection(Collection).IndexOf(AValue));
     TmpInd :=  (TDefCollection(Collection).IndexOf(AValue));
     if (TmpInd >= 0) and (TmpInd <> Index) then
     if (TmpInd >= 0) and (TmpInd <> Index) then

+ 1 - 1
packages/fcl-db/src/base/dbcoll.pp

@@ -57,7 +57,7 @@ type
 implementation
 implementation
 
 
 resourcestring
 resourcestring
-  SErrNoDatasetForField = '%s: Geen dataset om veld %s in te zoeken.';
+  SErrNoDatasetForField = '%s: no dataset to search field %s in.';
 
 
 { TFieldMap }
 { TFieldMap }
 
 

+ 71 - 36
packages/fcl-db/src/base/dsparams.inc

@@ -24,27 +24,27 @@ end;
 
 
 { TParams }
 { TParams }
 
 
-Function TParams.GetItem(Index: Integer): TParam;
+function TParams.GetItem(Index: Integer): TParam;
 begin
 begin
   Result:=(Inherited GetItem(Index)) as TParam;
   Result:=(Inherited GetItem(Index)) as TParam;
 end;
 end;
 
 
-Function TParams.GetParamValue(const ParamName: string): Variant;
+function TParams.GetParamValue(const ParamName: string): Variant;
 begin
 begin
   Result:=ParamByName(ParamName).Value;
   Result:=ParamByName(ParamName).Value;
 end;
 end;
 
 
-Procedure TParams.SetItem(Index: Integer; Value: TParam);
+procedure TParams.SetItem(Index: Integer; Value: TParam);
 begin
 begin
   Inherited SetItem(Index,Value);
   Inherited SetItem(Index,Value);
 end;
 end;
 
 
-Procedure TParams.SetParamValue(const ParamName: string; const Value: Variant);
+procedure TParams.SetParamValue(const ParamName: string; const Value: Variant);
 begin
 begin
   ParamByName(ParamName).Value:=Value;
   ParamByName(ParamName).Value:=Value;
 end;
 end;
 
 
-Procedure TParams.AssignTo(Dest: TPersistent);
+procedure TParams.AssignTo(Dest: TPersistent);
 begin
 begin
  if (Dest is TParams) then
  if (Dest is TParams) then
    TParams(Dest).Assign(Self)
    TParams(Dest).Assign(Self)
@@ -52,7 +52,7 @@ begin
    inherited AssignTo(Dest);
    inherited AssignTo(Dest);
 end;
 end;
 
 
-Function TParams.GetDataSet: TDataSet;
+function TParams.GetDataSet: TDataSet;
 begin
 begin
   If (FOwner is TDataset) Then
   If (FOwner is TDataset) Then
     Result:=TDataset(FOwner)
     Result:=TDataset(FOwner)
@@ -60,16 +60,27 @@ begin
     Result:=Nil;
     Result:=Nil;
 end;
 end;
 
 
-Function TParams.GetOwner: TPersistent;
+function TParams.GetOwner: TPersistent;
 begin
 begin
   Result:=FOwner;
   Result:=FOwner;
 end;
 end;
 
 
+class function TParams.ParamClass: TParamClass;
+begin
+  Result:=TParam;
+end;
+
+constructor TParams.Create(AOwner: TPersistent; AItemClass: TCollectionItemClass
+  );
+begin
+  Inherited Create(AItemClass);
+  FOwner:=AOwner;
+end;
+
 
 
 constructor TParams.Create(AOwner: TPersistent);
 constructor TParams.Create(AOwner: TPersistent);
 begin
 begin
-  Inherited Create(TParam);
-  Fowner:=AOwner;
+  Create(AOwner,ParamClass);
 end;
 end;
 
 
 constructor TParams.Create;
 constructor TParams.Create;
@@ -77,12 +88,12 @@ begin
   Create(TPersistent(Nil));
   Create(TPersistent(Nil));
 end;
 end;
 
 
-Procedure TParams.AddParam(Value: TParam);
+procedure TParams.AddParam(Value: TParam);
 begin
 begin
   Value.Collection:=Self;
   Value.Collection:=Self;
 end;
 end;
 
 
-Procedure TParams.AssignValues(Value: TParams);
+procedure TParams.AssignValues(Value: TParams);
 
 
 Var
 Var
   I : Integer;
   I : Integer;
@@ -98,7 +109,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-Function TParams.CreateParam(FldType: TFieldType; const ParamName: string;
+function TParams.CreateParam(FldType: TFieldType; const ParamName: string;
   ParamType: TParamType): TParam;
   ParamType: TParamType): TParam;
 
 
 begin
 begin
@@ -108,7 +119,7 @@ begin
   Result.ParamType:=ParamType;
   Result.ParamType:=ParamType;
 end;
 end;
 
 
-Function TParams.FindParam(const Value: string): TParam;
+function TParams.FindParam(const Value: string): TParam;
 
 
 Var
 Var
   I : Integer;
   I : Integer;
@@ -123,7 +134,7 @@ begin
       Dec(i);
       Dec(i);
 end;
 end;
 
 
-Procedure TParams.GetParamList(List: TList; const ParamNames: string);
+procedure TParams.GetParamList(List: TList; const ParamNames: string);
 
 
 Var
 Var
   P: TParam;
   P: TParam;
@@ -141,7 +152,7 @@ begin
   until StrPos > Length(ParamNames);
   until StrPos > Length(ParamNames);
 end;
 end;
 
 
-Function TParams.IsEqual(Value: TParams): Boolean;
+function TParams.IsEqual(Value: TParams): Boolean;
 
 
 Var
 Var
   I : Integer;
   I : Integer;
@@ -156,14 +167,14 @@ begin
     end;
     end;
 end;
 end;
 
 
-Function TParams.ParamByName(const Value: string): TParam;
+function TParams.ParamByName(const Value: string): TParam;
 begin
 begin
   Result:=FindParam(Value);
   Result:=FindParam(Value);
   If (Result=Nil) then
   If (Result=Nil) then
     DatabaseErrorFmt(SParameterNotFound,[Value],Dataset);
     DatabaseErrorFmt(SParameterNotFound,[Value],Dataset);
 end;
 end;
 
 
-Function TParams.ParseSQL(SQL: String; DoCreate: Boolean): String;
+function TParams.ParseSQL(SQL: String; DoCreate: Boolean): String;
 
 
 var pb : TParamBinding;
 var pb : TParamBinding;
     rs : string;
     rs : string;
@@ -172,7 +183,8 @@ begin
   Result := ParseSQL(SQL,DoCreate,True,True,psInterbase, pb, rs);
   Result := ParseSQL(SQL,DoCreate,True,True,psInterbase, pb, rs);
 end;
 end;
 
 
-Function TParams.ParseSQL(SQL: String; DoCreate, EscapeSlash, EscapeRepeat : Boolean; ParameterStyle : TParamStyle): String;
+function TParams.ParseSQL(SQL: String; DoCreate, EscapeSlash,
+  EscapeRepeat: Boolean; ParameterStyle: TParamStyle): String;
 
 
 var pb : TParamBinding;
 var pb : TParamBinding;
     rs : string;
     rs : string;
@@ -181,7 +193,9 @@ begin
   Result := ParseSQL(SQL,DoCreate,EscapeSlash,EscapeRepeat,ParameterStyle,pb, rs);
   Result := ParseSQL(SQL,DoCreate,EscapeSlash,EscapeRepeat,ParameterStyle,pb, rs);
 end;
 end;
 
 
-Function TParams.ParseSQL(SQL: String; DoCreate, EscapeSlash, EscapeRepeat : Boolean; ParameterStyle : TParamStyle; out ParamBinding: TParambinding): String;
+function TParams.ParseSQL(SQL: String; DoCreate, EscapeSlash,
+  EscapeRepeat: Boolean; ParameterStyle: TParamStyle; out
+  ParamBinding: TParambinding): String;
 
 
 var rs : string;
 var rs : string;
 
 
@@ -192,16 +206,12 @@ end;
 function SkipComments(var p: PChar; EscapeSlash, EscapeRepeat : Boolean) : Boolean;
 function SkipComments(var p: PChar; EscapeSlash, EscapeRepeat : Boolean) : Boolean;
 
 
 begin
 begin
-  result := false;
+  Result := False;
   case p^ of
   case p^ of
-    '''':
+    '''', '"', '`':
       begin
       begin
-        SkipQuotesString(p,'''',EscapeSlash,EscapeRepeat); // single quote delimited string
-        Result := True;
-      end;
-    '"':
-      begin
-        SkipQuotesString(p,'"',EscapeSlash,EscapeRepeat);  // double quote delimited string
+        // single quote, double quote or backtick delimited string
+        SkipQuotesString(p, p^, EscapeSlash, EscapeRepeat);
         Result := True;
         Result := True;
       end;
       end;
     '-': // possible start of -- comment
     '-': // possible start of -- comment
@@ -212,9 +222,9 @@ begin
           Result := True;
           Result := True;
           repeat // skip until at end of line
           repeat // skip until at end of line
             Inc(p);
             Inc(p);
-          until p^ in [#10, #0];
+          until p^ in [#10, #13, #0];
+          while p^ in [#10, #13] do Inc(p); // newline is part of comment
         end;
         end;
-        if p^<>#0 then Inc(p); // newline is part of comment
       end;
       end;
     '/': // possible start of /* */ comment
     '/': // possible start of /* */ comment
       begin
       begin
@@ -236,7 +246,9 @@ begin
   end; {case}
   end; {case}
 end;
 end;
 
 
-Function TParams.ParseSQL(SQL: String; DoCreate, EscapeSlash, EscapeRepeat: Boolean; ParameterStyle : TParamStyle; out ParamBinding: TParambinding; out ReplaceString : string): String;
+function TParams.ParseSQL(SQL: String; DoCreate, EscapeSlash,
+  EscapeRepeat: Boolean; ParameterStyle: TParamStyle; out
+  ParamBinding: TParambinding; out ReplaceString: string): String;
 
 
 type
 type
   // used for ParamPart
   // used for ParamPart
@@ -423,7 +435,7 @@ begin
 end;
 end;
 
 
 
 
-Procedure TParams.RemoveParam(Value: TParam);
+procedure TParams.RemoveParam(Value: TParam);
 begin
 begin
    Value.Collection:=Nil;
    Value.Collection:=Nil;
 end;
 end;
@@ -488,6 +500,17 @@ begin
     Result:=FValue;
     Result:=FValue;
 end;
 end;
 
 
+function TParam.GetAsBytes: TBytes;
+begin
+  if IsNull then
+    Result:=nil
+  else if VarIsArray(FValue) then
+    Result:=FValue
+  else
+    // todo: conversion from other variant types to TBytes
+    Result:=FValue;
+end;
+
 Function TParam.GetAsCurrency: Currency;
 Function TParam.GetAsCurrency: Currency;
 begin
 begin
   If IsNull then
   If IsNull then
@@ -564,7 +587,6 @@ begin
     Result := FValue;
     Result := FValue;
 end;
 end;
 
 
-
 Function TParam.GetAsVariant: Variant;
 Function TParam.GetAsVariant: Variant;
 begin
 begin
   if IsNull then
   if IsNull then
@@ -605,6 +627,12 @@ begin
           and (FValue=AValue.FValue);
           and (FValue=AValue.FValue);
 end;
 end;
 
 
+procedure TParam.SetAsBCD(const AValue: Currency);
+begin
+  FDataType:=ftBCD;
+  Value:=AValue;
+end;
+
 Procedure TParam.SetAsBlob(const AValue: TBlobData);
 Procedure TParam.SetAsBlob(const AValue: TBlobData);
 begin
 begin
   FDataType:=ftBlob;
   FDataType:=ftBlob;
@@ -617,16 +645,22 @@ begin
   Value:=AValue;
   Value:=AValue;
 end;
 end;
 
 
+procedure TParam.SetAsBytes(const AValue: TBytes);
+begin
+  FDataType:=ftVarBytes;
+  Value:=AValue;
+end;
+
 Procedure TParam.SetAsCurrency(const AValue: Currency);
 Procedure TParam.SetAsCurrency(const AValue: Currency);
 begin
 begin
   FDataType:=ftCurrency;
   FDataType:=ftCurrency;
-  Value:=Avalue;
+  Value:=AValue;
 end;
 end;
 
 
 Procedure TParam.SetAsDate(const AValue: TDateTime);
 Procedure TParam.SetAsDate(const AValue: TDateTime);
 begin
 begin
   FDataType:=ftDate;
   FDataType:=ftDate;
-  Value:=Avalue;
+  Value:=AValue;
 end;
 end;
 
 
 Procedure TParam.SetAsDateTime(const AValue: TDateTime);
 Procedure TParam.SetAsDateTime(const AValue: TDateTime);
@@ -712,7 +746,7 @@ begin
       if VarIsFmtBCD(Value) then
       if VarIsFmtBCD(Value) then
         FDataType:=ftFmtBCD
         FDataType:=ftFmtBCD
       else if VarIsArray(AValue) and (VarType(AValue) and varTypeMask = varByte) then
       else if VarIsArray(AValue) and (VarType(AValue) and varTypeMask = varByte) then
-        FDataType:=ftBytes
+        FDataType:=ftVarBytes
       else
       else
         FDataType:=ftUnknown;
         FDataType:=ftUnknown;
     end;
     end;
@@ -1089,7 +1123,8 @@ begin
 end;
 end;
 
 
 
 
-Procedure TParams.CopyParamValuesFromDataset(ADataset : TDataset; CopyBound : Boolean);
+procedure TParams.CopyParamValuesFromDataset(ADataset: TDataset;
+  CopyBound: Boolean);
 
 
 Var
 Var
   I : Integer;
   I : Integer;

+ 136 - 127
packages/fcl-db/src/base/fields.inc

@@ -1,6 +1,6 @@
 {
 {
     This file is part of the Free Pascal run time library.
     This file is part of the Free Pascal run time library.
-    Copyright (c) 1999-2000 by Michael Van Canneyt, member of the
+    Copyright (c) 1999-2014 by Michael Van Canneyt, member of the
     Free Pascal development team
     Free Pascal development team
 
 
     TFields and related components implementations.
     TFields and related components implementations.
@@ -15,7 +15,7 @@
  **********************************************************************}
  **********************************************************************}
 {Procedure DumpMem (P : Pointer;Size : Longint);
 {Procedure DumpMem (P : Pointer;Size : Longint);
 
 
-Var i : longint;
+var i : longint;
 
 
 begin
 begin
   Write ('Memory dump : ');
   Write ('Memory dump : ');
@@ -31,7 +31,7 @@ end;}
 Constructor TFieldDef.Create(ACollection : TCollection);
 Constructor TFieldDef.Create(ACollection : TCollection);
 
 
 begin
 begin
-  Inherited create(ACollection);
+  Inherited Create(ACollection);
   FFieldNo:=Index+1;
   FFieldNo:=Index+1;
 end;
 end;
 
 
@@ -80,7 +80,7 @@ end;
 
 
 Function TFieldDef.CreateField(AOwner: TComponent): TField;
 Function TFieldDef.CreateField(AOwner: TComponent): TField;
 
 
-Var TheField : TFieldClass;
+var TheField : TFieldClass;
 
 
 begin
 begin
 {$ifdef dsdebug}
 {$ifdef dsdebug}
@@ -89,20 +89,21 @@ begin
   TheField:=GetFieldClass;
   TheField:=GetFieldClass;
   if TheField=Nil then
   if TheField=Nil then
     DatabaseErrorFmt(SUnknownFieldType,[FName]);
     DatabaseErrorFmt(SUnknownFieldType,[FName]);
-  Result:=Thefield.Create(AOwner);
+  Result:=TheField.Create(AOwner);
   Try
   Try
+    Result.FFieldDef:=Self;
     Result.Size:=FSize;
     Result.Size:=FSize;
     Result.Required:=FRequired;
     Result.Required:=FRequired;
     Result.FFieldName:=FName;
     Result.FFieldName:=FName;
     Result.FDisplayLabel:=DisplayName;
     Result.FDisplayLabel:=DisplayName;
     Result.FFieldNo:=Self.FieldNo;
     Result.FFieldNo:=Self.FieldNo;
     Result.SetFieldType(DataType);
     Result.SetFieldType(DataType);
-    Result.FReadOnly:= (faReadOnly in Attributes);
+    Result.FReadOnly:=(faReadOnly in Attributes);
 {$ifdef dsdebug}
 {$ifdef dsdebug}
-    Writeln ('TFieldDef.CReateField : Trying to set dataset');
+    Writeln ('TFieldDef.CreateField : Trying to set dataset');
 {$endif dsdebug}
 {$endif dsdebug}
 {$ifdef dsdebug}
 {$ifdef dsdebug}
-    Writeln ('TFieldDef.CReateField : Result Fieldno : ',Result.FieldNo,' Self : ',FieldNo);
+    Writeln ('TFieldDef.CreateField : Result Fieldno : ',Result.FieldNo,'; Self : ',FieldNo);
 {$endif dsdebug}
 {$endif dsdebug}
     Result.Dataset:=TFieldDefs(Collection).Dataset;
     Result.Dataset:=TFieldDefs(Collection).Dataset;
     If (Result is TFloatField) then
     If (Result is TFloatField) then
@@ -115,7 +116,6 @@ begin
     Result.Free;
     Result.Free;
     Raise;
     Raise;
   end;
   end;
-
 end;
 end;
 
 
 procedure TFieldDef.SetAttributes(AValue: TFieldAttributes);
 procedure TFieldDef.SetAttributes(AValue: TFieldAttributes);
@@ -193,11 +193,11 @@ procedure TFieldDefs.Add(const AName: string; ADataType: TFieldType; ASize: Word
 begin
 begin
   If Length(AName)=0 Then
   If Length(AName)=0 Then
     DatabaseError(SNeedFieldName);
     DatabaseError(SNeedFieldName);
-  // the fielddef will register itself here as a owned component.
+  // the fielddef will register itself here as an owned component.
   // fieldno is 1 based !
   // fieldno is 1 based !
   BeginUpdate;
   BeginUpdate;
   try
   try
-    TFieldDef.Create(Self,AName,ADataType,ASize,Arequired,Count+1);
+    Add(AName,ADataType,ASize,Arequired,Count+1);
   finally
   finally
     EndUpdate;
     EndUpdate;
   end;
   end;
@@ -214,14 +214,24 @@ begin
   inherited Items[Index] := AValue;
   inherited Items[Index] := AValue;
 end;
 end;
 
 
-constructor TFieldDefs.Create(ADataset: TDataset);
+class function TFieldDefs.FieldDefClass: TFieldDefClass;
+begin
+  Result:=TFieldDef;
+end;
+
+constructor TFieldDefs.Create(ADataSet: TDataSet);
 begin
 begin
-  Inherited Create(ADataset, Owner, TFieldDef);
+  Inherited Create(ADataset, Owner, FieldDefClass);
+end;
+
+function TFieldDefs.Add(const AName: string; ADataType: TFieldType; ASize: Word; ARequired: Boolean; AFieldNo: Integer): TFieldDef;
+begin
+  Result:=FieldDefClass.create(Self,AName,ADataType,ASize,ARequired,AFieldNo);
 end;
 end;
 
 
 procedure TFieldDefs.Assign(FieldDefs: TFieldDefs);
 procedure TFieldDefs.Assign(FieldDefs: TFieldDefs);
 
 
-Var I : longint;
+var I : longint;
 
 
 begin
 begin
   Clear;
   Clear;
@@ -239,7 +249,7 @@ end;
 {
 {
 procedure TFieldDefs.Clear;
 procedure TFieldDefs.Clear;
 
 
-Var I : longint;
+var I : longint;
 
 
 begin
 begin
   For I:=FItems.Count-1 downto 0 do
   For I:=FItems.Count-1 downto 0 do
@@ -271,10 +281,10 @@ begin
     end;
     end;
 end;
 end;
 
 
-Function TFieldDefs.AddFieldDef : TFieldDef;
+function TFieldDefs.AddFieldDef: TFieldDef;
 
 
 begin
 begin
-  Result:=TFieldDef.Create(Self,'',ftUnknown,0,False,Count+1);
+  Result:=FieldDefClass.Create(Self,'',ftUnknown,0,False,Count+1);
 end;
 end;
 
 
 { ---------------------------------------------------------------------
 { ---------------------------------------------------------------------
@@ -457,7 +467,7 @@ begin
   raise AccessError(SInteger);
   raise AccessError(SInteger);
 end;
 end;
 
 
-function TField.GetAsVariant: Variant;
+function TField.GetAsVariant: variant;
 
 
 begin
 begin
   raise AccessError(SVariant);
   raise AccessError(SVariant);
@@ -475,7 +485,7 @@ begin
   Result := GetAsString;
   Result := GetAsString;
 end;
 end;
 
 
-function TField.GetOldValue: Variant;
+function TField.GetOldValue: variant;
 
 
 var SaveState : TDatasetState;
 var SaveState : TDatasetState;
 
 
@@ -568,7 +578,7 @@ function TField.GetData(Buffer: Pointer; NativeFormat : Boolean): Boolean;
 begin
 begin
   IF FDataset=Nil then
   IF FDataset=Nil then
     DatabaseErrorFmt(SNoDataset,[FieldName]);
     DatabaseErrorFmt(SNoDataset,[FieldName]);
-  If FVAlidating then
+  If FValidating then
     begin
     begin
     result:=assigned(FValueBuffer);
     result:=assigned(FValueBuffer);
     If Result and assigned(Buffer) then
     If Result and assigned(Buffer) then
@@ -599,7 +609,7 @@ begin
     Result:=FFieldName;
     Result:=FFieldName;
 end;
 end;
 
 
-Function TField.IsDisplayStored : Boolean;
+function TField.IsDisplayStored: Boolean;
 
 
 begin
 begin
   Result:=(DisplayLabel<>FieldName);
   Result:=(DisplayLabel<>FieldName);
@@ -620,7 +630,7 @@ begin
     Value := FLookupDataSet.Lookup(FLookupKeyfields, FDataSet.FieldValues[FKeyFields], FLookupresultField);
     Value := FLookupDataSet.Lookup(FLookupKeyfields, FDataSet.FieldValues[FKeyFields], FLookupresultField);
 end;
 end;
 
 
-function TField.getIndex : longint;
+function TField.GetIndex: longint;
 
 
 begin
 begin
   If Assigned(FDataset) then
   If Assigned(FDataset) then
@@ -653,7 +663,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-procedure TField.SetIndex(const AValue: Integer);
+procedure TField.SetIndex(const AValue: Longint);
 begin
 begin
   if FFields <> nil then FFields.SetFieldIndex(Self, AValue)
   if FFields <> nil then FFields.SetFieldIndex(Self, AValue)
 end;
 end;
@@ -780,7 +790,7 @@ begin
   Raise AccessError(SFloat);
   Raise AccessError(SFloat);
 end;
 end;
 
 
-procedure TField.SetAsVariant(const AValue: Variant);
+procedure TField.SetAsVariant(const AValue: variant);
 
 
 begin
 begin
   if VarIsNull(AValue) then
   if VarIsNull(AValue) then
@@ -795,13 +805,11 @@ end;
 
 
 
 
 procedure TField.SetAsLongint(AValue: Longint);
 procedure TField.SetAsLongint(AValue: Longint);
-
 begin
 begin
   SetAsInteger(AValue);
   SetAsInteger(AValue);
 end;
 end;
 
 
 procedure TField.SetAsInteger(AValue: Longint);
 procedure TField.SetAsInteger(AValue: Longint);
-
 begin
 begin
   raise AccessError(SInteger);
   raise AccessError(SInteger);
 end;
 end;
@@ -812,7 +820,6 @@ begin
 end;
 end;
 
 
 procedure TField.SetAsString(const AValue: string);
 procedure TField.SetAsString(const AValue: string);
-
 begin
 begin
   Raise AccessError(SString);
   Raise AccessError(SString);
 end;
 end;
@@ -837,7 +844,7 @@ begin
   FDataSet.SetFieldData(Self,Buffer, NativeFormat);
   FDataSet.SetFieldData(Self,Buffer, NativeFormat);
 end;
 end;
 
 
-Procedure TField.SetDataset (AValue : TDataset);
+procedure TField.SetDataset(AValue: TDataset);
 
 
 begin
 begin
 {$ifdef dsdebug}
 {$ifdef dsdebug}
@@ -910,7 +917,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-class function Tfield.IsBlob: Boolean;
+class function TField.IsBlob: Boolean;
 
 
 begin
 begin
   Result:=False;
   Result:=False;
@@ -1036,7 +1043,7 @@ end;
 
 
 function TStringField.GetAsBoolean: Boolean;
 function TStringField.GetAsBoolean: Boolean;
 
 
-Var S : String;
+var S : String;
 
 
 begin
 begin
   S:=GetAsString;
   S:=GetAsString;
@@ -1070,7 +1077,7 @@ end;
 
 
 function TStringField.GetAsVariant: Variant;
 function TStringField.GetAsVariant: Variant;
 
 
-Var s : string;
+var s : string;
 
 
 begin
 begin
   If GetValue(s) then
   If GetValue(s) then
@@ -1100,7 +1107,7 @@ end;
 
 
 function TStringField.GetValue(var AValue: string): Boolean;
 function TStringField.GetValue(var AValue: string): Boolean;
 
 
-Var Buf, TBuf : TStringFieldBuffer;
+var Buf, TBuf : TStringFieldBuffer;
     DynBuf, TDynBuf : Array of char;
     DynBuf, TDynBuf : Array of char;
 
 
 begin
 begin
@@ -1183,9 +1190,9 @@ begin
     else
     else
       // The data is copied into the buffer, since some TDataset descendents copy
       // The data is copied into the buffer, since some TDataset descendents copy
       // the whole buffer-length in SetData. (See bug 8477)
       // the whole buffer-length in SetData. (See bug 8477)
-      Buf := AValue;
-    // If length(AValue) > DataSize the buffer isn't terminated properly
-    Buf[DataSize-1] := #0;
+      StrPLCopy(PChar(Buf), AValue, Size);
+    // If length(AValue) > Size the buffer isn't terminated properly ?
+    Buf[Size] := #0;
     SetData(@Buf);
     SetData(@Buf);
     end
     end
   else
   else
@@ -1194,7 +1201,7 @@ begin
     if FTransliterate then
     if FTransliterate then
       DataSet.Translate(@AValue[1],@DynBuf[0],True)
       DataSet.Translate(@AValue[1],@DynBuf[0],True)
     else
     else
-      StrPLCopy(@DynBuf[0], AValue, DataSize);
+      StrPLCopy(PChar(DynBuf), AValue, Size);
     SetData(@DynBuf[0]);
     SetData(@DynBuf[0]);
     end
     end
 end;
 end;
@@ -1392,7 +1399,7 @@ end;
 
 
 function TLongintField.GetAsVariant: Variant;
 function TLongintField.GetAsVariant: Variant;
 
 
-Var L : Longint;
+var L : Longint;
 
 
 begin
 begin
   If GetValue(L) then
   If GetValue(L) then
@@ -1403,7 +1410,7 @@ end;
 
 
 function TLongintField.GetAsString: string;
 function TLongintField.GetAsString: string;
 
 
-Var L : Longint;
+var L : Longint;
 
 
 begin
 begin
   If GetValue(L) then
   If GetValue(L) then
@@ -1438,7 +1445,7 @@ end;
 
 
 function TLongintField.GetValue(var AValue: Longint): Boolean;
 function TLongintField.GetValue(var AValue: Longint): Boolean;
 
 
-Var L : Longint;
+var L : Longint;
     P : PLongint;
     P : PLongint;
 
 
 begin
 begin
@@ -1482,7 +1489,7 @@ end;
 
 
 procedure TLongintField.SetAsString(const AValue: string);
 procedure TLongintField.SetAsString(const AValue: string);
 
 
-Var L,Code : longint;
+var L,Code : longint;
 
 
 begin
 begin
   If length(AValue)=0 then
   If length(AValue)=0 then
@@ -1564,7 +1571,7 @@ end;
 
 
 function TLargeIntField.GetAsVariant: Variant;
 function TLargeIntField.GetAsVariant: Variant;
 
 
-Var L : Largeint;
+var L : Largeint;
 
 
 begin
 begin
   If GetValue(L) then
   If GetValue(L) then
@@ -1581,7 +1588,7 @@ end;
 
 
 function TLargeintField.GetAsString: string;
 function TLargeintField.GetAsString: string;
 
 
-Var L : Largeint;
+var L : Largeint;
 
 
 begin
 begin
   If GetValue(L) then
   If GetValue(L) then
@@ -1619,7 +1626,7 @@ function TLargeintField.GetValue(var AValue: Largeint): Boolean;
 type
 type
   PLargeint = ^Largeint;
   PLargeint = ^Largeint;
 
 
-Var P : PLargeint;
+var P : PLargeint;
 
 
 begin
 begin
   P:=@AValue;
   P:=@AValue;
@@ -1649,7 +1656,7 @@ end;
 
 
 procedure TLargeintField.SetAsString(const AValue: string);
 procedure TLargeintField.SetAsString(const AValue: string);
 
 
-Var L     : largeint;
+var L     : largeint;
     code  : longint;
     code  : longint;
 
 
 begin
 begin
@@ -1788,7 +1795,7 @@ end;
 
 
 function TFloatField.GetAsVariant: Variant;
 function TFloatField.GetAsVariant: Variant;
 
 
-Var f : Double;
+var f : Double;
 
 
 begin
 begin
   If GetData(@f) then
   If GetData(@f) then
@@ -1810,7 +1817,7 @@ end;
 
 
 function TFloatField.GetAsString: string;
 function TFloatField.GetAsString: string;
 
 
-Var R : Double;
+var R : Double;
 
 
 begin
 begin
   If GetData(@R) then
   If GetData(@R) then
@@ -1882,7 +1889,7 @@ end;
 
 
 procedure TFloatField.SetAsString(const AValue: string);
 procedure TFloatField.SetAsString(const AValue: string);
 
 
-Var R : Double;
+var R : Double;
 
 
 begin
 begin
   If (AValue='') then
   If (AValue='') then
@@ -1905,7 +1912,7 @@ constructor TFloatField.Create(AOwner: TComponent);
 
 
 begin
 begin
   Inherited Create(AOwner);
   Inherited Create(AOwner);
-  SetDatatype(ftfloat);
+  SetDatatype(ftFloat);
   FPrecision:=15;
   FPrecision:=15;
   FValidChars := [DecimalSeparator, '+', '-', '0'..'9', 'E', 'e'];
   FValidChars := [DecimalSeparator, '+', '-', '0'..'9', 'E', 'e'];
 end;
 end;
@@ -1944,7 +1951,7 @@ end;
 
 
 function TBooleanField.GetAsVariant: Variant;
 function TBooleanField.GetAsVariant: Variant;
 
 
-Var b : wordbool;
+var b : wordbool;
 
 
 begin
 begin
   If GetData(@b) then
   If GetData(@b) then
@@ -1955,7 +1962,7 @@ end;
 
 
 function TBooleanField.GetAsString: string;
 function TBooleanField.GetAsString: string;
 
 
-Var B : wordbool;
+var B : wordbool;
 
 
 begin
 begin
   If GetData(@B) then
   If GetData(@B) then
@@ -1999,7 +2006,7 @@ end;
 
 
 procedure TBooleanField.SetAsString(const AValue: string);
 procedure TBooleanField.SetAsString(const AValue: string);
 
 
-Var Temp : string;
+var Temp : string;
 
 
 begin
 begin
   Temp:=UpperCase(AValue);
   Temp:=UpperCase(AValue);
@@ -2028,7 +2035,7 @@ end;
 
 
 Procedure TBooleanField.SetDisplayValues(const AValue : String);
 Procedure TBooleanField.SetDisplayValues(const AValue : String);
 
 
-Var I : longint;
+var I : longint;
 
 
 begin
 begin
   If FDisplayValues<>AValue then
   If FDisplayValues<>AValue then
@@ -2070,7 +2077,7 @@ end;
 
 
 function TDateTimeField.GetAsVariant: Variant;
 function TDateTimeField.GetAsVariant: Variant;
 
 
-Var d : tDateTime;
+var d : tDateTime;
 
 
 begin
 begin
   If GetData(@d,False) then
   If GetData(@d,False) then
@@ -2102,7 +2109,7 @@ end;
 
 
 procedure TDateTimeField.GetText(var TheText: string; ADisplayText: Boolean);
 procedure TDateTimeField.GetText(var TheText: string; ADisplayText: Boolean);
 
 
-Var R : TDateTime;
+var R : TDateTime;
     F : String;
     F : String;
 
 
 begin
 begin
@@ -2140,7 +2147,7 @@ end;
 
 
 procedure TDateTimeField.SetAsString(const AValue: string);
 procedure TDateTimeField.SetAsString(const AValue: string);
 
 
-Var R : TDateTime;
+var R : TDateTime;
 
 
 begin
 begin
   if AValue<>'' then
   if AValue<>'' then
@@ -2181,7 +2188,7 @@ begin
 end;
 end;
 
 
 procedure TTimeField.SetAsString(const AValue: string);
 procedure TTimeField.SetAsString(const AValue: string);
-Var R : TDateTime;
+var R : TDateTime;
 begin
 begin
   if AValue='' then
   if AValue='' then
     Clear    // set to NULL
     Clear    // set to NULL
@@ -2376,7 +2383,7 @@ constructor TVarBytesField.Create(AOwner: TComponent);
 
 
 begin
 begin
   INherited Create(AOwner);
   INherited Create(AOwner);
-  SetDataType(ftvarbytes);
+  SetDataType(ftVarBytes);
   Size:=16;
   Size:=16;
 end;
 end;
 
 
@@ -2409,7 +2416,7 @@ end;
 
 
 function TBCDField.GetAsVariant: Variant;
 function TBCDField.GetAsVariant: Variant;
 
 
-Var c : system.Currency;
+var c : system.Currency;
 
 
 begin
 begin
   If GetData(@c) then
   If GetData(@c) then
@@ -2743,6 +2750,16 @@ begin
   Result:=FDataset.CreateBlobStream(Self,Mode);
   Result:=FDataset.CreateBlobStream(Self,Mode);
 end;
 end;
 
 
+function TBlobField.GetBlobType: TBlobType;
+begin
+  result:= TBlobType(DataType);
+end;
+
+procedure TBlobField.SetBlobType(AValue: TBlobType);
+begin
+  SetFieldType(TFieldType(BlobType));
+end;
+
 procedure TBlobField.FreeBuffers;
 procedure TBlobField.FreeBuffers;
 
 
 begin
 begin
@@ -2808,9 +2825,7 @@ begin
 end;
 end;
 
 
 function TBlobField.GetAsVariant: Variant;
 function TBlobField.GetAsVariant: Variant;
-
-Var s : string;
-
+var s : string;
 begin
 begin
   if not GetIsNull then
   if not GetIsNull then
     begin
     begin
@@ -2889,7 +2904,6 @@ begin
     end;
     end;
 end;
 end;
 
 
-
 procedure TBlobField.SetAsWideString(const AValue: WideString);
 procedure TBlobField.SetAsWideString(const AValue: WideString);
 var
 var
   Len : Integer;
   Len : Integer;
@@ -2940,11 +2954,9 @@ end;
 
 
 
 
 procedure TBlobField.LoadFromFile(const FileName: string);
 procedure TBlobField.LoadFromFile(const FileName: string);
-
-Var S : TFileStream;
-
+var S : TFileStream;
 begin
 begin
-  S:=TFileStream.Create(FileName,fmOpenRead);
+  S:=TFileStream.Create(FileName,fmOpenRead or fmShareDenyWrite);
   try
   try
     LoadFromStream(S);
     LoadFromStream(S);
   finally
   finally
@@ -2966,9 +2978,7 @@ end;
 
 
 
 
 procedure TBlobField.SaveToFile(const FileName: string);
 procedure TBlobField.SaveToFile(const FileName: string);
-
-Var S : TFileStream;
-
+var S : TFileStream;
 begin
 begin
   S:=TFileStream.Create(FileName,fmCreate);
   S:=TFileStream.Create(FileName,fmCreate);
   try
   try
@@ -2980,9 +2990,7 @@ end;
 
 
 
 
 procedure TBlobField.SaveToStream(Stream: TStream);
 procedure TBlobField.SaveToStream(Stream: TStream);
-
-Var S : TStream;
-
+var S : TStream;
 begin
 begin
   S:=GetBlobStream(bmRead);
   S:=GetBlobStream(bmRead);
   Try
   Try
@@ -2994,9 +3002,8 @@ begin
 end;
 end;
 
 
 procedure TBlobField.SetFieldType(AValue: TFieldType);
 procedure TBlobField.SetFieldType(AValue: TFieldType);
-
 begin
 begin
-  If AValue in [Low(TBlobType)..High(TBlobType)] then
+  if AValue in ftBlobTypes then
     SetDatatype(AValue);
     SetDatatype(AValue);
 end;
 end;
 
 
@@ -3038,9 +3045,7 @@ begin
 end;
 end;
 
 
 function TWideMemoField.GetAsVariant: Variant;
 function TWideMemoField.GetAsVariant: Variant;
-
-Var s : string;
-
+var s : string;
 begin
 begin
   if not GetIsNull then
   if not GetIsNull then
     begin
     begin
@@ -3213,7 +3218,7 @@ end;
 
 
 { TFields }
 { TFields }
 
 
-Constructor TFields.Create(ADataset : TDataset);
+constructor TFields.Create(ADataset: TDataset);
 
 
 begin
 begin
   FDataSet:=ADataset;
   FDataSet:=ADataset;
@@ -3221,7 +3226,7 @@ begin
   FValidFieldKinds:=[fkData..fkInternalcalc];
   FValidFieldKinds:=[fkData..fkInternalcalc];
 end;
 end;
 
 
-Destructor TFields.Destroy;
+destructor TFields.Destroy;
 
 
 begin
 begin
   if Assigned(FFieldList) then
   if Assigned(FFieldList) then
@@ -3230,7 +3235,17 @@ begin
   inherited Destroy;
   inherited Destroy;
 end;
 end;
 
 
-Procedure Tfields.Changed;
+procedure TFields.ClearFieldDefs;
+
+Var
+  i : Integer;
+
+begin
+  For I:=0 to Count-1 do
+    Fields[i].FFieldDef:=Nil;
+end;
+
+procedure TFields.Changed;
 
 
 begin
 begin
   if (FDataSet <> nil) and not (csDestroying in FDataSet.ComponentState) and FDataset.Active then
   if (FDataSet <> nil) and not (csDestroying in FDataSet.ComponentState) and FDataset.Active then
@@ -3239,35 +3254,33 @@ begin
     FOnChange(Self);
     FOnChange(Self);
 end;
 end;
 
 
-Procedure TFields.CheckfieldKind(Fieldkind : TFieldKind; Field : TField);
+procedure TFields.CheckfieldKind(Fieldkind: TFieldKind; Field: TField);
 
 
 begin
 begin
   If Not (FieldKind in ValidFieldKinds) Then
   If Not (FieldKind in ValidFieldKinds) Then
     DatabaseErrorFmt(SInvalidFieldKind,[Field.FieldName]);
     DatabaseErrorFmt(SInvalidFieldKind,[Field.FieldName]);
 end;
 end;
 
 
-Function Tfields.GetCount : Longint;
+function TFields.GetCount: Longint;
 
 
 begin
 begin
   Result:=FFieldList.Count;
   Result:=FFieldList.Count;
 end;
 end;
 
 
 
 
-Function TFields.GetField (Index : longint) : TField;
+function TFields.GetField(Index: Integer): TField;
 
 
 begin
 begin
   Result:=Tfield(FFieldList[Index]);
   Result:=Tfield(FFieldList[Index]);
 end;
 end;
 
 
-procedure Tfields.SetField(Index: Integer; Value: TField);
+procedure TFields.SetField(Index: Integer; Value: TField);
 begin
 begin
   Fields[Index].Assign(Value);
   Fields[Index].Assign(Value);
 end;
 end;
 
 
-Procedure TFields.SetFieldIndex (Field : TField;Value : Integer);
-
-Var Old : Longint;
-
+procedure TFields.SetFieldIndex(Field: TField; Value: Integer);
+var Old : Longint;
 begin
 begin
   Old := FFieldList.indexOf(Field);
   Old := FFieldList.indexOf(Field);
   If Old=-1 then
   If Old=-1 then
@@ -3284,7 +3297,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-Procedure TFields.Add(Field : TField);
+procedure TFields.Add(Field: TField);
 
 
 begin
 begin
   CheckFieldName(Field.FieldName);
   CheckFieldName(Field.FieldName);
@@ -3293,31 +3306,31 @@ begin
   Changed;
   Changed;
 end;
 end;
 
 
-Procedure TFields.CheckFieldName (Const Value : String);
+procedure TFields.CheckFieldName(const Value: String);
 
 
 begin
 begin
   If FindField(Value)<>Nil then
   If FindField(Value)<>Nil then
     DataBaseErrorFmt(SDuplicateFieldName,[Value],FDataset);
     DataBaseErrorFmt(SDuplicateFieldName,[Value],FDataset);
 end;
 end;
 
 
-Procedure TFields.CheckFieldNames (Const Value : String);
+procedure TFields.CheckFieldNames(const Value: String);
 
 
+var
+  N: String;
+  StrPos: Integer;
 
 
-Var I : longint;
-    S,T : String;
 begin
 begin
-  T:=Value;
-  Repeat
-    I:=Pos(';',T);
-    If I=0 Then I:=Length(T)+1;
-    S:=Copy(T,1,I-1);
-    Delete(T,1,I);
+  if Value = '' then
+    Exit;
+  StrPos := 1;
+  repeat
+    N := ExtractFieldName(Value, StrPos);
     // Will raise an error if no such field...
     // Will raise an error if no such field...
-    FieldByName(S);
-  Until (T='');
+    FieldByName(N);
+  until StrPos > Length(Value);
 end;
 end;
 
 
-Procedure TFields.Clear;
+procedure TFields.Clear;
 var
 var
   AField: TField;
   AField: TField;
 begin
 begin
@@ -3331,26 +3344,26 @@ begin
   Changed;
   Changed;
 end;
 end;
 
 
-Function TFields.FindField (Const Value : String) : TField;
-
-Var S : String;
+function TFields.FindField(const Value: String): TField;
+var S : String;
     I : longint;
     I : longint;
-
 begin
 begin
-  Result:=Nil;
   S:=UpperCase(Value);
   S:=UpperCase(Value);
   For I:=0 To FFieldList.Count-1 do
   For I:=0 To FFieldList.Count-1 do
-    If S=UpperCase(TField(FFieldList[i]).FieldName) Then
-      Begin
+  begin
+    Result:=TField(FFieldList[I]);
+    if S=UpperCase(Result.FieldName) then
+    begin
       {$ifdef dsdebug}
       {$ifdef dsdebug}
       Writeln ('Found field ',Value);
       Writeln ('Found field ',Value);
       {$endif}
       {$endif}
-      Result:=TField(FFieldList[I]);
       Exit;
       Exit;
-      end;
+    end;
+  end;
+  Result:=Nil;
 end;
 end;
 
 
-Function TFields.FieldByName (Const Value : String) : TField;
+function TFields.FieldByName(const Value: String): TField;
 
 
 begin
 begin
   Result:=FindField(Value);
   Result:=FindField(Value);
@@ -3358,37 +3371,33 @@ begin
     DatabaseErrorFmt(SFieldNotFound,[Value],FDataset);
     DatabaseErrorFmt(SFieldNotFound,[Value],FDataset);
 end;
 end;
 
 
-Function TFields.FieldByNumber(FieldNo : Integer) : TField;
-
-Var i : Longint;
-
+function TFields.FieldByNumber(FieldNo: Integer): TField;
+var i : Longint;
 begin
 begin
-  Result:=Nil;
   For I:=0 to FFieldList.Count-1 do
   For I:=0 to FFieldList.Count-1 do
-    If FieldNo=TField(FFieldList[I]).FieldNo then
-      begin
-      Result:=TField(FFieldList[i]);
+  begin
+    Result:=TField(FFieldList[I]);
+    if FieldNo=Result.FieldNo then
       Exit;
       Exit;
-      end;
+  end;
+  Result:=Nil;
 end;
 end;
 
 
-Function TFields.GetEnumerator: TFieldsEnumerator;
+function TFields.GetEnumerator: TFieldsEnumerator;
 
 
 begin
 begin
   Result:=TFieldsEnumerator.Create(Self);
   Result:=TFieldsEnumerator.Create(Self);
 end;
 end;
 
 
-Procedure TFields.GetFieldNames (Values : TStrings);
-
-Var i : longint;
-
+procedure TFields.GetFieldNames(Values: TStrings);
+var i : longint;
 begin
 begin
   Values.Clear;
   Values.Clear;
   For I:=0 to FFieldList.Count-1 do
   For I:=0 to FFieldList.Count-1 do
     Values.Add(Tfield(FFieldList[I]).FieldName);
     Values.Add(Tfield(FFieldList[I]).FieldName);
 end;
 end;
 
 
-Function TFields.IndexOf(Field : TField) : Longint;
+function TFields.IndexOf(Field: TField): Longint;
 
 
 begin
 begin
   Result:=FFieldList.IndexOf(Field);
   Result:=FFieldList.IndexOf(Field);

+ 79 - 56
packages/fcl-db/src/base/sqlscript.pp

@@ -47,8 +47,10 @@ type
     FCommentsInSQL: Boolean;
     FCommentsInSQL: Boolean;
     FTerminator: AnsiString;
     FTerminator: AnsiString;
     FSQL: TStrings;
     FSQL: TStrings;
+    FCurrentStripped,
     FCurrentStatement: TStrings;
     FCurrentStatement: TStrings;
     FDirectives: TStrings;
     FDirectives: TStrings;
+    FComment,
     FEmitLine: Boolean;
     FEmitLine: Boolean;
     procedure SetDefines(const Value: TStrings);
     procedure SetDefines(const Value: TStrings);
     function FindNextSeparator(sep: array of string): AnsiString;
     function FindNextSeparator(sep: array of string): AnsiString;
@@ -57,18 +59,21 @@ type
     procedure SetSQL(value: TStrings);
     procedure SetSQL(value: TStrings);
     procedure SQLChange(Sender: TObject);
     procedure SQLChange(Sender: TObject);
     function GetLine: Integer;
     function GetLine: Integer;
-    Function ProcessConditional(Directive : String; Param : String) : Boolean; virtual;
-    function NextStatement: AnsiString;
-    procedure ProcessStatement;
-    function Available: Boolean;
-    procedure InternalStatement (Statement: TStrings; var StopExecution: Boolean);
-    procedure InternalDirective (Directive, Argument: String; var StopExecution: Boolean);
-    procedure InternalCommit;
   protected
   protected
+    procedure ClearStatement; virtual;
+    procedure InternalStatement (Statement: TStrings; var StopExecution: Boolean); virtual;
+    procedure InternalDirective (Directive, Argument: String; var StopExecution: Boolean); virtual;
+    // Runs commit. If ComitRetaining, use CommitRetraining if possible, else stop/starttransaction
+    procedure InternalCommit(CommitRetaining: boolean=true); virtual;
+    Function ProcessConditional(Directive : String; Param : String) : Boolean; virtual;
+    function NextStatement: AnsiString; virtual;
+    procedure ProcessStatement; virtual;
+    function Available: Boolean; virtual;
     procedure DefaultDirectives; virtual;
     procedure DefaultDirectives; virtual;
     procedure ExecuteStatement (Statement: TStrings; var StopExecution: Boolean); virtual; abstract;
     procedure ExecuteStatement (Statement: TStrings; var StopExecution: Boolean); virtual; abstract;
     procedure ExecuteDirective (Directive, Argument: String; var StopExecution: Boolean); virtual; abstract;
     procedure ExecuteDirective (Directive, Argument: String; var StopExecution: Boolean); virtual; abstract;
-    procedure ExecuteCommit; virtual; abstract;
+    // Executes commit. If possible and CommitRetaining, use CommitRetaining, else
+    procedure ExecuteCommit(CommitRetaining: boolean=true); virtual; abstract;
   public
   public
     constructor Create (AnOwner: TComponent); override;
     constructor Create (AnOwner: TComponent); override;
     destructor Destroy; override;
     destructor Destroy; override;
@@ -100,7 +105,7 @@ type
   protected
   protected
     procedure ExecuteStatement (SQLStatement: TStrings; var StopExecution: Boolean); override;
     procedure ExecuteStatement (SQLStatement: TStrings; var StopExecution: Boolean); override;
     procedure ExecuteDirective (Directive, Argument: String; var StopExecution: Boolean); override;
     procedure ExecuteDirective (Directive, Argument: String; var StopExecution: Boolean); override;
-    procedure ExecuteCommit; override;
+    procedure ExecuteCommit(CommitRetaining: boolean=true); override;
   public
   public
     procedure Execute; override;
     procedure Execute; override;
     property Aborted;
     property Aborted;
@@ -177,21 +182,6 @@ begin
   Result:=Trim(Result);
   Result:=Trim(Result);
 end;
 end;
 
 
-function DeleteComments(SQL_Text: AnsiString; ATerminator: AnsiString = ';'): AnsiString;
-
-begin
-  With TCustomSQLScript.Create (Nil) do
-    try
-      Terminator:=ATerminator;
-      Script.Add(SQL_Text);
-      Script.Add(Terminator);
-      CommentsInSQL:=False;
-      Result:=ConvertWhiteSpace(NextStatement);
-    finally
-      Free;
-    end;
-end;
-
 { ---------------------------------------------------------------------
 { ---------------------------------------------------------------------
     TSQLScript
     TSQLScript
   ---------------------------------------------------------------------}
   ---------------------------------------------------------------------}
@@ -236,12 +226,20 @@ end;
 
 
 procedure TCustomSQLScript.AddToStatement(value: AnsiString; ForceNewLine : Boolean);
 procedure TCustomSQLScript.AddToStatement(value: AnsiString; ForceNewLine : Boolean);
 
 
+  Procedure DA(L : TStrings);
+
+  begin
+    With L do
+      if ForceNewLine or (Count=0) then
+        Add(value)
+      else
+        Strings[Count-1]:=Strings[Count-1] + value;
+  end;
+
 begin
 begin
-  With FCurrentStatement do
-    if ForceNewLine or (Count=0) then
-      Add(value)
-    else
-      Strings[Count-1]:=Strings[Count-1] + value;
+  DA(FCurrentStatement);
+  if Not FComment then
+    DA(FCurrentStripped);
 end;
 end;
 
 
 function TCustomSQLScript.FindNextSeparator(Sep: array of string): AnsiString;
 function TCustomSQLScript.FindNextSeparator(Sep: array of string): AnsiString;
@@ -278,19 +276,9 @@ end;
 
 
 function TCustomSQLScript.Available: Boolean;
 function TCustomSQLScript.Available: Boolean;
 
 
-var 
-  SCol, 
-  SLine: Integer;
-  
 begin
 begin
-  SCol:=FCol;
-  SLine:=FLine;
-  try
-    Result:=Length(Trim(NextStatement()))>0;
-  Finally  
-    FCol:=SCol;
-    FLine:=SLine;
-  end;  
+  With FSQL do
+    Result:=(FLine<Count) or (FCol<Length(Strings[Count-1]))
 end;
 end;
 
 
 procedure TCustomSQLScript.InternalStatement(Statement: TStrings;  var StopExecution: Boolean);
 procedure TCustomSQLScript.InternalStatement(Statement: TStrings;  var StopExecution: Boolean);
@@ -344,7 +332,7 @@ begin
   end;
   end;
 end;
 end;
 
 
-procedure TCustomSQLScript.InternalCommit;
+procedure TCustomSQLScript.InternalCommit(CommitRetaining: boolean=true);
 
 
 var 
 var 
   cont : boolean;
   cont : boolean;
@@ -352,7 +340,7 @@ var
   
   
 begin
 begin
   try
   try
-    ExecuteCommit;
+    ExecuteCommit(CommitRetaining);
   except
   except
     on E : Exception do
     on E : Exception do
       begin
       begin
@@ -373,6 +361,13 @@ begin
   end;
   end;
 end;
 end;
 
 
+procedure TCustomSQLScript.ClearStatement;
+
+begin
+  FCurrentStatement.Clear;
+  FCurrentStripped.Clear;
+end;
+
 procedure TCustomSQLScript.ProcessStatement;
 procedure TCustomSQLScript.ProcessStatement;
 
 
 Var
 Var
@@ -383,7 +378,7 @@ Var
 begin
 begin
   if (FCurrentStatement.Count=0) then
   if (FCurrentStatement.Count=0) then
     Exit;
     Exit;
-  S:=DeleteComments(FCurrentStatement.Text, Terminator);
+  S:=Trim(FCurrentStripped.Text);
   I:=0;
   I:=0;
   Directive:='';
   Directive:='';
   While (i<FDirectives.Count) and (Directive='') do
   While (i<FDirectives.Count) and (Directive='') do
@@ -404,9 +399,16 @@ begin
     else If Not FIsSkipping then
     else If Not FIsSkipping then
       begin
       begin
       // If AutoCommit, skip any explicit commits.
       // If AutoCommit, skip any explicit commits.
-      if FUseCommit and (Directive = 'COMMIT') and not FAutoCommit then
-        InternalCommit
-      else if FUseSetTerm and (Directive = 'SET TERM') then
+      if FUseCommit
+        and ((Directive = 'COMMIT') or (Directive = 'COMMIT WORK' {SQL standard}))
+        and not FAutoCommit then
+        InternalCommit(false) //explicit commit, no commit retaining
+      else if FUseCommit
+        and (Directive = 'COMMIT RETAIN') {at least Firebird syntax}
+        and not FAutoCommit then
+        InternalCommit(true)
+      else if FUseSetTerm
+        and (Directive = 'SET TERM' {Firebird/Interbase only}) then
         FTerminator:=S
         FTerminator:=S
       else
       else
         InternalDirective (Directive,S,FAborted)
         InternalDirective (Directive,S,FAborted)
@@ -429,11 +431,11 @@ begin
   FSkipStackIndex:=0;
   FSkipStackIndex:=0;
   Faborted:=False;
   Faborted:=False;
   DefaultDirectives;
   DefaultDirectives;
-  while not FAborted and Available() do
-    begin
+  Repeat
     NextStatement();
     NextStatement();
-    ProcessStatement;
-    end;
+    if Length(Trim(FCurrentStripped.Text))>0 then
+      ProcessStatement;
+  Until FAborted or Not Available;
 end;
 end;
 
 
 function TCustomSQLScript.NextStatement: AnsiString;
 function TCustomSQLScript.NextStatement: AnsiString;
@@ -444,10 +446,10 @@ var
 
 
 begin
 begin
   terminator_found:=False;
   terminator_found:=False;
-  FCurrentStatement.Clear;
+  ClearStatement;
   while FLine <= FSQL.Count do
   while FLine <= FSQL.Count do
     begin
     begin
-    pnt:=FindNextSeparator([FTerminator, '/*', '"', '''']);
+    pnt:=FindNextSeparator([FTerminator, '/*', '"', '''', '--']);
     if (pnt=FTerminator) then
     if (pnt=FTerminator) then
       begin
       begin
       FCol:=FCol + length(pnt);
       FCol:=FCol + length(pnt);
@@ -456,6 +458,7 @@ begin
       end
       end
     else if pnt = '/*' then
     else if pnt = '/*' then
       begin
       begin
+      FComment:=True;
       if FCommentsInSQL then
       if FCommentsInSQL then
         AddToStatement(pnt,false)
         AddToStatement(pnt,false)
       else
       else
@@ -467,6 +470,16 @@ begin
       else
       else
         FEmitLine:=True;
         FEmitLine:=True;
       FCol:=FCol + length(pnt);
       FCol:=FCol + length(pnt);
+      FComment:=False;
+      end
+    else if pnt = '--' then
+      begin
+      FComment:=True;
+      if FCommentsInSQL then
+        AddToStatement(Copy(FSQL[FLine-1],FCol,Length(FSQL[FLine-1])-FCol+1),True);
+      Inc(Fline);
+      FCol:=0;
+      FComment:=False;
       end
       end
     else if pnt = '"' then
     else if pnt = '"' then
       begin
       begin
@@ -486,9 +499,11 @@ begin
       end;
       end;
     end;
     end;
   if not terminator_found then
   if not terminator_found then
-    FCurrentStatement.Clear();
+    ClearStatement;
   while (FCurrentStatement.Count > 0) and (trim(FCurrentStatement.Strings[0]) = '') do
   while (FCurrentStatement.Count > 0) and (trim(FCurrentStatement.Strings[0]) = '') do
     FCurrentStatement.Delete(0);
     FCurrentStatement.Delete(0);
+  while (FCurrentStripped.Count > 0) and (trim(FCurrentStripped.Strings[0]) = '') do
+    FCurrentStripped.Delete(0);
   Result:=FCurrentStatement.Text;
   Result:=FCurrentStatement.Text;
 end;
 end;
 
 
@@ -512,6 +527,7 @@ begin
   L.OnChange:=@SQLChange;
   L.OnChange:=@SQLChange;
   FSQL:=L;
   FSQL:=L;
   FDirectives:=TStringList.Create();
   FDirectives:=TStringList.Create();
+  FCurrentStripped:=TStringList.Create();
   FCurrentStatement:=TStringList.Create();
   FCurrentStatement:=TStringList.Create();
   FLine:=1;
   FLine:=1;
   FCol:=1;
   FCol:=1;
@@ -523,7 +539,9 @@ begin
 end;
 end;
 
 
 destructor TCustomSQLScript.Destroy;
 destructor TCustomSQLScript.Destroy;
+
 begin
 begin
+  FreeAndNil(FCurrentStripped);
   FreeAndNil(FCurrentStatement);
   FreeAndNil(FCurrentStatement);
   FreeAndNil(FSQL);
   FreeAndNil(FSQL);
   FreeAndNil(FDirectives);
   FreeAndNil(FDirectives);
@@ -540,10 +558,15 @@ procedure TCustomSQLScript.DefaultDirectives;
 begin
 begin
   With FDirectives do
   With FDirectives do
     begin
     begin
+    // Insertion order matters as testing for directives will be done with StartsWith
     if FUseSetTerm then
     if FUseSetTerm then
       Add('SET TERM');
       Add('SET TERM');
     if FUseCommit then
     if FUseCommit then
-      Add('COMMIT');
+    begin
+      Add('COMMIT WORK'); {SQL Standard, equivalent to commit}
+      Add('COMMIT RETAIN'); {Firebird/Interbase; probably won't hurt on other dbs}
+      Add('COMMIT'); {Shorthand used in many dbs, e.g. Firebird}
+    end;
     if FUseDefines then
     if FUseDefines then
       begin
       begin
       Add('#IFDEF');
       Add('#IFDEF');
@@ -650,7 +673,7 @@ begin
     FOnDirective (Self, Directive, Argument, StopExecution);
     FOnDirective (Self, Directive, Argument, StopExecution);
 end;
 end;
 
 
-procedure TEventSQLScript.ExecuteCommit;
+procedure TEventSQLScript.ExecuteCommit(CommitRetaining: boolean=true);
 begin
 begin
   if assigned (FOnCommit) then
   if assigned (FOnCommit) then
     FOnCommit (Self);
     FOnCommit (Self);

+ 1 - 1
packages/fcl-db/src/base/xmldatapacketreader.pp

@@ -157,7 +157,7 @@ begin
     AFieldNode := item[i];
     AFieldNode := item[i];
     if AFieldNode.CompareName('FIELD')=0 then
     if AFieldNode.CompareName('FIELD')=0 then
       begin
       begin
-      AFieldDef := TFieldDef.Create(DataSet.FieldDefs);
+      AFieldDef := Dataset.FieldDefs.AddFieldDef;
       AFieldDef.DisplayName:=GetNodeAttribute(AFieldNode,'fieldname');
       AFieldDef.DisplayName:=GetNodeAttribute(AFieldNode,'fieldname');
       AFieldDef.Name:=GetNodeAttribute(AFieldNode,'attrname');
       AFieldDef.Name:=GetNodeAttribute(AFieldNode,'attrname');
       AFieldDef.Size:=StrToIntDef(GetNodeAttribute(AFieldNode,'width'),0);
       AFieldDef.Size:=StrToIntDef(GetNodeAttribute(AFieldNode,'width'),0);

+ 32 - 5
packages/fcl-db/src/codegen/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-04-26 rev 24324]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 BINUTILSPREFIX=i686-linux-android-
 else
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
 endif
 endif
@@ -531,6 +531,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_UNITS+=fpddcodegen fpcgcreatedbf fpcgdbcoll fpcgsqlconst fpcgtiopf fpddpopcode
 override TARGET_UNITS+=fpddcodegen fpcgcreatedbf fpcgdbcoll fpcgsqlconst fpcgtiopf fpddpopcode
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_UNITS+=fpddcodegen fpcgcreatedbf fpcgdbcoll fpcgsqlconst fpcgtiopf fpddpopcode
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override TARGET_UNITS+=fpddcodegen fpcgcreatedbf fpcgdbcoll fpcgsqlconst fpcgtiopf fpddpopcode
 override TARGET_UNITS+=fpddcodegen fpcgcreatedbf fpcgdbcoll fpcgsqlconst fpcgtiopf fpddpopcode
 endif
 endif
@@ -750,6 +753,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_RSTS+=fpddcodegen fpcgsqlconst fpddpopcode
 override TARGET_RSTS+=fpddcodegen fpcgsqlconst fpddpopcode
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_RSTS+=fpddcodegen fpcgsqlconst fpddpopcode
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override TARGET_RSTS+=fpddcodegen fpcgsqlconst fpddpopcode
 override TARGET_RSTS+=fpddcodegen fpcgsqlconst fpddpopcode
 endif
 endif
@@ -970,6 +976,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
 override COMPILER_OPTIONS+=-S2h
 override COMPILER_OPTIONS+=-S2h
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_OPTIONS+=-S2h
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 override COMPILER_OPTIONS+=-S2h
 override COMPILER_OPTIONS+=-S2h
 endif
 endif
@@ -1360,7 +1369,7 @@ endif
 endif
 endif
 ifeq ($(OS_TARGET),msdos)
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 SHORTSUFFIX=d16
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1552,6 +1561,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifndef ASPROG
 ifdef CROSSBINDIR
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -1580,10 +1590,18 @@ else
 ARPROG=$(ARNAME)
 ARPROG=$(ARNAME)
 endif
 endif
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 AS=$(ASPROG)
 LD=$(LDPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 PPAS=./ppas$(SRCBATCHEXT)
 else
 else
@@ -2239,6 +2257,15 @@ REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-BASE=1
 endif
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -2674,7 +2701,7 @@ endif
 ifdef ACROSSCOMPILE
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 override FPCOPT+=$(CROSSOPT)
 endif
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else

Some files were not shown because too many files changed in this diff