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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -321,8 +321,8 @@ endif
 endif
 override PACKAGE_NAME=fpc
 override PACKAGE_VERSION=2.7.1
-REQUIREDVERSION=2.6.2
-REQUIREDVERSION2=2.6.0
+REQUIREDVERSION=2.6.4
+REQUIREDVERSION2=2.6.2
 ifndef inOS2
 override FPCDIR:=$(BASEDIR)
 export FPCDIR
@@ -370,6 +370,9 @@ endif
 ifeq ($(CPU_TARGET),i8086)
 PPSUF=8086
 endif
+ifeq ($(CPU_TARGET),avr)
+PPSUF=avr
+endif
 ifdef CROSSCOMPILE
 ifneq ($(CPU_TARGET),jvm)
 PPPRE=ppcross
@@ -442,8 +445,11 @@ else
 FPCMAKENEW=$(BASEDIR)/utils/fpcm/bin/$(SOURCESUFFIX)/fpcmake$(SRCEXEEXT)
 endif
 endif
+ifneq ($(OPT),)
+OPTNEW+=$(OPT)
+endif
 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)
 ifndef CROSSCOMPILE
 ifneq ($(wildcard ide),)
@@ -672,6 +678,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_DIRS+=compiler rtl utils packages ide installer
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_DIRS+=compiler rtl utils packages ide installer
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 override TARGET_DIRS+=compiler rtl utils packages ide installer
 endif
@@ -1063,7 +1072,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1255,6 +1264,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -1283,10 +1293,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1453,7 +1471,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else
@@ -2366,6 +2384,14 @@ TARGET_DIRS_PACKAGES=1
 TARGET_DIRS_IDE=1
 TARGET_DIRS_INSTALLER=1
 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)
 TARGET_DIRS_COMPILER=1
 TARGET_DIRS_RTL=1

+ 9 - 3
Makefile.fpc

@@ -20,8 +20,8 @@ fpcdir=.
 rule=help
 
 [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
@@ -76,6 +76,9 @@ endif
 ifeq ($(CPU_TARGET),i8086)
 PPSUF=8086
 endif
+ifeq ($(CPU_TARGET),avr)
+PPSUF=avr
+endif
 
 # cross compilers uses full cpu_target, not just ppc-suffix
 # (except if the target cannot run a native compiler)
@@ -179,8 +182,11 @@ endif
 endif
 
 # Build/install options
+ifneq ($(OPT),)
+OPTNEW+=$(OPT)
+endif
 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)
 
 # 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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -328,8 +328,8 @@ endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 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 INSTALL_FPCPACKAGE=y
 override INSTALL_FPCSUBDIR=ide
@@ -714,7 +714,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -906,6 +906,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -934,10 +935,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1523,6 +1532,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=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
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1917,7 +1934,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else

+ 2 - 2
ide/Makefile.fpc

@@ -23,8 +23,8 @@ endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 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)
 override NOCPUDEF=1
 

+ 13 - 0
ide/Makefile.fpc.fpcmake

@@ -60,21 +60,34 @@ neednostdlib=1
 endif
 ifeq ($(OS_TARGET),openbsd)
 needusrlocallib=1
+needusrlib=1
+neednostdlib=1
 endif
 ifeq ($(OS_TARGET),netbsd)
 neednostdlib=1
 endif
+ifeq ($(OS_TARGET),aix)
+neednostdlib=1
+endif
 
 ifdef needlinkparam
 override SPECIALLINK=-Xe -k--allow-multiple-definition
 endif
 
+ifdef needusrlib
+override SPECIALLINK+=-Fl/usr/lib
+endif
 ifdef needusrlocallib
 override SPECIALLINK+=-Fl/usr/local/lib
 endif
 ifdef neednostdlib
 override SPECIALLINK+=-Xd
 endif
+
+ifeq ($(OS_TARGET),aix)
+override SPECIALLINK+=6fl/opt/freeware/lib -k-bbigtoc
+endif
+
 # Try to find GDB library
 # Look for a valid GDBLIBDIR environment variable
 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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -559,6 +559,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_UNITS+=compunit
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_UNITS+=compunit
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 override TARGET_UNITS+=compunit
 endif
@@ -779,6 +782,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 override COMPILER_OPTIONS+=-Ur -dNOCATCH
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_OPTIONS+=-Ur -dNOCATCH
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 override COMPILER_OPTIONS+=-Ur -dNOCATCH
 endif
@@ -998,6 +1004,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 override COMPILER_INCLUDEDIR+=$(COMPILERDIR) $(COMPILERDIR)/$(PPC_TARGET)
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_INCLUDEDIR+=$(COMPILERDIR) $(COMPILERDIR)/$(PPC_TARGET)
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 override COMPILER_INCLUDEDIR+=$(COMPILERDIR) $(COMPILERDIR)/$(PPC_TARGET)
 endif
@@ -1217,6 +1226,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 override COMPILER_UNITDIR+=$(COMPILERDIR) $(COMPILERDIR)/$(PPC_TARGET) $(COMPILERDIR)/targets $(COMPILERDIR)/systems
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_UNITDIR+=$(COMPILERDIR) $(COMPILERDIR)/$(PPC_TARGET) $(COMPILERDIR)/targets $(COMPILERDIR)/systems
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 override COMPILER_UNITDIR+=$(COMPILERDIR) $(COMPILERDIR)/$(PPC_TARGET) $(COMPILERDIR)/targets $(COMPILERDIR)/systems
 endif
@@ -1607,7 +1619,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1799,6 +1811,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -1827,10 +1840,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -2066,6 +2087,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 REQUIRE_PACKAGES_RTL=1
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 endif
@@ -2255,7 +2279,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -531,6 +531,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_UNITS+=gdbcon gdbint
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_UNITS+=gdbcon gdbint
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 override TARGET_UNITS+=gdbcon gdbint
 endif
@@ -922,7 +925,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1114,6 +1117,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -1142,10 +1146,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1381,6 +1393,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 REQUIRE_PACKAGES_RTL=1
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 endif
@@ -1570,7 +1585,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else

+ 17 - 1
ide/fp.pas

@@ -40,7 +40,7 @@ uses
   {$ifdef USE_MINGW_GDB}
     fpmingw,
   {$else}
-    fpcygwin, 
+    fpcygwin,
   {$endif}
 {$endif Windows}
 {$endif NODEBUG}
@@ -53,6 +53,9 @@ uses
 {$ifdef go32v2}
   dpmiexcp,
 {$endif go32v2}
+{$ifdef VESA}
+  vesa,
+{$endif VESA}
   keyboard,video,mouse,
 {$ifdef HasSignal}
   fpcatch,
@@ -169,6 +172,17 @@ begin
             LFNSupport:=false;
           end else
 {$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
           begin
             ShowReadme:=true;
@@ -365,6 +379,8 @@ BEGIN
   InitCompilerSwitches;
 
 {$ifdef VESA}
+  writeln(stderr,'If program stops, try again using -novesa option');
+  flush(stderr);
   InitVESAScreenModes;
 {$endif}
   InitRedir;

+ 3 - 3
ide/fpevalw.pas

@@ -67,9 +67,9 @@ begin
   new(b,init(r,'~E~valuate',cmEvaluate,bfDefault));
   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;
 end;

+ 1 - 1
ide/fphelp.pas

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

+ 2 - 2
ide/fpide.pas

@@ -875,7 +875,7 @@ begin
 {$endif DebugUndo}
       NewLine(
       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_clear,menu_key_edit_clear, kbCtrlDel, cmClear, hcClear,
       NewItem(menu_edit_selectall,'', kbNoKey, cmSelectAll, hcSelectAll,
@@ -934,7 +934,7 @@ begin
       NewItem('~E~valuate...','Ctrl+F4', kbCtrlF4, cmEvaluate, hcEvaluate,
       NewItem(menu_debug_callstack,menu_key_debug_callstack, kbCtrlF3, cmStack, hcStackWindow,
       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_fpu_registers,'', kbNoKey, cmFPURegisters, hcFPURegisters,
       NewItem(menu_debug_vector_registers,'', kbNoKey, cmVectorRegisters, hcVectorRegisters,

+ 27 - 14
ide/fpmake.pp

@@ -7,6 +7,9 @@ uses
   sysutils;
 {$endif ALLPACKAGES}
 
+const
+  NoGDBOption: boolean = false;
+
 procedure ide_check_gdb_availability(Sender: TObject);
 
   function DetectLibGDBDir: string;
@@ -72,8 +75,7 @@ begin
   P := sender as TPackage;
   with installer do
     begin
-    s := GetCustomFpmakeCommandlineOptionValue('NoGDB');
-    if not ((s='1') or (s='Y')) then
+    if not (NoGDBOption) then
       begin
         // Detection of GDB.
         GDBLibDir := DetectLibGDBDir;
@@ -100,10 +102,16 @@ begin
                         end;
               openbsd : begin
                           P.Options.Add('-Fl/usr/local/lib');
+                          P.Options.Add('-Fl/usr/lib');
                           P.Options.Add('-Xd');
                         end;
               netbsd  : 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}
 
             P.NeedLibc := true;
@@ -135,6 +143,9 @@ begin
   AddCustomFpmakeCommandlineOption('NoGDB','If value=1 or ''Y'', no GDB support');
   With Installer do
     begin
+    s := GetCustomFpmakeCommandlineOptionValue('NoGDB');
+    if (s='1') or (s='Y') then
+     NoGDBOption := true;
     s :=GetCustomFpmakeCommandlineOptionValue('CompilerTarget');
     if s <> '' then
       CompilerTarget:=StringToCPU(s)
@@ -148,11 +159,13 @@ begin
 {$endif ALLPACKAGES}
 
     P.Dependencies.Add('rtl');
+    P.Dependencies.Add('rtl-extra');
     P.Dependencies.Add('fv');
     P.Dependencies.Add('chm');
     { This one is only needed if DEBUG is set }
     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.SupportBuildModes:=[bmOneByOne];
@@ -188,17 +201,17 @@ begin
     T.Directory:='compiler';
     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');
 

+ 1 - 1
ide/fpmwnd.inc

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

+ 1 - 1
ide/fpswitch.pas

@@ -1182,7 +1182,7 @@ begin
        AddSelectItem(opt_mode_objectpascal,'objfpc',idNone);
        AddSelectItem(opt_mode_turbopascal,'tp',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
        AddSelectItem(opt_mode_gnupascal,'gpc',idNone);}
     end;

+ 2 - 1
ide/fpsymbol.pas

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

+ 22 - 1
ide/fpviews.pas

@@ -954,10 +954,18 @@ end;
 
 {$ifdef powerpc}
   {$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}
 {$endif}
 {$ifdef powerpc64}
   {$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}
 {$endif}
 {$ifdef i386}
@@ -4251,7 +4259,7 @@ begin
   else
 {$endif NODEBUG}
     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);
   Insert(New(PStaticText, Init(R2, ^C'B‚rczi G bor')));
   R2.Move(0,1);
@@ -4346,6 +4354,7 @@ end;
 procedure TFPASCIIChart.HandleEvent(var Event: TEvent);
 var W: PSourceWindow;
 begin
+  writeln(stderr,'all what=',event.what,' cmd=', event.command);
   case Event.What of
     evKeyDown :
       case Event.KeyCode of
@@ -4356,6 +4365,16 @@ begin
           end;
       end;
     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
         cmTransfer :
           begin
@@ -4364,10 +4383,12 @@ begin
               Message(W,evCommand,cmAddChar,pointer(ptrint(ord(Report^.AsciiChar))));
             ClearEvent(Event);
           end;
+        
         cmSearchWindow+1..cmSearchWindow+99 :
           if (Event.Command-cmSearchWindow=Number) then
               ClearEvent(Event);
       end;
+      end;
   end;
   inherited HandleEvent(Event);
 end;

+ 59 - 3
ide/vesa.pas

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

+ 2 - 2
ide/wconstse.inc

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

+ 1 - 1
installer/Makefile.fpc

@@ -19,7 +19,7 @@ files_linux=installer.pas
 files_freebsd=installer.pas
 
 [require]
-packages=fv unzip
+packages=rtl-console fv unzip rtl-extra
 
 [compiler]
 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
 # Dos 33
 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
@@ -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
 # Win32-2 30
 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
@@ -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
 # OS/2 22
 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
@@ -334,6 +339,8 @@ package=ufcl-resos2.zip[ufcleos2.zip],Free Component Library (FCL)-resources
 package=ubzip2os2.zip[ubz2os2.zip],Units for bzip2 decompression
 # OS/2-2 25
 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
 # EMX 22
 package=ufppkgemx.zip[ufppkemx.zip],Units for FPPkg packaging support
+# EMX 23
+package=uopensslemx.zip[uosslemx.zip],OpenSSL interface units
 
 #
 # 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
 # EMX-2 25
 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
 # Source-3 20
 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=
 #

+ 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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -328,8 +328,8 @@ endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 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))))))
 ifneq ($(PACKAGEDIR_FPMKUNIT),)
 UNITDIR_FPMAKE_FPMKUNIT=$(PACKAGEDIR_FPMKUNIT)/units_bs/$(SOURCESUFFIX)
@@ -728,7 +728,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -920,6 +920,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -948,10 +949,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1187,6 +1196,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 REQUIRE_PACKAGES_RTL=1
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 endif
@@ -1376,7 +1388,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else

+ 2 - 2
packages/Makefile.fpc

@@ -24,8 +24,8 @@ endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 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
 PACKAGEDIR_FPMKUNIT:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fpmkunit/Makefile.fpc,$(PACKAGESDIR))))))
 ifneq ($(PACKAGEDIR_FPMKUNIT),)

+ 57 - 49
packages/Makefile.fpc.fpcmake

@@ -13,57 +13,57 @@ dirs_powerpc64_linux=graph
 dirs_sparc_linux=graph
 dirs_arm_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 \
                imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg  httpd22 pxlib numlib \
                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 \
                imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg  httpd22 pxlib numlib \
                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 \
                imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg  httpd22 pxlib numlib \
                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_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_powerpc64_darwin=opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1  httpd22 imlib cocoaint objcrtl
 dirs_arm_darwin= 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 \
                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 \
                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 \
                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 \
                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 \
                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 \
                oggvorbis sdl openssl graph pcap  httpd22 pxlib numlib winceunits cairo libxml \
                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
 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_go32v2=fv graph unzip gdbint
+dirs_go32v2=rtl-console fv graph unzip gdbint
 dirs_amiga=amunits
-dirs_morphos=fv opengl sdl
+dirs_morphos=rtl-console fv opengl sdl
 dirs_wii=libogcfpc
 
 [install]
@@ -144,18 +144,26 @@ cocoaint_release: univint_release
 cocoaint_shared: univint_shared
 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),)
-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
-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
 
 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_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
 sdl_all: fpmkunit_all
 sdl_shared: fpmkunit_shared
@@ -385,11 +393,11 @@ sdl_smart: fpmkunit_smart
 sdl_debug: fpmkunit_debug
 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_shared: fpmkunit_shared
@@ -436,11 +444,11 @@ gnome1_smart: gtk1_smart imlib_smart fpmkunit_smart
 gnome1_debug: gtk1_debug imlib_debug fpmkunit_debug
 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_shared: gtk2_shared fpmkunit_shared
@@ -702,11 +710,11 @@ gmp_smart: fpmkunit_smart
 gmp_debug: fpmkunit_debug
 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_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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 override PACKAGE_NAME=a52
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=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
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else

+ 2 - 2
packages/a52/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 [rules]
 # 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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 override PACKAGE_NAME=amunits
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=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
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else

+ 2 - 2
packages/amunits/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 [rules]
 # 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);
 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_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_ObtainPen(mri : pMUI_RenderInfo; spec : pMUI_PenSpec; flags : ULONG) : 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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -531,6 +531,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_UNITS+=amigautils consoleio deadkeys doublebuffer easyasl hisoft linklist longarray msgbox pastoc pcq systemvartags tagsarray timerutils vartags wbargs
 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)
 override TARGET_UNITS+=amigautils consoleio deadkeys doublebuffer easyasl hisoft linklist longarray msgbox pastoc pcq systemvartags tagsarray timerutils vartags wbargs
 endif
@@ -751,6 +754,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 override COMPILER_INCLUDEDIR+=../inc
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_INCLUDEDIR+=../inc
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 override COMPILER_INCLUDEDIR+=../inc
 endif
@@ -970,6 +976,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 override COMPILER_UNITDIR+=../units
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_UNITDIR+=../units
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 override COMPILER_UNITDIR+=../units
 endif
@@ -1189,6 +1198,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 override COMPILER_SOURCEDIR+=.
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_SOURCEDIR+=.
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 override COMPILER_SOURCEDIR+=.
 endif
@@ -1579,7 +1591,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1771,6 +1783,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -1799,10 +1812,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -2038,6 +2059,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 REQUIRE_PACKAGES_RTL=1
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 endif
@@ -2227,7 +2251,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 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)
         just change this if you need newline characters.
       }
-         Read(Inf, buffer);
+         Read(Inf, buf);
          tempnode := AddNewNode(thelist,buffer);
-         Readln(inf, buffer);
+         Readln(inf, buf);
       end;
       CLose(Inf);
       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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 override PACKAGE_NAME=aspell
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=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
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else

+ 2 - 2
packages/aspell/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 [rules]
 # 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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 override PACKAGE_NAME=bfd
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=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
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else

+ 2 - 2
packages/bfd/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 [rules]
 # 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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 override PACKAGE_NAME=bzip2
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=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
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else

+ 2 - 2
packages/bzip2/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 [rules]
 # 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.Author := 'Library: Julian R. Seward, header: Daniel Mantione';
     // 3 clause becaue "prominent notice" is not required.
     P.License := 'Library: 3 clause BSD, header: 3 clause BSD ';
@@ -32,6 +31,7 @@ begin
 
     P.SourcePath.Add('src');
     P.IncludePath.Add('src');
+    P.Dependencies.Add('rtl-extra');
 
     T:=P.Targets.AddUnit('bzip2comn.pp');
     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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 override PACKAGE_NAME=cairo
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=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
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else

+ 2 - 2
packages/cairo/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 [rules]
 # 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');
 
     T:=P.Targets.AddUnit('cairo.pp');
+    T:=P.Targets.AddUnit('cairogobject.pp');
     T:=P.Targets.AddUnit('cairoft.pp');
     with T.Dependencies do
       begin

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

@@ -36,17 +36,26 @@ unit Cairo;
  *
  * Contributor(s):
  *	Carl D. Worth <[email protected]>
-
+ *
  *  This FreePascal binding generated August 26, 2005 
  *  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}
@@ -82,8 +91,10 @@ const
 {$ENDIF}
 
 type
+  GTYPE= culong; // =gulong from glib2, which we can't include due dependencies.
   cairo_status_t = (
     CAIRO_STATUS_SUCCESS = 0,
+
     CAIRO_STATUS_NO_MEMORY,
     CAIRO_STATUS_INVALID_RESTORE,
     CAIRO_STATUS_INVALID_POP_GROUP,
@@ -102,7 +113,27 @@ type
     CAIRO_STATUS_INVALID_FORMAT,
     CAIRO_STATUS_INVALID_VISUAL,
     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 = (
@@ -119,14 +150,32 @@ type
     CAIRO_OPERATOR_DEST_ATOP,
     CAIRO_OPERATOR_XOR,
     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_DEFAULT,
     CAIRO_ANTIALIAS_NONE,
     CAIRO_ANTIALIAS_GRAY,
-    CAIRO_ANTIALIAS_SUBPIXEL
+    CAIRO_ANTIALIAS_SUBPIXEL,
+	CAIRO_ANTIALIAS_FAST,
+    CAIRO_ANTIALIAS_GOOD,
+    CAIRO_ANTIALIAS_BEST
   );
 
   cairo_fill_rule_t = (
@@ -187,16 +236,19 @@ type
   );
 
   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_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 = (
@@ -219,14 +271,17 @@ type
     CAIRO_FONT_TYPE_TOY,
     CAIRO_FONT_TYPE_FT,
     CAIRO_FONT_TYPE_WIN32,
-    CAIRO_FONT_TYPE_ATSUI
+    CAIRO_FONT_TYPE_QUARTZ,
+    CAIRO_FONT_TYPE_USER
   );
   
   cairo_pattern_type_t = (
     CAIRO_PATTERN_TYPE_SOLID,
     CAIRO_PATTERN_TYPE_SURFACE,
     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 = (
@@ -241,46 +296,138 @@ type
     CAIRO_SURFACE_TYPE_BEOS,
     CAIRO_SURFACE_TYPE_DIRECTFB,
     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_1_1,
     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
     xx : Double;
@@ -340,12 +487,30 @@ type
     x, y, width, height: Double;
   end;
   
+  cairo_rectangle_int_t = record
+    x, y, width, height: LongInt;
+  end;
+  
   cairo_rectangle_list_t = record
     status: cairo_status_t;
     rectangles: Pcairo_rectangle_t;
     num_rectangles: LongInt;
   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_string: PChar; cdecl; external LIB_CAIRO;
 //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_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_path_extents (cr: Pcairo_t; x1, y1, x2, y2: PDouble); cdecl; external LIB_CAIRO;
 
 (* 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_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 *)
 
@@ -441,6 +608,10 @@ procedure cairo_rectangle_list_destroy(rectangle_list: Pcairo_rectangle_list_t);
 
 (* 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_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;
@@ -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_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;
-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 *)
 
@@ -537,9 +735,31 @@ function  cairo_status_to_string(status: cairo_status_t): Pchar; cdecl; external
 (* 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_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;
 procedure cairo_surface_finish(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_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;
@@ -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_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;
+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_flush(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_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_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 *)
 
 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_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;
@@ -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_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 *)
 
 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_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_mesh: 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;
 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;
 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_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_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;
 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;
 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_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 *)
 
@@ -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_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 *)
 
 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;
+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;
 
 (* 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_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_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;
@@ -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_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_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;
 
+(* 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) *)
 

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

@@ -18,6 +18,7 @@ Based on:
 
  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.12 by Valdinilson Lourenço da Cunha 2012
 
 As per original authors wish, this file is dual licensed LGPL-MPL see the original file
 cairo.pp for the full license.
@@ -43,13 +44,20 @@ type
   *)
   FcPattern = Pointer;
   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;
+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;
 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
 

+ 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
 
+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
 licensed LGPL-MPL see the file cairo.pp for the full license.
 }
@@ -27,20 +29,24 @@ interface
 uses
   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;
-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_device_to_logical(scaled_font: pcairo_scaled_font_t; device_to_logical: pcairo_matrix_t); cdecl; external LIB_CAIRO;
 
 implementation
 
-
 end.

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

@@ -17,6 +17,10 @@ unit CairoXlib;
  Translation of cairo-xlib.h version 1.4
  by Jeffrey Pohlmeyer 
  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
   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_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_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_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;
-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
 

+ 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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 override PACKAGE_NAME=cdrom
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=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
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else

+ 2 - 2
packages/cdrom/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 [rules]
 # 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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -529,6 +529,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_PROGRAMS+=getdiscid showcds
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_PROGRAMS+=getdiscid showcds
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 override TARGET_PROGRAMS+=getdiscid showcds
 endif
@@ -920,7 +923,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1112,6 +1115,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -1140,10 +1144,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1799,6 +1811,15 @@ REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_CDROM=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_CDROM=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -2234,7 +2255,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 override PACKAGE_NAME=chm
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=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
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else

+ 2 - 2
packages/chm/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 [rules]
 # 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+}
 
 uses
-  Classes, Sysutils, chmfilewriter, GetOpts;
+  {$ifdef LZX_USETHREADS}{$ifdef Unix}cthreads,{$endif}{$endif} Classes, Sysutils, chmfilewriter, GetOpts;
 
 Const
-  CHMCMDVersion = '2.6.0';
+  CHMCMDVersion = '2.6.1';
 
 Procedure Usage;
 
@@ -101,7 +101,7 @@ var
 
 procedure OnError (Project: TChmProject;errorkind:TChmProjectErrorKind;msg:String;detailevel:integer=0);
 begin
-  if detailevel<=alloweddetaillevel then
+  if (detailevel<=alloweddetaillevel) or (errorkind < chmnote) then
     if errorkind<>chmnone then
       writeln(ChmErrorKindText[errorkind],': ',msg)
     else
@@ -150,6 +150,8 @@ begin
     end;
   OutStream := TFileStream.Create(Project.OutputFileName, fmCreate, fmOpenWrite);
   Project.WriteChm(OutStream);
+  if Project.ScanHtmlContents then
+    Project.ShowUndefinedAnchors;
   if ishhp and GenerateXMLForHHP then
     begin
       Writeln('Generating XML ',xmlname,'.');

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

@@ -60,6 +60,7 @@ type
     fOtherFiles : TStrings; // Files found in a scan.
     fAllowedExtensions: TStringList;
     fTotalFileList : TAvlTree;
+    fAnchorList    : TStringList;
     FSpareString   : TStringIndex;
     FBasePath      : String;     // location of the .hhp file. Needed to resolve relative paths
     FReadmeMessage : String;     // readme message
@@ -75,6 +76,7 @@ type
     procedure ScanList(toscan,newfiles:TStrings;recursion:boolean);
     procedure ScanSitemap(sitemap:TChmSiteMap;newfiles:TStrings;recursion:boolean);
     function  FileInTotalList(const s:String):boolean;
+    function  SanitizeURL(const basepath, instring, localpath, localname:string; var outstring:String):Boolean;
   public
     constructor Create; virtual;
     destructor Destroy; override;
@@ -82,6 +84,7 @@ type
     procedure LoadFromhhp (AFileName:String;LeaveInclude:Boolean); virtual;
     procedure SaveToFile(AFileName: String); virtual;
     procedure WriteChm(AOutStream: TStream); virtual;
+    procedure ShowUndefinedAnchors;
     function ProjectDir: String;
     procedure LoadSitemaps;
     procedure AddFileWithContext(contextid:integer;filename:ansistring;contextname:ansistring='');
@@ -126,6 +129,23 @@ implementation
 
 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 }
 
 function TChmProject.GetData(const DataName: String; out PathInChm: String; out
@@ -187,6 +207,9 @@ begin
   ScanHtmlContents:=False;
   FTotalFileList:=TAvlTree.Create(@CompareStrings);
   FSparestring  :=TStringIndex.Create;
+  fAnchorList := TStringList.Create;
+  fAnchorList.Sorted := True;
+  fAnchorList.OwnsObjects := True;
 end;
 
 destructor TChmProject.Destroy;
@@ -206,6 +229,7 @@ begin
   FIndex.free;
   FTocStream.Free;
   FIndexStream.Free;
+  fAnchorList.Free;
   inherited Destroy;
 end;
 
@@ -690,11 +714,12 @@ begin
 end;
 
 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;
+  Anchor: String;
 begin
   result:=true; outstring:='';
   if instring='' then
@@ -703,6 +728,7 @@ begin
   len:=length(instring);
   if len=0 then
     exit(false);
+  { Check for protocols before adding local path }
   i:=0;
   while (i<=high(protocols)) do
     begin
@@ -710,11 +736,22 @@ begin
         exit(false);
       inc(i);
     end;
-   outstring:=instring;
+   outstring:=localpath+instring;
 
    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);
+   end;
 
   outstring:=expandfilename(StringReplace(outstring,'%20',' ',[rfReplaceAll]));// expandfilename(instring));
 
@@ -737,37 +774,44 @@ procedure TChmProject.ScanList(toscan,newfiles:TStrings;recursion:boolean);
 var
   localpath : string;
 
-procedure checkattributes(node:TDomNode;attributename:string;filelist :TStringList);
+function findattribute(node:TDomNode;attributename:string):String;
 var
     Attributes: TDOMNamedNodeMap;
     atnode    : TDomNode;
-    fn        : String;
     n         : integer;
 begin
+  Result := '';
   if assigned(node) then
     begin
       Attributes:=node.Attributes;
       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;
 
+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
 var chld: TDomNode;
     s   : ansistring;
+    i   : Integer;
 begin
   result:=nil;
   if assigned(prnt )  then
@@ -775,24 +819,39 @@ begin
       chld:=prnt.firstchild;
       while assigned(chld) do
         begin
-          scantags(chld,filelist);  // depth first.
+          scantags(chld, localname, filelist);  // depth first.
           if (chld is TDomElement) then
             begin
               s:=uppercase(tdomelement(chld).tagname);
               if s='LINK' then
                 begin
                   //printattributes(chld,'');
-                  checkattributes(chld,'HREF',filelist);
+                  checkattributes(chld,'HREF',localname,filelist);
                 end;
              if s='IMG'then
                begin
                   //printattributes(chld,'');
-                  checkattributes(chld,'SRC',filelist);
+                  checkattributes(chld,'SRC',localname,filelist);
                end;
              if s='A'then
                begin
                   //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;
           chld:=chld.nextsibling;
@@ -818,7 +877,7 @@ begin
   if FileInTotalList(vn2) then
    begin
      Error(ChmNote,'Found duplicate file '+vn+' while scanning '+fn,1);
-     exit(false);
+     exit(true);
    end;
 
   result:=false;
@@ -851,7 +910,7 @@ begin
                localpath:=extractfilepath(fn);
                if (length(localpath)>0) and not (localpath[length(localpath)] in ['/','\']) then
                  localpath:=localpath+pathsep;
-               scantags(domdoc,localfilelist);
+               scantags(domdoc,extractfilename(fn),localfilelist);
                for i:=0 to localFilelist.count-1 do
                  begin
                    s:=localfilelist[i];
@@ -896,7 +955,7 @@ begin
   for i:=0 to it.count -1 do
     begin
       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
           if not FileInTotalList(uppercase(s)) then
             begin
@@ -1066,6 +1125,15 @@ begin
   Writer.Free;
 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;
 // #IDXHDR (merged files) goes into the system file, and need to keep  TOC sitemap around
 begin

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

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

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

@@ -1282,8 +1282,8 @@ begin
   // write guid 4662DAAF-D393-11D0-9A56-00C04FB68BF7
   ObjStream.WriteDWord(NtoLE($4662DAAF));
   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($C0);
   ObjStream.WriteByte($4F);
@@ -1332,14 +1332,14 @@ begin
   ObjStream.WriteDWord(NtoLE($E66561C6));
   ObjStream.WriteDWord(NtoLE($73DF6561));
   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
   // write guid 8FA0D5A8-DEDF-11D0-9A61-00C04FB68BF7
   ObjStream.WriteDWord(NtoLE($8FA0D5A8));
   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($C0);
   ObjStream.WriteByte($4F);
@@ -1357,8 +1357,8 @@ begin
   // write guid 4662DAB0-D393-11D0-9A56-00C04FB68B66
   ObjStream.WriteDWord(NtoLE($4662DAB0));
   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($C0);
   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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 override PACKAGE_NAME=cocoaint
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=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
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else

+ 2 - 2
packages/cocoaint/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 [rules]
 # 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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 override PACKAGE_NAME=dblib
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=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
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else

+ 2 - 2
packages/dblib/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 [rules]
 # 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_73     = 11; // Microsoft SQL Server 2008
 
-  //from sqlfront.h ,   sybdb.h for freetds
+  //from sqlfront.h , sybdb.h for FreeTDS
   DBSETHOST=1;
   DBSETUSER=2;
-  DBSETPWD=3;
-  DBSETAPP={$IFDEF freetds}5{$ELSE}4{$ENDIF};
+  DBSETPWD =3;
+  DBSETAPP ={$IFDEF freetds}5{$ELSE}4{$ENDIF};
   {$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;
   DBSETFALLBACK=12;
   {$ENDIF}
@@ -143,15 +143,18 @@ const
   SQLDATETIM4=$3a;
   SQLDECIMAL=$6a;
   SQLNUMERIC=$6c;
-  //from tds.h:
+  // from proto.h:
   SYBNTEXT=$63;
-  SYBINT8=$7F;
-  SYBUNIQUE=$24;
+  // MS only types:
+  SYBINT8   =$7F;
+  SYBUNIQUE =$24;
   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};
   MAXCOLNAMELEN={$IFDEF freetds}512+1{$ELSE}30{$ENDIF};
@@ -184,6 +187,7 @@ type
   ULONG=longword;
 
   // DB-Library datatypes
+  DBBOOL=byte;           // unsigned char
   DBCHAR=shortint;
   DBBIT=byte;
   DBTINYINT=byte;
@@ -200,6 +204,18 @@ type
   end;
   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=packed record
     case boolean of
@@ -237,6 +253,11 @@ type
   end;
   PDBDATEREC=^DBDATEREC;
 
+  DBMONEY=record
+    mnyhigh: DBINT;
+    mnylow: ULONG;
+  end;
+
   DBNUMERIC=packed record
    	precision: BYTE;
    	scale: BYTE;
@@ -307,12 +328,15 @@ var
   function dbprtype(token:INT):PChar; cdecl; external DBLIBDLL;
   function dbdatlen(dbproc:PDBPROCESS; column:INT):DBINT; 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 dbdatecrack(dbproc:PDBPROCESS; dateinfo:PDBDATEREC; datetime: PDBDATETIME):RETCODE; cdecl; external DBLIBDLL;
   function dbcount(dbproc:PDBPROCESS):DBINT; cdecl; external DBLIBDLL;
   function dbiscount(dbproc:PDBPROCESS):BOOL; cdecl; external DBLIBDLL;
   function dbcancel(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 dbexit(); cdecl; external DBLIBDLL;
   {$IFDEF ntwdblib}
@@ -353,12 +377,15 @@ var
   dbprtype: function(token:INT):PChar; cdecl;
   dbdatlen: function(dbproc:PDBPROCESS; column:INT):DBINT; 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;
   dbdatecrack: function(dbproc:PDBPROCESS; dateinfo:PDBDATEREC; datetime: PDBDATETIME):RETCODE; cdecl;
   dbcount: function(dbproc:PDBPROCESS):DBINT; cdecl;
   dbiscount: function(dbproc:PDBPROCESS):BOOL; cdecl;
   dbcancel: 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;
   dbfreelogin: procedure(login:PLOGINREC); cdecl;
   {$IFDEF ntwdblib}
@@ -392,6 +419,8 @@ procedure dbwinexit;
 {$ENDIF}
 function dbsetlcharset(login:PLOGINREC; charset:PChar):RETCODE;
 function dbsetlsecure(login:PLOGINREC):RETCODE;
+function dbdatetimeallcrack(dta: PDBDATETIMEALL): TDateTime;
+function dbmoneytocurr(pdbmoney: PQWord): Currency;
 
 function InitialiseDBLib(const LibraryName : ansistring): integer;
 procedure ReleaseDBLib;
@@ -447,12 +476,15 @@ begin
    pointer(dbprtype) := GetProcedureAddress(DBLibLibraryHandle,'dbprtype');
    pointer(dbdatlen) := GetProcedureAddress(DBLibLibraryHandle,'dbdatlen');
    pointer(dbdata) := GetProcedureAddress(DBLibLibraryHandle,'dbdata');
+   pointer(dbwillconvert) := GetProcedureAddress(DBLibLibraryHandle,'dbwillconvert');
    pointer(dbconvert) := GetProcedureAddress(DBLibLibraryHandle,'dbconvert');
    pointer(dbdatecrack) := GetProcedureAddress(DBLibLibraryHandle,'dbdatecrack');
    pointer(dbcount) := GetProcedureAddress(DBLibLibraryHandle,'dbcount');
    pointer(dbiscount) := GetProcedureAddress(DBLibLibraryHandle,'dbiscount');
    pointer(dbcancel) := GetProcedureAddress(DBLibLibraryHandle,'dbcancel');
    pointer(dbcanquery) := GetProcedureAddress(DBLibLibraryHandle,'dbcanquery');
+   pointer(dbhasretstat) := GetProcedureAddress(DBLibLibraryHandle,'dbhasretstat');
+   pointer(dbretstatus) := GetProcedureAddress(DBLibLibraryHandle,'dbretstatus');
    pointer(dbexit) := GetProcedureAddress(DBLibLibraryHandle,'dbexit');
    pointer(dbfreelogin) := GetProcedureAddress(DBLibLibraryHandle,{$IFDEF freetds}'dbloginfree'{$ELSE}'dbfreelogin'{$ENDIF});
    pointer(dbclose) := GetProcedureAddress(DBLibLibraryHandle,'dbclose');
@@ -567,6 +599,25 @@ begin
 end;
 {$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
 //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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 override PACKAGE_NAME=dbus
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=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
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else

+ 2 - 2
packages/dbus/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 [rules]
 # 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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -529,6 +529,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_PROGRAMS+=busexample
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_PROGRAMS+=busexample
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 override TARGET_PROGRAMS+=busexample
 endif
@@ -920,7 +923,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1112,6 +1115,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -1140,10 +1144,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1799,6 +1811,15 @@ REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_DBUS=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_DBUS=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -2234,7 +2255,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 override PACKAGE_NAME=dts
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=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
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else

+ 2 - 2
packages/dts/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 [rules]
 # 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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 override PACKAGE_NAME=fastcgi
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=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
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else

+ 2 - 2
packages/fastcgi/Makefile.fpc

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 [rules]
 # 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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 override PACKAGE_NAME=fcl-async
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=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
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else

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

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 [rules]
 # 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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 override PACKAGE_NAME=fcl-base
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=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
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else

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

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 [rules]
 # 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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -529,6 +529,9 @@ endif
 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
 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)
 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
@@ -920,7 +923,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1112,6 +1115,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -1140,10 +1144,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -2359,6 +2371,23 @@ REQUIRE_PACKAGES_FCL-REGISTRY=1
 REQUIRE_PACKAGES_FCL-WEB=1
 REQUIRE_PACKAGES_FCL-XML=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_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)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -3122,7 +3151,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else

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

@@ -19,6 +19,7 @@ begin
     P.Version:='2.7.1';
     P.Dependencies.Add('univint',[Darwin,iPhoneSim]);
     P.Dependencies.Add('fcl-res');
+    p.Dependencies.Add('rtl-objpas');
 
     P.Author := '<various>';
     P.License := 'LGPL with modification, ';
@@ -73,6 +74,7 @@ begin
           AddUnit('contnrs');
         end;
     T:=P.Targets.AddUnit('iostream.pp');
+    T:=P.Targets.AddUnit('nullstream.pp');
     T:=P.Targets.AddUnit('maskutils.pp');
       T.ResourceStrings:=true;
     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 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 : 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 : Array of 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);
 end;
 
-Procedure TCustomApplication.GetEnvironmentList(List : TStrings;NamesOnly : Boolean);
+procedure TCustomApplication.GetEnvironmentList(List: TStrings;
+  NamesOnly: Boolean);
 
 begin
   // Routine must be in custapp.inc
   SysGetEnvironmentList(List,NamesOnly);
 end;
 
-Procedure TCustomApplication.GetEnvironmentList(List : TStrings);
+procedure TCustomApplication.GetEnvironmentList(List: TStrings);
 
 begin
   GetEnvironmentList(List,False);
@@ -229,13 +231,13 @@ begin
   // Do nothing. Override in descendent classes.
 end;
 
-Procedure TCustomApplication.DoLog(EventType : TEventType; const Msg : String);
+procedure TCustomApplication.DoLog(EventType: TEventType; const Msg: String);
 
 begin
   // Do nothing, override in descendants
 end;
 
-Procedure TCustomApplication.Log(EventType : TEventType; const Msg : String);
+procedure TCustomApplication.Log(EventType: TEventType; const Msg: String);
 
 begin
   If (FEventLogFilter=[]) or (EventType in FEventLogFilter) then
@@ -299,12 +301,13 @@ begin
   FTerminated:=True;
 end;
 
-function TCustomApplication.GetOptionValue(Const S: String): String;
+function TCustomApplication.GetOptionValue(const S: String): String;
 begin
   Result:=GetoptionValue(#255,S);
 end;
 
-function TCustomApplication.GetOptionValue(Const C: Char; Const S: String): String;
+function TCustomApplication.GetOptionValue(const C: Char; const S: String
+  ): String;
 
 Var
   B : Boolean;
@@ -330,12 +333,13 @@ begin
     else
       begin // short options have form '-o value'
       If (I<ParamCount) then
-        Result:=Params[I+1];
+        if (Copy(Params[I+1],1,1)<>'-') then
+          Result:=Params[I+1];
       end;
     end;
 end;
 
-function TCustomApplication.HasOption(Const S: String): Boolean;
+function TCustomApplication.HasOption(const S: String): Boolean;
 
 Var
   B : Boolean;
@@ -344,7 +348,8 @@ begin
   Result:=FindOptionIndex(S,B)<>-1;
 end;
 
-function TCustomApplication.FindOptionIndex(Const S : String; Var Longopt : Boolean) : Integer;
+function TCustomApplication.FindOptionIndex(const S: String;
+  var Longopt: Boolean): Integer;
 
 Var
   SO,O : String;
@@ -380,7 +385,7 @@ begin
     end;
 end;
 
-function TCustomApplication.HasOption(Const C: Char; Const S: String): Boolean;
+function TCustomApplication.HasOption(const C: Char; const S: String): Boolean;
 
 Var
   B : Boolean;
@@ -390,7 +395,8 @@ begin
 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
   Result:=CheckOptions(ShortOptions,LongOpts,Nil,Nil,AllErrors);
@@ -401,12 +407,14 @@ ResourceString
   SErrNoOptionAllowed = 'Option at position %d does not allow 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
   I,J,L,P : Integer;
   O,OV,SO : String;
-  HaveArg : Boolean;
+  UsedArg,HaveArg : Boolean;
 
   Function FindLongOpt(S : String) : boolean;
 
@@ -414,6 +422,9 @@ Var
     I : integer;
 
   begin
+    Result:=Assigned(LongOpts);
+    if Not Result then
+      exit;
     If CaseSensitiveOptions then
       begin
       I:=LongOpts.Count-1;
@@ -496,6 +507,7 @@ begin
         else // Short Option.
           begin
           HaveArg:=(I<ParamCount) and (Length(ParamStr(I+1))>0) and (ParamStr(I+1)[1]<>FOptionChar);
+          UsedArg:=False;
           If HaveArg then
             OV:=Paramstr(I+1);
           If Not CaseSensitiveOptions then
@@ -516,11 +528,12 @@ begin
                   If (J<L) or not haveArg then // Must be last in multi-opt !!
                     AddToResult(Format(SErrOptionNeeded,[I,O[J]]));
                 O:=O[j]; // O is added to arguments.
+                UsedArg:=True;
                 end;
               end;
             Inc(J);
             end;
-          If HaveArg then
+          If HaveArg and UsedArg then
             begin
             Inc(I); // Skip argument.
             O:=O[Length(O)]; // O is added to arguments !
@@ -535,7 +548,26 @@ begin
     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
   L : TStringList;
@@ -552,7 +584,8 @@ begin
   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
   SepChars = ' '#10#13#9;

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

@@ -695,7 +695,7 @@ Resourcestring
   SErrInvalidNumber = 'Invalid numerical value : %s';
   SErrNoOperand = 'No operand for unary 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';
   SErrNoNOTOperation = 'Cannot perform "not" on expression of type %s: %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)
   private
     FExtensions: String;
-    FExtentions: String;
     FMimeType: String;
   Public
     Constructor Create(Const AMimeType,AExtensions : String);
     Procedure MergeExtensions(AExtensions : String);
     Property MimeType : String Read FMimeType Write FMimeType;
-    Property Extensions : String Read FExtensions Write FExtentions;
+    Property Extensions : String Read FExtensions Write FExtensions;
   end;
 
   { TFPMimeTypes }
@@ -266,7 +265,9 @@ Var
 begin
   T:=FindMimeByType(AMimeType);
   if Assigned(T) then
-    Result:=T.Extensions;
+    Result:=T.Extensions
+  else
+    Result:='';
 end;
 
 function TFPMimeTypes.GetMimeType(const AExtension: String): String;
@@ -276,7 +277,9 @@ Var
 begin
   T:=FindMimeByExt(AExtension);
   if Assigned(T) then
-    Result:=T.MimeType;
+    Result:=T.MimeType
+  else
+    Result:='';
 end;
 
 function TFPMimeTypes.GetKnownMimeTypes(AList: TStrings): Integer;

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

@@ -56,6 +56,24 @@ interface
 uses classes, sysutils, contnrs;
 
 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 = class(TStringList)
@@ -167,6 +185,7 @@ type
     FStream: TStream;
     FCacheUpdates: Boolean;
     FDirty : Boolean;
+    FBOM : String;
     procedure FillSectionList(AStrings: TStrings);
     Procedure DeleteSection(ASection : TIniFileSection);
     Procedure MaybeDeleteSection(ASection : TIniFileSection);
@@ -231,6 +250,59 @@ begin
     Result := (Copy(AString, 1, 1) = Comment);
 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 }
 
 destructor THashedStringList.Destroy;
@@ -627,6 +699,7 @@ constructor TIniFile.Create(const AFileName: string; AEscapeLineFeeds : Boolean
 var
   slLines: TStringList;
 begin
+  FBOM := '';
   If Not (self is TMemIniFile) then
     StripQuotes:=True;
   inherited Create(AFileName,AEscapeLineFeeds);
@@ -648,6 +721,7 @@ constructor TIniFile.Create(AStream: TStream; AEscapeLineFeeds : Boolean = False
 var
   slLines: TStringList;
 begin
+  FBOM := '';
   inherited Create('',AEscapeLineFeeds);
   FStream := AStream;
   slLines := TStringList.Create;
@@ -672,6 +746,9 @@ begin
 end;
 
 procedure TIniFile.FillSectionList(AStrings: TStrings);
+const
+  Utf8Bom    = #$EF#$BB#$BF;        { Die einzelnen BOM Typen }
+
 var
   i,j: integer;
   sLine, sIdent, sValue: string;
@@ -706,6 +783,11 @@ begin
   FSectionList.Clear;
   if FEscapeLineFeeds then
     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
     sLine := Trim(AStrings[i]);
     if sLine > '' then
@@ -963,6 +1045,8 @@ begin
         if (i < FSectionList.Count-1) and not IsComment(Name) then
           slLines.Add('');
       end;
+    if slLines.Count > 0 then
+      slLines.Strings[0] := FBOM + slLines.Strings[0];
     if FFileName > '' then
       begin
       D:=ExtractFilePath(FFileName);

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

@@ -45,7 +45,7 @@ type
 
 implementation
 
-const
+Resourcestring
   SInvalidOperation = 'Cannot perform this operation on a NullStream.';
 
 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;
   TWriteStrEvent = procedure(const ASection, Item, Value: string) of object;
   TEraseSectEvent = procedure(const ASection: string) of object;
-
+  TPropStorageOption = (psoAlwaysStoreStringsCount);
+  TPropStorageOptions = set of TPropStorageOption;
+  
   TPropsStorage = class(TObject)
   private
     FObject: TObject;
     FOwner: TComponent;
     FPrefix: string;
     FSection: string;
+    FOptions : TPropStorageOptions;
     FOnReadString: TReadStrEvent;
     FOnWriteString: TWriteStrEvent;
     FOnEraseSection: TEraseSectEvent;
@@ -113,6 +116,7 @@ type
     procedure LoadProperties(PropList: TStrings);
     procedure LoadObjectsProps(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 Prefix: string read FPrefix write FPrefix;
     property Section: string read FSection write FSection;
@@ -465,11 +469,13 @@ begin
   List := TObject(GetObjectProp(Self.FObject, PropInfo));
   SectName := Format('%s.%s', [Section, GetItemName(PropInfo^.Name)]);
   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));
     for I := 0 to TStrings(List).Count - 1 do
       WriteString(SectName, Format(sItem, [I]), TStrings(List)[I]);
-  end;
+    end;
 end;
 
 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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -321,14 +321,14 @@ endif
 endif
 override PACKAGE_NAME=fcl-db
 override PACKAGE_VERSION=2.7.1
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -711,7 +711,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -903,6 +903,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -931,10 +932,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -1520,6 +1529,14 @@ REQUIRE_PACKAGES_HASH=1
 REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=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
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -1914,7 +1931,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else

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

@@ -16,14 +16,14 @@ fpcpackage=y
 fpcdir=../..
 
 [prerules]
-FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
 ifdef OS_TARGET
 FPC_TARGETOPT+=--os=$(OS_TARGET)
 endif
 ifdef CPU_TARGET
 FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
 endif
-LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
 
 [rules]
 # 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>
   <ProjectOptions>
     <Version Value="9"/>

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

@@ -36,7 +36,7 @@ type
 
   TDBFTool = class(TCustomApplication)
   private
-    procedure ExportDBF(var MyDbf: TDbf);
+    procedure ExportDBF(var MyDbf: TDbf; ExportFormat: string);
   protected
     procedure DoRun; override;
   public
@@ -48,7 +48,6 @@ type
   procedure CreateDemoDBFs(Directory: string; TableLevel: integer);
   // Creates 2 demonstration DBFs in Directory with dbase compatibility level
   // TableLevel
-  // and specified codepage (if not CODEPAGE_NOT_SPECIFIED)
   var
     NewDBF: TDBF;
     i: integer;
@@ -65,7 +64,7 @@ type
       else
         NewDBF.TableLevel := TableLevel;
 
-      NewDBF.TableName := 'CUSTOMER.DBF';
+      NewDBF.TableName := 'customer.dbf';
       writeln('Creating ', NewDBF.TableName, ' with table level ', NewDBF.TableLevel);
       if TableLevel >= 30 then
       begin
@@ -111,7 +110,7 @@ type
           end;
           5:
           begin
-            NewDBF.FieldByName('CUSTOMER').AsString := 'Felipe Bank';
+            NewDBF.FieldByName('CUSTOMER').AsString := 'Felipe''s Bank';
             NewDBF.FieldByName('CITY').AsString := 'Manchester';
             NewDBF.FieldByName('COUNTRY').AsString := 'England';
           end;
@@ -126,7 +125,7 @@ type
     NewDBF := TDBF.Create(nil);
     try
       if Directory = '' then
-        NewDBF.FilePath := '' { application directory}
+        NewDBF.FilePath := '' {application directory}
       else
         NewDBF.FilePathFull := ExpandFileName(Directory) {full absolute path};
       if TableLevel <= 0 then
@@ -134,7 +133,7 @@ type
       else
         NewDBF.TableLevel := TableLevel;
 
-      NewDBF.TableName := 'EMPLOYEE.DBF';
+      NewDBF.TableName := 'employee.dbf';
       writeln('Creating ', NewDBF.TableName, ' with table level ', NewDBF.TableLevel);
       if TableLevel >= 30 then
       begin
@@ -262,36 +261,43 @@ type
     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
     i: integer;
+    RecordCount: integer;
   begin
-    writeln('Record ' + IntToStr(RecordNumber));
-    for i := 0 to DBf.Fields.Count - 1 do
+    Dbf.First;
+    RecordCount:=0;
+    while not (Dbf.EOF) 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);
+      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;
 
   { 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
-    ExportFormatText: string;
     ExportSettings: TCustomExportFormatSettings;
     Exporter: TCustomFileExporter;
   begin
-    ExportFormatText := UpperCase(GetOptionValue('exportformat'));
     try
-      case ExportFormatText of
+      case UpperCase(ExportFormat) of
         'ACCESS', 'MSACCESS':
         begin
           Exporter := TXMLXSDExporter.Create(nil);
@@ -390,7 +396,7 @@ type
         end
         else
         begin
-          writeln('***Error: Unknown export format ' + ExportFormatText + ' specified' + '. Aborting');
+          writeln('***Error: Unknown export format ' + ExportFormat + ' specified' + '. Aborting');
           Exporter := nil;
           ExportSettings := nil;
           Terminate;
@@ -418,11 +424,10 @@ type
     ErrorMsg: string;
     FileNo: integer;
     MyDbf: TDbf;
-    RecCount: integer;
-    TableLevel: integer; //todo: use it
+    TableLevel: integer;
   begin
     // quick check parameters
-    ErrorMsg := CheckOptions('h', 'codepage: createdemo exportformat: help tablelevel:');
+    ErrorMsg := CheckOptions('h', 'createdemo exportformat: help tablelevel:');
     if ErrorMsg <> '' then
     begin
       ShowException(Exception.Create(ErrorMsg));
@@ -488,19 +493,12 @@ type
             writeln('Database tablelevel: ' + IntToStr(MyDbf.TableLevel));
             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
             begin
               try
-                ExportDBF(MyDbf);
+                ExportDBF(MyDbf,GetOptionValue('exportformat'));
               except
                 on E: Exception do
                 begin
@@ -551,7 +549,7 @@ type
     writeln(' 30                    Visual FoxPro');
     writeln(' --exportformat=<text> export dbfs to format. Format can be:');
     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(' csvRFC4180            LibreOffice/RFC4180 format CSV text file');
     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-xml');
+    P.Dependencies.Add('rtl-objpas');
+    P.Dependencies.Add('rtl-extra'); // clocale
     P.Dependencies.Add('ibase', SqldbConnectionOSes);
     P.Dependencies.Add('mysql', SqldbConnectionOSes);
     P.Dependencies.Add('odbc', SqldbConnectionOSes);
@@ -583,6 +585,7 @@ begin
         begin
           AddUnit('db');
         end;
+
     T:=P.Targets.AddUnit('mysql40conn.pas', SqldbConnectionOSes);
     T.ResourceStrings:=true;
       with T.Dependencies do
@@ -603,7 +606,8 @@ begin
           AddUnit('db');
           AddUnit('dbconst');
         end;
-    T:=P.Targets.AddUnit('mysql4conn.pas', SqldbConnectionOSes);
+
+    T:=P.Targets.AddUnit('mysql50conn.pas', SqldbConnectionOSes);
     T.ResourceStrings:=true;
       with T.Dependencies do
         begin
@@ -613,7 +617,8 @@ begin
           AddUnit('db');
           AddUnit('dbconst');
         end;
-    T:=P.Targets.AddUnit('mysql50conn.pas', SqldbConnectionOSes);
+
+    T:=P.Targets.AddUnit('mysql51conn.pas', SqldbConnectionOSes);
     T.ResourceStrings:=true;
       with T.Dependencies do
         begin
@@ -624,7 +629,7 @@ begin
           AddUnit('dbconst');
         end;
 
-    T:=P.Targets.AddUnit('mysql51conn.pas', SqldbConnectionOSes);
+    T:=P.Targets.AddUnit('mysql55conn.pas', SqldbConnectionOSes);
     T.ResourceStrings:=true;
       with T.Dependencies do
         begin
@@ -635,7 +640,7 @@ begin
           AddUnit('dbconst');
         end;
 
-    T:=P.Targets.AddUnit('mysql55conn.pas', SqldbConnectionOSes);
+    T:=P.Targets.AddUnit('mysql56conn.pas', SqldbConnectionOSes);
     T.ResourceStrings:=true;
       with T.Dependencies do
         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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -532,6 +532,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_UNITS+=dbconst db dbwhtml bufdataset_parser bufdataset dbcoll sqlscript xmldatapacketreader
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_UNITS+=dbconst db dbwhtml bufdataset_parser bufdataset dbcoll sqlscript xmldatapacketreader
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 override TARGET_UNITS+=dbconst db dbwhtml bufdataset_parser bufdataset dbcoll sqlscript xmldatapacketreader
 endif
@@ -751,6 +754,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_RSTS+=dbconst dbcoll sqlscript xmldatapacketreader
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_RSTS+=dbconst dbcoll sqlscript xmldatapacketreader
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 override TARGET_RSTS+=dbconst dbcoll sqlscript xmldatapacketreader
 endif
@@ -971,6 +977,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 override COMPILER_OPTIONS+=-S2h
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_OPTIONS+=-S2h
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 override COMPILER_OPTIONS+=-S2h
 endif
@@ -1190,6 +1199,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 override COMPILER_UNITDIR+=../dbase
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_UNITDIR+=../dbase
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 override COMPILER_UNITDIR+=../dbase
 endif
@@ -1580,7 +1592,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1772,6 +1784,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -1800,10 +1813,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -2529,6 +2550,16 @@ REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=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_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -3005,7 +3036,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 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;
 
-Procedure TDBTransaction.InternalHandleException;
+procedure TDBTransaction.InternalHandleException;
 
 begin
   if assigned(classes.ApplicationHandleException) then
@@ -303,33 +303,55 @@ begin
     ShowException(ExceptObject,ExceptAddr);
 end;
 
-Procedure TDBTransaction.CheckActive;
+procedure TDBTransaction.CheckActive;
 
 begin
   If not FActive Then
     DatabaseError(STransNotActive,Self);
 end;
 
-Procedure TDBTransaction.CheckInActive;
+procedure TDBTransaction.CheckInactive;
 
 begin
   If FActive Then
     DatabaseError(STransActive,Self);
 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
   FActive := false;
 end;
 
-Procedure TDBTransaction.OpenTrans;
+procedure TDBTransaction.openTrans;
 
 begin
   FActive := true;
 end;
 
-Procedure TDBTransaction.SetDatabase (Value : TDatabase);
+procedure TDBTransaction.SetDatabase(Value: TDatabase);
 
 begin
   If Value<>FDatabase then
@@ -343,14 +365,14 @@ begin
     end;
 end;
 
-constructor TDBTransaction.create(AOwner : TComponent);
+constructor TDBTransaction.Create(AOwner: TComponent);
 
 begin
   inherited create(AOwner);
   FDatasets:=TList.Create;
 end;
 
-Procedure TDBTransaction.CheckDatabase;
+procedure TDBTransaction.CheckDatabase;
 
 begin
   If (FDatabase=Nil) then
@@ -369,7 +391,7 @@ begin
     end;
 end;
 
-Destructor TDBTransaction.Destroy;
+destructor TDBTransaction.destroy;
 
 begin
   Database:=Nil;
@@ -389,7 +411,7 @@ begin
       TDBDataset(FDataSets[i]).Transaction:=Nil;
 end;
 
-Function TDBTransaction.GetDataSetCount : Longint;
+function TDBTransaction.GetDataSetCount: Longint;
 
 begin
   If Assigned(FDatasets) Then
@@ -422,7 +444,7 @@ begin
     DatabaseErrorFmt(SDatasetRegistered,[DS.Name]);
 end;
 
-Function TDBTransaction.GetDataset(Index : longint) : TDBDataset;
+function TDBTransaction.GetDataset(Index: longint): TDBDataset;
 
 begin
   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;
   F  : TField;
   I : Integer;
+  P : TParam;
+
 
 begin
   FN:='';
@@ -472,13 +474,17 @@ begin
     F:=Nil;
     For I:=0 to FParams.Count-1 do
       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
-        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;

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

@@ -1,6 +1,6 @@
 {
     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
 
 
@@ -100,13 +100,8 @@ type
 
   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,
     ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate,  ftTime, ftDateTime,
     ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo,
@@ -115,7 +110,7 @@ type
     ftDataSet, ftOraBlob, ftOraClob, ftVariant, ftInterface,
     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;
 
@@ -133,7 +128,7 @@ type
   TFieldAttribute = (faHiddenCol, faReadonly, faRequired, faLink, faUnNamed, faFixed);
   TFieldAttributes = set of TFieldAttribute;
 
-  { TNamedItem }
+{ TNamedItem }
 
   TNamedItem = class(TCollectionItem)
   private
@@ -147,7 +142,7 @@ type
     property Name : string read FName write SetDisplayName;
   end;
 
-  { TDefCollection }
+{ TDefCollection }
 
   TDefCollection = class(TOwnedCollection)
   private
@@ -164,7 +159,7 @@ type
     property Updated: boolean read FUpdated write FUpdated;
   end;
 
-  { TFieldDef }
+{ TFieldDef }
 
   TFieldDef = class(TNamedItem)
   Private
@@ -198,6 +193,7 @@ type
     property Precision: Longint read FPrecision write SetPrecision;
     property Size: Integer read FSize write SetSize;
   end;
+  TFieldDefClass = Class of TFieldDef;
 
 { TFieldDefs }
 
@@ -206,9 +202,12 @@ type
     FHiddenFields : Boolean;
     function GetItem(Index: Longint): TFieldDef;
     procedure SetItem(Index: Longint; const AValue: TFieldDef);
+  Protected
+    Class Function FieldDefClass : TFieldDefClass; virtual;
   public
     constructor Create(ADataSet: TDataSet);
 //    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); overload;
     procedure Add(const AName: string; ADataType: TFieldType); overload;
@@ -222,6 +221,7 @@ type
     Property HiddenFields : Boolean Read FHiddenFields Write FHiddenFields;
     property Items[Index: Longint]: TFieldDef read GetItem write SetItem; default;
   end;
+  TFieldDefsClass = Class of TFieldDefs;
 
 { TField }
 
@@ -241,7 +241,7 @@ type
     Value: Variant;
   end;
 
-  { TLookupList }
+{ TLookupList }
 
   TLookupList = class(TObject)
   private
@@ -256,7 +256,7 @@ type
     procedure ValuesToStrings(AStrings: TStrings);
   end;
 
-  { TField }
+{ TField }
 
   TField = class(TComponent)
   private
@@ -272,6 +272,7 @@ type
     FDisplayLabel : String;
     FDisplayWidth : Longint;
     FEditMask: TEditMask;
+    FFieldDef: TFieldDef;
     FFieldKind : TFieldKind;
     FFieldName : String;
     FFieldNo : Longint;
@@ -302,7 +303,7 @@ type
     function GetIndex : longint;
     function GetLookup: Boolean;
     procedure SetAlignment(const AValue: TAlignMent);
-    procedure SetIndex(const AValue: Integer);
+    procedure SetIndex(const AValue: Longint);
     function GetDisplayText: String;
     function GetEditText: String;
     procedure SetEditText(const AValue: string);
@@ -410,7 +411,7 @@ type
     property FieldNo: Longint read FFieldNo;
     property IsIndexField: Boolean read FIsIndexField;
     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 Offset: word read FOffset;
     property Size: Integer read FSize write SetSize;
@@ -419,6 +420,7 @@ type
     property Value: variant read GetAsVariant write SetAsVariant;
     property OldValue: variant read GetOldValue;
     property LookupList: TLookupList read GetLookupList;
+    Property FieldDef : TFieldDef Read FFieldDef;
   published
     property Alignment : TAlignment read FAlignment write SetAlignment default taLeftJustify;
     property CustomConstraint: string read FCustomConstraint write FCustomConstraint;
@@ -506,8 +508,8 @@ type
     property Value: WideString read GetAsWideString write SetAsWideString;
   end;
 
-
 { TNumericField }
+
   TNumericField = class(TField)
   Private
     FDisplayFormat : String;
@@ -854,14 +856,21 @@ type
 
 { TBlobField }
   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)
   private
-    FBlobType : TBlobType;
     FModified : Boolean;
     FTransliterate : Boolean;
     Function GetBlobStream (Mode : TBlobStreamMode) : TStream;
+    // Wrapper that retrieves FDataType as a TBlobType
+    function GetBlobType: TBlobType;
+    // Wrapper that calls SetFieldtype
+    procedure SetBlobType(AValue: TBlobType);
   protected
     procedure FreeBuffers; override;
     function GetAsBytes: TBytes; override;
@@ -890,7 +899,7 @@ type
     property Value: string read GetAsString write SetAsString;
     property Transliterate: Boolean read FTransliterate write FTransliterate;
   published
-    property BlobType: TBlobType read FBlobType write FBlobType;
+    property BlobType: TBlobType read GetBlobType write SetBlobType;
     property Size default 0;
   end;
 
@@ -1000,6 +1009,7 @@ type
   public
     constructor Create(Owner: TIndexDefs; const AName, TheFields: string;
       TheOptions: TIndexOptions); overload;
+  published    
     property Expression: string read GetExpression write SetExpression;
     property Fields: string read FFields write FFields;
     property CaseInsFields: string read FCaseinsFields write SetCaseInsFields;
@@ -1080,10 +1090,11 @@ type
       FOnChange : TNotifyEvent;
       FValidFieldKinds : TFieldKinds;
     Protected
+      Procedure ClearFieldDefs;
       Procedure Changed;
       Procedure CheckfieldKind(Fieldkind : TFieldKind; Field : TField);
       Function GetCount : Longint;
-      Function GetField (Index : longint) : TField;
+      Function GetField (Index : Integer) : TField;
       Procedure SetField(Index: Integer; Value: TField);
       Procedure SetFieldIndex (Field : TField;Value : Integer);
       Property OnChange : TNotifyEvent Read FOnChange Write FOnChange;
@@ -1106,9 +1117,9 @@ type
       Property Dataset : TDataset Read FDataset;
       Property Fields [Index : Integer] : TField Read GetField Write SetField; default;
     end;
+  TFieldsClass = Class of TFields;
 
-
-  { TParam }
+{ TParam }
 
   TBlobData = AnsiString;  // Delphi defines it as alias to TBytes
 
@@ -1138,6 +1149,7 @@ type
     Procedure AssignParam(Param: TParam);
     Procedure AssignTo(Dest: TPersistent); override;
     Function GetAsBoolean: Boolean;
+    Function GetAsBytes: TBytes;
     Function GetAsCurrency: Currency;
     Function GetAsDateTime: TDateTime;
     Function GetAsFloat: Double;
@@ -1150,8 +1162,10 @@ type
     Function GetDisplayName: string; override;
     Function GetIsNull: Boolean;
     Function IsEqual(AValue: TParam): Boolean;
+    Procedure SetAsBCD(const AValue: Currency);
     Procedure SetAsBlob(const AValue: TBlobData);
     Procedure SetAsBoolean(AValue: Boolean);
+    Procedure SetAsBytes(const AValue: TBytes);
     Procedure SetAsCurrency(const AValue: Currency);
     Procedure SetAsDate(const AValue: TDateTime);
     Procedure SetAsDateTime(const AValue: TDateTime);
@@ -1184,8 +1198,10 @@ type
     Procedure LoadFromStream(Stream: TStream; BlobType: TBlobType);
     Procedure SetBlobData(Buffer: Pointer; ASize: Integer);
     Procedure SetData(Buffer: Pointer);
+    Property AsBCD : Currency read GetAsCurrency write SetAsBCD;
     Property AsBlob : TBlobData read GetAsString write SetAsBlob;
     Property AsBoolean : Boolean read GetAsBoolean write SetAsBoolean;
+    Property AsBytes : TBytes read GetAsBytes write SetAsBytes;
     Property AsCurrency : Currency read GetAsCurrency write SetAsCurrency;
     Property AsDate : TDateTime read GetAsDateTime write SetAsDate;
     Property AsDateTime : TDateTime read GetAsDateTime write SetAsDateTime;
@@ -1203,7 +1219,6 @@ type
     Property IsNull : Boolean read GetIsNull;
     Property NativeStr : string read FNativeStr write FNativeStr;
     Property Text : string read GetAsString write SetText;
-    Property Value : Variant read GetAsVariant write SetAsVariant stored IsParamStored;
     property AsWideString: WideString read GetAsWideString write SetAsWideString;
   published
     Property DataType : TFieldType read FDataType write SetDataType;
@@ -1212,10 +1227,11 @@ type
     Property ParamType : TParamType read FParamType write FParamType;
     Property Precision : Integer read FPrecision write FPrecision default 0;
     Property Size : Integer read FSize write FSize default 0;
+    Property Value : Variant read GetAsVariant write SetAsVariant stored IsParamStored;
   end;
+  TParamClass = Class of TParam;
 
-
-  { TParams }
+{ TParams }
 
   TParams = class(TCollection)
   private
@@ -1228,7 +1244,9 @@ type
     Procedure AssignTo(Dest: TPersistent); override;
     Function  GetDataSet: TDataSet;
     Function  GetOwner: TPersistent; override;
+    Class Function ParamClass : TParamClass; virtual;
   public
+    Constructor Create(AOwner: TPersistent; AItemClass : TCollectionItemClass); overload;
     Constructor Create(AOwner: TPersistent); overload;
     Constructor Create; overload;
     Procedure AddParam(Value: TParam);
@@ -1382,7 +1400,7 @@ type
     FDisableControlsCount : Integer;
     FDisableControlsState : TDatasetState;
     FCurrentRecord: Longint;
-    FDataSources : TList;
+    FDataSources : TFPList;
     FDefaultFields: Boolean;
     FEOF: Boolean;
     FEnableControlsEvent : TDataEvent;
@@ -1468,7 +1486,7 @@ type
     procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
     function  GetFieldClass(FieldType: TFieldType): TFieldClass; virtual;
     Function  GetfieldCount : Integer;
-    function  GetFieldValues(const fieldname : string) : Variant; virtual;
+    function  GetFieldValues(const FieldName : string) : Variant; virtual;
     function  GetIsIndexField(Field: TField): Boolean; virtual;
     function  GetIndexDefs(IndexDefs : TIndexDefs; IndexTypes : TIndexOptions) : TIndexDefs;
     function  GetNextRecords: Longint; virtual;
@@ -1497,7 +1515,7 @@ type
     procedure SetFiltered(Value: Boolean); virtual;
     procedure SetFilterOptions(Value: TFilterOptions); 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 SetModified(Value: Boolean);
     procedure SetName(const Value: TComponentName); override;
@@ -1505,7 +1523,7 @@ type
     procedure SetRecNo(Value: Longint); virtual;
     procedure SetState(Value: TDataSetState);
     function SetTempState(const Value: TDataSetState): TDataSetState;
-    Function Tempbuffer: TRecordBuffer;
+    Function TempBuffer: TRecordBuffer;
     procedure UpdateIndexDefs; virtual;
     property ActiveRecord: Longint read FActiveRecord;
     property CurrentRecord: Longint read FCurrentRecord;
@@ -1535,6 +1553,8 @@ type
     procedure SetBookmarkFlag(Buffer: TRecordBuffer; Value: TBookmarkFlag); virtual;
     procedure SetBookmarkData(Buffer: TRecordBuffer; Data: Pointer); virtual;
     procedure SetUniDirectional(const Value: Boolean);
+    class function FieldDefsClass : TFieldDefsClass; virtual;
+    class function FieldsClass : TFieldsClass; virtual;
   protected { abstract methods }
     function GetRecord(Buffer: TRecordBuffer; GetMode: TGetMode; DoCheck: Boolean): TGetResult; virtual; abstract;
     procedure InternalClose; virtual; abstract;
@@ -1642,7 +1662,7 @@ type
     property RecordSize: Word read GetRecordSize;
     property State: TDataSetState read FState;
     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 Filtered: Boolean read FFiltered write SetFiltered default False;
     property FilterOptions: TFilterOptions read FFilterOptions write SetFilterOptions;
@@ -1864,6 +1884,10 @@ type
     Procedure CheckDatabase;
     Procedure CheckActive;
     Procedure CheckInactive;
+    procedure Commit; virtual;
+    procedure CommitRetaining; virtual;
+    procedure Rollback; virtual;
+    procedure RollbackRetaining; virtual;
     procedure EndTransaction; virtual; abstract;
     procedure StartTransaction; virtual; abstract;
     procedure InternalHandleException; virtual;
@@ -1979,85 +2003,101 @@ type
 
 
 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
   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
   DefaultFieldClasses : Array [TFieldType] of TFieldClass =
-    ( { ftUnknown} Tfield,
+    (
+      { ftUnknown} Tfield,
       { ftString} TStringField,
       { ftSmallint} TSmallIntField,
       { ftInteger} TLongintField,
@@ -2102,6 +2142,11 @@ const
   dsEditModes = [dsEdit, dsInsert, dsSetKey];
   dsWriteModes = [dsEdit, dsInsert, dsSetKey, dsCalcFields, dsFilter,
     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 }
 
@@ -2199,7 +2244,7 @@ procedure TNamedItem.SetDisplayName(const AValue: string);
 Var TmpInd : Integer;
 begin
   if FName=AValue then exit;
-  if (AValue <> '') and (Collection is TFieldDefs) then
+  if (AValue <> '') and (Collection is TFieldDefs ) then
     begin
     TmpInd :=  (TDefCollection(Collection).IndexOf(AValue));
     if (TmpInd >= 0) and (TmpInd <> Index) then

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

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

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

@@ -24,27 +24,27 @@ end;
 
 { TParams }
 
-Function TParams.GetItem(Index: Integer): TParam;
+function TParams.GetItem(Index: Integer): TParam;
 begin
   Result:=(Inherited GetItem(Index)) as TParam;
 end;
 
-Function TParams.GetParamValue(const ParamName: string): Variant;
+function TParams.GetParamValue(const ParamName: string): Variant;
 begin
   Result:=ParamByName(ParamName).Value;
 end;
 
-Procedure TParams.SetItem(Index: Integer; Value: TParam);
+procedure TParams.SetItem(Index: Integer; Value: TParam);
 begin
   Inherited SetItem(Index,Value);
 end;
 
-Procedure TParams.SetParamValue(const ParamName: string; const Value: Variant);
+procedure TParams.SetParamValue(const ParamName: string; const Value: Variant);
 begin
   ParamByName(ParamName).Value:=Value;
 end;
 
-Procedure TParams.AssignTo(Dest: TPersistent);
+procedure TParams.AssignTo(Dest: TPersistent);
 begin
  if (Dest is TParams) then
    TParams(Dest).Assign(Self)
@@ -52,7 +52,7 @@ begin
    inherited AssignTo(Dest);
 end;
 
-Function TParams.GetDataSet: TDataSet;
+function TParams.GetDataSet: TDataSet;
 begin
   If (FOwner is TDataset) Then
     Result:=TDataset(FOwner)
@@ -60,16 +60,27 @@ begin
     Result:=Nil;
 end;
 
-Function TParams.GetOwner: TPersistent;
+function TParams.GetOwner: TPersistent;
 begin
   Result:=FOwner;
 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);
 begin
-  Inherited Create(TParam);
-  Fowner:=AOwner;
+  Create(AOwner,ParamClass);
 end;
 
 constructor TParams.Create;
@@ -77,12 +88,12 @@ begin
   Create(TPersistent(Nil));
 end;
 
-Procedure TParams.AddParam(Value: TParam);
+procedure TParams.AddParam(Value: TParam);
 begin
   Value.Collection:=Self;
 end;
 
-Procedure TParams.AssignValues(Value: TParams);
+procedure TParams.AssignValues(Value: TParams);
 
 Var
   I : Integer;
@@ -98,7 +109,7 @@ begin
     end;
 end;
 
-Function TParams.CreateParam(FldType: TFieldType; const ParamName: string;
+function TParams.CreateParam(FldType: TFieldType; const ParamName: string;
   ParamType: TParamType): TParam;
 
 begin
@@ -108,7 +119,7 @@ begin
   Result.ParamType:=ParamType;
 end;
 
-Function TParams.FindParam(const Value: string): TParam;
+function TParams.FindParam(const Value: string): TParam;
 
 Var
   I : Integer;
@@ -123,7 +134,7 @@ begin
       Dec(i);
 end;
 
-Procedure TParams.GetParamList(List: TList; const ParamNames: string);
+procedure TParams.GetParamList(List: TList; const ParamNames: string);
 
 Var
   P: TParam;
@@ -141,7 +152,7 @@ begin
   until StrPos > Length(ParamNames);
 end;
 
-Function TParams.IsEqual(Value: TParams): Boolean;
+function TParams.IsEqual(Value: TParams): Boolean;
 
 Var
   I : Integer;
@@ -156,14 +167,14 @@ begin
     end;
 end;
 
-Function TParams.ParamByName(const Value: string): TParam;
+function TParams.ParamByName(const Value: string): TParam;
 begin
   Result:=FindParam(Value);
   If (Result=Nil) then
     DatabaseErrorFmt(SParameterNotFound,[Value],Dataset);
 end;
 
-Function TParams.ParseSQL(SQL: String; DoCreate: Boolean): String;
+function TParams.ParseSQL(SQL: String; DoCreate: Boolean): String;
 
 var pb : TParamBinding;
     rs : string;
@@ -172,7 +183,8 @@ begin
   Result := ParseSQL(SQL,DoCreate,True,True,psInterbase, pb, rs);
 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;
     rs : string;
@@ -181,7 +193,9 @@ begin
   Result := ParseSQL(SQL,DoCreate,EscapeSlash,EscapeRepeat,ParameterStyle,pb, rs);
 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;
 
@@ -192,16 +206,12 @@ end;
 function SkipComments(var p: PChar; EscapeSlash, EscapeRepeat : Boolean) : Boolean;
 
 begin
-  result := false;
+  Result := False;
   case p^ of
-    '''':
+    '''', '"', '`':
       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;
       end;
     '-': // possible start of -- comment
@@ -212,9 +222,9 @@ begin
           Result := True;
           repeat // skip until at end of line
             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;
-        if p^<>#0 then Inc(p); // newline is part of comment
       end;
     '/': // possible start of /* */ comment
       begin
@@ -236,7 +246,9 @@ begin
   end; {case}
 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
   // used for ParamPart
@@ -423,7 +435,7 @@ begin
 end;
 
 
-Procedure TParams.RemoveParam(Value: TParam);
+procedure TParams.RemoveParam(Value: TParam);
 begin
    Value.Collection:=Nil;
 end;
@@ -488,6 +500,17 @@ begin
     Result:=FValue;
 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;
 begin
   If IsNull then
@@ -564,7 +587,6 @@ begin
     Result := FValue;
 end;
 
-
 Function TParam.GetAsVariant: Variant;
 begin
   if IsNull then
@@ -605,6 +627,12 @@ begin
           and (FValue=AValue.FValue);
 end;
 
+procedure TParam.SetAsBCD(const AValue: Currency);
+begin
+  FDataType:=ftBCD;
+  Value:=AValue;
+end;
+
 Procedure TParam.SetAsBlob(const AValue: TBlobData);
 begin
   FDataType:=ftBlob;
@@ -617,16 +645,22 @@ begin
   Value:=AValue;
 end;
 
+procedure TParam.SetAsBytes(const AValue: TBytes);
+begin
+  FDataType:=ftVarBytes;
+  Value:=AValue;
+end;
+
 Procedure TParam.SetAsCurrency(const AValue: Currency);
 begin
   FDataType:=ftCurrency;
-  Value:=Avalue;
+  Value:=AValue;
 end;
 
 Procedure TParam.SetAsDate(const AValue: TDateTime);
 begin
   FDataType:=ftDate;
-  Value:=Avalue;
+  Value:=AValue;
 end;
 
 Procedure TParam.SetAsDateTime(const AValue: TDateTime);
@@ -712,7 +746,7 @@ begin
       if VarIsFmtBCD(Value) then
         FDataType:=ftFmtBCD
       else if VarIsArray(AValue) and (VarType(AValue) and varTypeMask = varByte) then
-        FDataType:=ftBytes
+        FDataType:=ftVarBytes
       else
         FDataType:=ftUnknown;
     end;
@@ -1089,7 +1123,8 @@ begin
 end;
 
 
-Procedure TParams.CopyParamValuesFromDataset(ADataset : TDataset; CopyBound : Boolean);
+procedure TParams.CopyParamValuesFromDataset(ADataset: TDataset;
+  CopyBound: Boolean);
 
 Var
   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.
-    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
 
     TFields and related components implementations.
@@ -15,7 +15,7 @@
  **********************************************************************}
 {Procedure DumpMem (P : Pointer;Size : Longint);
 
-Var i : longint;
+var i : longint;
 
 begin
   Write ('Memory dump : ');
@@ -31,7 +31,7 @@ end;}
 Constructor TFieldDef.Create(ACollection : TCollection);
 
 begin
-  Inherited create(ACollection);
+  Inherited Create(ACollection);
   FFieldNo:=Index+1;
 end;
 
@@ -80,7 +80,7 @@ end;
 
 Function TFieldDef.CreateField(AOwner: TComponent): TField;
 
-Var TheField : TFieldClass;
+var TheField : TFieldClass;
 
 begin
 {$ifdef dsdebug}
@@ -89,20 +89,21 @@ begin
   TheField:=GetFieldClass;
   if TheField=Nil then
     DatabaseErrorFmt(SUnknownFieldType,[FName]);
-  Result:=Thefield.Create(AOwner);
+  Result:=TheField.Create(AOwner);
   Try
+    Result.FFieldDef:=Self;
     Result.Size:=FSize;
     Result.Required:=FRequired;
     Result.FFieldName:=FName;
     Result.FDisplayLabel:=DisplayName;
     Result.FFieldNo:=Self.FieldNo;
     Result.SetFieldType(DataType);
-    Result.FReadOnly:= (faReadOnly in Attributes);
+    Result.FReadOnly:=(faReadOnly in Attributes);
 {$ifdef dsdebug}
-    Writeln ('TFieldDef.CReateField : Trying to set dataset');
+    Writeln ('TFieldDef.CreateField : Trying to set dataset');
 {$endif dsdebug}
 {$ifdef dsdebug}
-    Writeln ('TFieldDef.CReateField : Result Fieldno : ',Result.FieldNo,' Self : ',FieldNo);
+    Writeln ('TFieldDef.CreateField : Result Fieldno : ',Result.FieldNo,'; Self : ',FieldNo);
 {$endif dsdebug}
     Result.Dataset:=TFieldDefs(Collection).Dataset;
     If (Result is TFloatField) then
@@ -115,7 +116,6 @@ begin
     Result.Free;
     Raise;
   end;
-
 end;
 
 procedure TFieldDef.SetAttributes(AValue: TFieldAttributes);
@@ -193,11 +193,11 @@ procedure TFieldDefs.Add(const AName: string; ADataType: TFieldType; ASize: Word
 begin
   If Length(AName)=0 Then
     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 !
   BeginUpdate;
   try
-    TFieldDef.Create(Self,AName,ADataType,ASize,Arequired,Count+1);
+    Add(AName,ADataType,ASize,Arequired,Count+1);
   finally
     EndUpdate;
   end;
@@ -214,14 +214,24 @@ begin
   inherited Items[Index] := AValue;
 end;
 
-constructor TFieldDefs.Create(ADataset: TDataset);
+class function TFieldDefs.FieldDefClass: TFieldDefClass;
+begin
+  Result:=TFieldDef;
+end;
+
+constructor TFieldDefs.Create(ADataSet: TDataSet);
 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;
 
 procedure TFieldDefs.Assign(FieldDefs: TFieldDefs);
 
-Var I : longint;
+var I : longint;
 
 begin
   Clear;
@@ -239,7 +249,7 @@ end;
 {
 procedure TFieldDefs.Clear;
 
-Var I : longint;
+var I : longint;
 
 begin
   For I:=FItems.Count-1 downto 0 do
@@ -271,10 +281,10 @@ begin
     end;
 end;
 
-Function TFieldDefs.AddFieldDef : TFieldDef;
+function TFieldDefs.AddFieldDef: TFieldDef;
 
 begin
-  Result:=TFieldDef.Create(Self,'',ftUnknown,0,False,Count+1);
+  Result:=FieldDefClass.Create(Self,'',ftUnknown,0,False,Count+1);
 end;
 
 { ---------------------------------------------------------------------
@@ -457,7 +467,7 @@ begin
   raise AccessError(SInteger);
 end;
 
-function TField.GetAsVariant: Variant;
+function TField.GetAsVariant: variant;
 
 begin
   raise AccessError(SVariant);
@@ -475,7 +485,7 @@ begin
   Result := GetAsString;
 end;
 
-function TField.GetOldValue: Variant;
+function TField.GetOldValue: variant;
 
 var SaveState : TDatasetState;
 
@@ -568,7 +578,7 @@ function TField.GetData(Buffer: Pointer; NativeFormat : Boolean): Boolean;
 begin
   IF FDataset=Nil then
     DatabaseErrorFmt(SNoDataset,[FieldName]);
-  If FVAlidating then
+  If FValidating then
     begin
     result:=assigned(FValueBuffer);
     If Result and assigned(Buffer) then
@@ -599,7 +609,7 @@ begin
     Result:=FFieldName;
 end;
 
-Function TField.IsDisplayStored : Boolean;
+function TField.IsDisplayStored: Boolean;
 
 begin
   Result:=(DisplayLabel<>FieldName);
@@ -620,7 +630,7 @@ begin
     Value := FLookupDataSet.Lookup(FLookupKeyfields, FDataSet.FieldValues[FKeyFields], FLookupresultField);
 end;
 
-function TField.getIndex : longint;
+function TField.GetIndex: longint;
 
 begin
   If Assigned(FDataset) then
@@ -653,7 +663,7 @@ begin
     end;
 end;
 
-procedure TField.SetIndex(const AValue: Integer);
+procedure TField.SetIndex(const AValue: Longint);
 begin
   if FFields <> nil then FFields.SetFieldIndex(Self, AValue)
 end;
@@ -780,7 +790,7 @@ begin
   Raise AccessError(SFloat);
 end;
 
-procedure TField.SetAsVariant(const AValue: Variant);
+procedure TField.SetAsVariant(const AValue: variant);
 
 begin
   if VarIsNull(AValue) then
@@ -795,13 +805,11 @@ end;
 
 
 procedure TField.SetAsLongint(AValue: Longint);
-
 begin
   SetAsInteger(AValue);
 end;
 
 procedure TField.SetAsInteger(AValue: Longint);
-
 begin
   raise AccessError(SInteger);
 end;
@@ -812,7 +820,6 @@ begin
 end;
 
 procedure TField.SetAsString(const AValue: string);
-
 begin
   Raise AccessError(SString);
 end;
@@ -837,7 +844,7 @@ begin
   FDataSet.SetFieldData(Self,Buffer, NativeFormat);
 end;
 
-Procedure TField.SetDataset (AValue : TDataset);
+procedure TField.SetDataset(AValue: TDataset);
 
 begin
 {$ifdef dsdebug}
@@ -910,7 +917,7 @@ begin
     end;
 end;
 
-class function Tfield.IsBlob: Boolean;
+class function TField.IsBlob: Boolean;
 
 begin
   Result:=False;
@@ -1036,7 +1043,7 @@ end;
 
 function TStringField.GetAsBoolean: Boolean;
 
-Var S : String;
+var S : String;
 
 begin
   S:=GetAsString;
@@ -1070,7 +1077,7 @@ end;
 
 function TStringField.GetAsVariant: Variant;
 
-Var s : string;
+var s : string;
 
 begin
   If GetValue(s) then
@@ -1100,7 +1107,7 @@ end;
 
 function TStringField.GetValue(var AValue: string): Boolean;
 
-Var Buf, TBuf : TStringFieldBuffer;
+var Buf, TBuf : TStringFieldBuffer;
     DynBuf, TDynBuf : Array of char;
 
 begin
@@ -1183,9 +1190,9 @@ begin
     else
       // The data is copied into the buffer, since some TDataset descendents copy
       // 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);
     end
   else
@@ -1194,7 +1201,7 @@ begin
     if FTransliterate then
       DataSet.Translate(@AValue[1],@DynBuf[0],True)
     else
-      StrPLCopy(@DynBuf[0], AValue, DataSize);
+      StrPLCopy(PChar(DynBuf), AValue, Size);
     SetData(@DynBuf[0]);
     end
 end;
@@ -1392,7 +1399,7 @@ end;
 
 function TLongintField.GetAsVariant: Variant;
 
-Var L : Longint;
+var L : Longint;
 
 begin
   If GetValue(L) then
@@ -1403,7 +1410,7 @@ end;
 
 function TLongintField.GetAsString: string;
 
-Var L : Longint;
+var L : Longint;
 
 begin
   If GetValue(L) then
@@ -1438,7 +1445,7 @@ end;
 
 function TLongintField.GetValue(var AValue: Longint): Boolean;
 
-Var L : Longint;
+var L : Longint;
     P : PLongint;
 
 begin
@@ -1482,7 +1489,7 @@ end;
 
 procedure TLongintField.SetAsString(const AValue: string);
 
-Var L,Code : longint;
+var L,Code : longint;
 
 begin
   If length(AValue)=0 then
@@ -1564,7 +1571,7 @@ end;
 
 function TLargeIntField.GetAsVariant: Variant;
 
-Var L : Largeint;
+var L : Largeint;
 
 begin
   If GetValue(L) then
@@ -1581,7 +1588,7 @@ end;
 
 function TLargeintField.GetAsString: string;
 
-Var L : Largeint;
+var L : Largeint;
 
 begin
   If GetValue(L) then
@@ -1619,7 +1626,7 @@ function TLargeintField.GetValue(var AValue: Largeint): Boolean;
 type
   PLargeint = ^Largeint;
 
-Var P : PLargeint;
+var P : PLargeint;
 
 begin
   P:=@AValue;
@@ -1649,7 +1656,7 @@ end;
 
 procedure TLargeintField.SetAsString(const AValue: string);
 
-Var L     : largeint;
+var L     : largeint;
     code  : longint;
 
 begin
@@ -1788,7 +1795,7 @@ end;
 
 function TFloatField.GetAsVariant: Variant;
 
-Var f : Double;
+var f : Double;
 
 begin
   If GetData(@f) then
@@ -1810,7 +1817,7 @@ end;
 
 function TFloatField.GetAsString: string;
 
-Var R : Double;
+var R : Double;
 
 begin
   If GetData(@R) then
@@ -1882,7 +1889,7 @@ end;
 
 procedure TFloatField.SetAsString(const AValue: string);
 
-Var R : Double;
+var R : Double;
 
 begin
   If (AValue='') then
@@ -1905,7 +1912,7 @@ constructor TFloatField.Create(AOwner: TComponent);
 
 begin
   Inherited Create(AOwner);
-  SetDatatype(ftfloat);
+  SetDatatype(ftFloat);
   FPrecision:=15;
   FValidChars := [DecimalSeparator, '+', '-', '0'..'9', 'E', 'e'];
 end;
@@ -1944,7 +1951,7 @@ end;
 
 function TBooleanField.GetAsVariant: Variant;
 
-Var b : wordbool;
+var b : wordbool;
 
 begin
   If GetData(@b) then
@@ -1955,7 +1962,7 @@ end;
 
 function TBooleanField.GetAsString: string;
 
-Var B : wordbool;
+var B : wordbool;
 
 begin
   If GetData(@B) then
@@ -1999,7 +2006,7 @@ end;
 
 procedure TBooleanField.SetAsString(const AValue: string);
 
-Var Temp : string;
+var Temp : string;
 
 begin
   Temp:=UpperCase(AValue);
@@ -2028,7 +2035,7 @@ end;
 
 Procedure TBooleanField.SetDisplayValues(const AValue : String);
 
-Var I : longint;
+var I : longint;
 
 begin
   If FDisplayValues<>AValue then
@@ -2070,7 +2077,7 @@ end;
 
 function TDateTimeField.GetAsVariant: Variant;
 
-Var d : tDateTime;
+var d : tDateTime;
 
 begin
   If GetData(@d,False) then
@@ -2102,7 +2109,7 @@ end;
 
 procedure TDateTimeField.GetText(var TheText: string; ADisplayText: Boolean);
 
-Var R : TDateTime;
+var R : TDateTime;
     F : String;
 
 begin
@@ -2140,7 +2147,7 @@ end;
 
 procedure TDateTimeField.SetAsString(const AValue: string);
 
-Var R : TDateTime;
+var R : TDateTime;
 
 begin
   if AValue<>'' then
@@ -2181,7 +2188,7 @@ begin
 end;
 
 procedure TTimeField.SetAsString(const AValue: string);
-Var R : TDateTime;
+var R : TDateTime;
 begin
   if AValue='' then
     Clear    // set to NULL
@@ -2376,7 +2383,7 @@ constructor TVarBytesField.Create(AOwner: TComponent);
 
 begin
   INherited Create(AOwner);
-  SetDataType(ftvarbytes);
+  SetDataType(ftVarBytes);
   Size:=16;
 end;
 
@@ -2409,7 +2416,7 @@ end;
 
 function TBCDField.GetAsVariant: Variant;
 
-Var c : system.Currency;
+var c : system.Currency;
 
 begin
   If GetData(@c) then
@@ -2743,6 +2750,16 @@ begin
   Result:=FDataset.CreateBlobStream(Self,Mode);
 end;
 
+function TBlobField.GetBlobType: TBlobType;
+begin
+  result:= TBlobType(DataType);
+end;
+
+procedure TBlobField.SetBlobType(AValue: TBlobType);
+begin
+  SetFieldType(TFieldType(BlobType));
+end;
+
 procedure TBlobField.FreeBuffers;
 
 begin
@@ -2808,9 +2825,7 @@ begin
 end;
 
 function TBlobField.GetAsVariant: Variant;
-
-Var s : string;
-
+var s : string;
 begin
   if not GetIsNull then
     begin
@@ -2889,7 +2904,6 @@ begin
     end;
 end;
 
-
 procedure TBlobField.SetAsWideString(const AValue: WideString);
 var
   Len : Integer;
@@ -2940,11 +2954,9 @@ end;
 
 
 procedure TBlobField.LoadFromFile(const FileName: string);
-
-Var S : TFileStream;
-
+var S : TFileStream;
 begin
-  S:=TFileStream.Create(FileName,fmOpenRead);
+  S:=TFileStream.Create(FileName,fmOpenRead or fmShareDenyWrite);
   try
     LoadFromStream(S);
   finally
@@ -2966,9 +2978,7 @@ end;
 
 
 procedure TBlobField.SaveToFile(const FileName: string);
-
-Var S : TFileStream;
-
+var S : TFileStream;
 begin
   S:=TFileStream.Create(FileName,fmCreate);
   try
@@ -2980,9 +2990,7 @@ end;
 
 
 procedure TBlobField.SaveToStream(Stream: TStream);
-
-Var S : TStream;
-
+var S : TStream;
 begin
   S:=GetBlobStream(bmRead);
   Try
@@ -2994,9 +3002,8 @@ begin
 end;
 
 procedure TBlobField.SetFieldType(AValue: TFieldType);
-
 begin
-  If AValue in [Low(TBlobType)..High(TBlobType)] then
+  if AValue in ftBlobTypes then
     SetDatatype(AValue);
 end;
 
@@ -3038,9 +3045,7 @@ begin
 end;
 
 function TWideMemoField.GetAsVariant: Variant;
-
-Var s : string;
-
+var s : string;
 begin
   if not GetIsNull then
     begin
@@ -3213,7 +3218,7 @@ end;
 
 { TFields }
 
-Constructor TFields.Create(ADataset : TDataset);
+constructor TFields.Create(ADataset: TDataset);
 
 begin
   FDataSet:=ADataset;
@@ -3221,7 +3226,7 @@ begin
   FValidFieldKinds:=[fkData..fkInternalcalc];
 end;
 
-Destructor TFields.Destroy;
+destructor TFields.Destroy;
 
 begin
   if Assigned(FFieldList) then
@@ -3230,7 +3235,17 @@ begin
   inherited Destroy;
 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
   if (FDataSet <> nil) and not (csDestroying in FDataSet.ComponentState) and FDataset.Active then
@@ -3239,35 +3254,33 @@ begin
     FOnChange(Self);
 end;
 
-Procedure TFields.CheckfieldKind(Fieldkind : TFieldKind; Field : TField);
+procedure TFields.CheckfieldKind(Fieldkind: TFieldKind; Field: TField);
 
 begin
   If Not (FieldKind in ValidFieldKinds) Then
     DatabaseErrorFmt(SInvalidFieldKind,[Field.FieldName]);
 end;
 
-Function Tfields.GetCount : Longint;
+function TFields.GetCount: Longint;
 
 begin
   Result:=FFieldList.Count;
 end;
 
 
-Function TFields.GetField (Index : longint) : TField;
+function TFields.GetField(Index: Integer): TField;
 
 begin
   Result:=Tfield(FFieldList[Index]);
 end;
 
-procedure Tfields.SetField(Index: Integer; Value: TField);
+procedure TFields.SetField(Index: Integer; Value: TField);
 begin
   Fields[Index].Assign(Value);
 end;
 
-Procedure TFields.SetFieldIndex (Field : TField;Value : Integer);
-
-Var Old : Longint;
-
+procedure TFields.SetFieldIndex(Field: TField; Value: Integer);
+var Old : Longint;
 begin
   Old := FFieldList.indexOf(Field);
   If Old=-1 then
@@ -3284,7 +3297,7 @@ begin
     end;
 end;
 
-Procedure TFields.Add(Field : TField);
+procedure TFields.Add(Field: TField);
 
 begin
   CheckFieldName(Field.FieldName);
@@ -3293,31 +3306,31 @@ begin
   Changed;
 end;
 
-Procedure TFields.CheckFieldName (Const Value : String);
+procedure TFields.CheckFieldName(const Value: String);
 
 begin
   If FindField(Value)<>Nil then
     DataBaseErrorFmt(SDuplicateFieldName,[Value],FDataset);
 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
-  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...
-    FieldByName(S);
-  Until (T='');
+    FieldByName(N);
+  until StrPos > Length(Value);
 end;
 
-Procedure TFields.Clear;
+procedure TFields.Clear;
 var
   AField: TField;
 begin
@@ -3331,26 +3344,26 @@ begin
   Changed;
 end;
 
-Function TFields.FindField (Const Value : String) : TField;
-
-Var S : String;
+function TFields.FindField(const Value: String): TField;
+var S : String;
     I : longint;
-
 begin
-  Result:=Nil;
   S:=UpperCase(Value);
   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}
       Writeln ('Found field ',Value);
       {$endif}
-      Result:=TField(FFieldList[I]);
       Exit;
-      end;
+    end;
+  end;
+  Result:=Nil;
 end;
 
-Function TFields.FieldByName (Const Value : String) : TField;
+function TFields.FieldByName(const Value: String): TField;
 
 begin
   Result:=FindField(Value);
@@ -3358,37 +3371,33 @@ begin
     DatabaseErrorFmt(SFieldNotFound,[Value],FDataset);
 end;
 
-Function TFields.FieldByNumber(FieldNo : Integer) : TField;
-
-Var i : Longint;
-
+function TFields.FieldByNumber(FieldNo: Integer): TField;
+var i : Longint;
 begin
-  Result:=Nil;
   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;
-      end;
+  end;
+  Result:=Nil;
 end;
 
-Function TFields.GetEnumerator: TFieldsEnumerator;
+function TFields.GetEnumerator: TFieldsEnumerator;
 
 begin
   Result:=TFieldsEnumerator.Create(Self);
 end;
 
-Procedure TFields.GetFieldNames (Values : TStrings);
-
-Var i : longint;
-
+procedure TFields.GetFieldNames(Values: TStrings);
+var i : longint;
 begin
   Values.Clear;
   For I:=0 to FFieldList.Count-1 do
     Values.Add(Tfield(FFieldList[I]).FieldName);
 end;
 
-Function TFields.IndexOf(Field : TField) : Longint;
+function TFields.IndexOf(Field: TField): Longint;
 
 begin
   Result:=FFieldList.IndexOf(Field);

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

@@ -47,8 +47,10 @@ type
     FCommentsInSQL: Boolean;
     FTerminator: AnsiString;
     FSQL: TStrings;
+    FCurrentStripped,
     FCurrentStatement: TStrings;
     FDirectives: TStrings;
+    FComment,
     FEmitLine: Boolean;
     procedure SetDefines(const Value: TStrings);
     function FindNextSeparator(sep: array of string): AnsiString;
@@ -57,18 +59,21 @@ type
     procedure SetSQL(value: TStrings);
     procedure SQLChange(Sender: TObject);
     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
+    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 ExecuteStatement (Statement: TStrings; 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
     constructor Create (AnOwner: TComponent); override;
     destructor Destroy; override;
@@ -100,7 +105,7 @@ type
   protected
     procedure ExecuteStatement (SQLStatement: TStrings; var StopExecution: Boolean); override;
     procedure ExecuteDirective (Directive, Argument: String; var StopExecution: Boolean); override;
-    procedure ExecuteCommit; override;
+    procedure ExecuteCommit(CommitRetaining: boolean=true); override;
   public
     procedure Execute; override;
     property Aborted;
@@ -177,21 +182,6 @@ begin
   Result:=Trim(Result);
 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
   ---------------------------------------------------------------------}
@@ -236,12 +226,20 @@ end;
 
 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
-  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;
 
 function TCustomSQLScript.FindNextSeparator(Sep: array of string): AnsiString;
@@ -278,19 +276,9 @@ end;
 
 function TCustomSQLScript.Available: Boolean;
 
-var 
-  SCol, 
-  SLine: Integer;
-  
 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;
 
 procedure TCustomSQLScript.InternalStatement(Statement: TStrings;  var StopExecution: Boolean);
@@ -344,7 +332,7 @@ begin
   end;
 end;
 
-procedure TCustomSQLScript.InternalCommit;
+procedure TCustomSQLScript.InternalCommit(CommitRetaining: boolean=true);
 
 var 
   cont : boolean;
@@ -352,7 +340,7 @@ var
   
 begin
   try
-    ExecuteCommit;
+    ExecuteCommit(CommitRetaining);
   except
     on E : Exception do
       begin
@@ -373,6 +361,13 @@ begin
   end;
 end;
 
+procedure TCustomSQLScript.ClearStatement;
+
+begin
+  FCurrentStatement.Clear;
+  FCurrentStripped.Clear;
+end;
+
 procedure TCustomSQLScript.ProcessStatement;
 
 Var
@@ -383,7 +378,7 @@ Var
 begin
   if (FCurrentStatement.Count=0) then
     Exit;
-  S:=DeleteComments(FCurrentStatement.Text, Terminator);
+  S:=Trim(FCurrentStripped.Text);
   I:=0;
   Directive:='';
   While (i<FDirectives.Count) and (Directive='') do
@@ -404,9 +399,16 @@ begin
     else If Not FIsSkipping then
       begin
       // 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
       else
         InternalDirective (Directive,S,FAborted)
@@ -429,11 +431,11 @@ begin
   FSkipStackIndex:=0;
   Faborted:=False;
   DefaultDirectives;
-  while not FAborted and Available() do
-    begin
+  Repeat
     NextStatement();
-    ProcessStatement;
-    end;
+    if Length(Trim(FCurrentStripped.Text))>0 then
+      ProcessStatement;
+  Until FAborted or Not Available;
 end;
 
 function TCustomSQLScript.NextStatement: AnsiString;
@@ -444,10 +446,10 @@ var
 
 begin
   terminator_found:=False;
-  FCurrentStatement.Clear;
+  ClearStatement;
   while FLine <= FSQL.Count do
     begin
-    pnt:=FindNextSeparator([FTerminator, '/*', '"', '''']);
+    pnt:=FindNextSeparator([FTerminator, '/*', '"', '''', '--']);
     if (pnt=FTerminator) then
       begin
       FCol:=FCol + length(pnt);
@@ -456,6 +458,7 @@ begin
       end
     else if pnt = '/*' then
       begin
+      FComment:=True;
       if FCommentsInSQL then
         AddToStatement(pnt,false)
       else
@@ -467,6 +470,16 @@ begin
       else
         FEmitLine:=True;
       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
     else if pnt = '"' then
       begin
@@ -486,9 +499,11 @@ begin
       end;
     end;
   if not terminator_found then
-    FCurrentStatement.Clear();
+    ClearStatement;
   while (FCurrentStatement.Count > 0) and (trim(FCurrentStatement.Strings[0]) = '') do
     FCurrentStatement.Delete(0);
+  while (FCurrentStripped.Count > 0) and (trim(FCurrentStripped.Strings[0]) = '') do
+    FCurrentStripped.Delete(0);
   Result:=FCurrentStatement.Text;
 end;
 
@@ -512,6 +527,7 @@ begin
   L.OnChange:=@SQLChange;
   FSQL:=L;
   FDirectives:=TStringList.Create();
+  FCurrentStripped:=TStringList.Create();
   FCurrentStatement:=TStringList.Create();
   FLine:=1;
   FCol:=1;
@@ -523,7 +539,9 @@ begin
 end;
 
 destructor TCustomSQLScript.Destroy;
+
 begin
+  FreeAndNil(FCurrentStripped);
   FreeAndNil(FCurrentStatement);
   FreeAndNil(FSQL);
   FreeAndNil(FDirectives);
@@ -540,10 +558,15 @@ procedure TCustomSQLScript.DefaultDirectives;
 begin
   With FDirectives do
     begin
+    // Insertion order matters as testing for directives will be done with StartsWith
     if FUseSetTerm then
       Add('SET TERM');
     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
       begin
       Add('#IFDEF');
@@ -650,7 +673,7 @@ begin
     FOnDirective (Self, Directive, Argument, StopExecution);
 end;
 
-procedure TEventSQLScript.ExecuteCommit;
+procedure TEventSQLScript.ExecuteCommit(CommitRetaining: boolean=true);
 begin
   if assigned (FOnCommit) then
     FOnCommit (Self);

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

@@ -157,7 +157,7 @@ begin
     AFieldNode := item[i];
     if AFieldNode.CompareName('FIELD')=0 then
       begin
-      AFieldDef := TFieldDef.Create(DataSet.FieldDefs);
+      AFieldDef := Dataset.FieldDefs.AddFieldDef;
       AFieldDef.DisplayName:=GetNodeAttribute(AFieldNode,'fieldname');
       AFieldDef.Name:=GetNodeAttribute(AFieldNode,'attrname');
       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
-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
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos
@@ -276,7 +276,7 @@ else
 ifeq ($(CPU_TARGET),i386)
 BINUTILSPREFIX=i686-linux-android-
 else
-ifeq ($(CPU_TARGET),mips)
+ifeq ($(CPU_TARGET),mipsel)
 BINUTILSPREFIX=mipsel-linux-android-
 endif
 endif
@@ -531,6 +531,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_UNITS+=fpddcodegen fpcgcreatedbf fpcgdbcoll fpcgsqlconst fpcgtiopf fpddpopcode
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_UNITS+=fpddcodegen fpcgcreatedbf fpcgdbcoll fpcgsqlconst fpcgtiopf fpddpopcode
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 override TARGET_UNITS+=fpddcodegen fpcgcreatedbf fpcgdbcoll fpcgsqlconst fpcgtiopf fpddpopcode
 endif
@@ -750,6 +753,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_RSTS+=fpddcodegen fpcgsqlconst fpddpopcode
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_RSTS+=fpddcodegen fpcgsqlconst fpddpopcode
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 override TARGET_RSTS+=fpddcodegen fpcgsqlconst fpddpopcode
 endif
@@ -970,6 +976,9 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 override COMPILER_OPTIONS+=-S2h
 endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_OPTIONS+=-S2h
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 override COMPILER_OPTIONS+=-S2h
 endif
@@ -1360,7 +1369,7 @@ endif
 endif
 ifeq ($(OS_TARGET),msdos)
 STATICLIBPREFIX=
-STATICLIBEXT=.lib
+STATICLIBEXT=.a
 SHORTSUFFIX=d16
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1552,6 +1561,7 @@ ASNAME=$(BINUTILSPREFIX)as
 LDNAME=$(BINUTILSPREFIX)ld
 ARNAME=$(BINUTILSPREFIX)ar
 RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -1580,10 +1590,18 @@ else
 ARPROG=$(ARNAME)
 endif
 endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
 AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
+NASM=$(NASMPROG)
 ifdef inUnix
 PPAS=./ppas$(SRCBATCHEXT)
 else
@@ -2239,6 +2257,15 @@ REQUIRE_PACKAGES_LIBTAR=1
 REQUIRE_PACKAGES_FPMKUNIT=1
 REQUIRE_PACKAGES_FCL-BASE=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_FCL-BASE=1
+endif
 ifeq ($(FULL_TARGET),jvm-java)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
@@ -2674,7 +2701,7 @@ endif
 ifdef ACROSSCOMPILE
 override FPCOPT+=$(CROSSOPT)
 endif
-override COMPILER:=$(FPC) $(FPCOPT)
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 else

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