Browse Source

* gtk2 bindings from gtk2forpascal imported

peter 20 years ago
parent
commit
3c9295f285
100 changed files with 27046 additions and 8 deletions
  1. 58 7
      packages/extra/Makefile
  2. 1 1
      packages/extra/Makefile.fpc
  3. 1947 0
      packages/extra/gtk2/Makefile
  4. 29 0
      packages/extra/gtk2/Makefile.fpc
  5. 55 0
      packages/extra/gtk2/atk/atk.inc
  6. 92 0
      packages/extra/gtk2/atk/atk.pas
  7. 89 0
      packages/extra/gtk2/atk/atkaction.inc
  8. 92 0
      packages/extra/gtk2/atk/atkcomponent.inc
  9. 71 0
      packages/extra/gtk2/atk/atkdocument.inc
  10. 73 0
      packages/extra/gtk2/atk/atkeditabletext.inc
  11. 79 0
      packages/extra/gtk2/atk/atkgobjectaccessible.inc
  12. 101 0
      packages/extra/gtk2/atk/atkhyperlink.inc
  13. 68 0
      packages/extra/gtk2/atk/atkhypertext.inc
  14. 68 0
      packages/extra/gtk2/atk/atkimage.inc
  15. 23 0
      packages/extra/gtk2/atk/atkincludes.inc
  16. 510 0
      packages/extra/gtk2/atk/atkobject.inc
  17. 77 0
      packages/extra/gtk2/atk/atkobjectfactory.inc
  18. 75 0
      packages/extra/gtk2/atk/atkregistry.inc
  19. 113 0
      packages/extra/gtk2/atk/atkrelation.inc
  20. 79 0
      packages/extra/gtk2/atk/atkrelationset.inc
  21. 77 0
      packages/extra/gtk2/atk/atkselection.inc
  22. 96 0
      packages/extra/gtk2/atk/atkstate.inc
  23. 80 0
      packages/extra/gtk2/atk/atkstateset.inc
  24. 78 0
      packages/extra/gtk2/atk/atkstreamablecontent.inc
  25. 129 0
      packages/extra/gtk2/atk/atktable.inc
  26. 230 0
      packages/extra/gtk2/atk/atktext.inc
  27. 175 0
      packages/extra/gtk2/atk/atkutil.inc
  28. 76 0
      packages/extra/gtk2/atk/atkvalue.inc
  29. 33 0
      packages/extra/gtk2/buildgtk2.pp
  30. 2082 0
      packages/extra/gtk2/examples/Makefile
  31. 16 0
      packages/extra/gtk2/examples/Makefile.fpc
  32. 1731 0
      packages/extra/gtk2/examples/filechooser/Makefile
  33. 15 0
      packages/extra/gtk2/examples/filechooser/Makefile.fpc
  34. 106 0
      packages/extra/gtk2/examples/filechooser/beipiel.glade
  35. 164 0
      packages/extra/gtk2/examples/filechooser/glade.pas
  36. 166 0
      packages/extra/gtk2/examples/filechooser/simple.pas
  37. 1731 0
      packages/extra/gtk2/examples/gettingstarted/Makefile
  38. 15 0
      packages/extra/gtk2/examples/gettingstarted/Makefile.fpc
  39. 19 0
      packages/extra/gtk2/examples/gettingstarted/gettingstarted.pas
  40. 1731 0
      packages/extra/gtk2/examples/gtk_demo/Makefile
  41. 15 0
      packages/extra/gtk2/examples/gtk_demo/Makefile.fpc
  42. 399 0
      packages/extra/gtk2/examples/gtk_demo/appwindow.inc
  43. 124 0
      packages/extra/gtk2/examples/gtk_demo/button_box.inc
  44. 108 0
      packages/extra/gtk2/examples/gtk_demo/colorsel.inc
  45. BIN
      packages/extra/gtk2/examples/gtk_demo/data/alphatest.png
  46. BIN
      packages/extra/gtk2/examples/gtk_demo/data/apple-red.png
  47. BIN
      packages/extra/gtk2/examples/gtk_demo/data/background.jpg
  48. BIN
      packages/extra/gtk2/examples/gtk_demo/data/floppybuddy.gif
  49. BIN
      packages/extra/gtk2/examples/gtk_demo/data/gnome-applets.png
  50. BIN
      packages/extra/gtk2/examples/gtk_demo/data/gnome-calendar.png
  51. BIN
      packages/extra/gtk2/examples/gtk_demo/data/gnome-foot.png
  52. BIN
      packages/extra/gtk2/examples/gtk_demo/data/gnome-gimp.png
  53. BIN
      packages/extra/gtk2/examples/gtk_demo/data/gnome-gmush.png
  54. BIN
      packages/extra/gtk2/examples/gtk_demo/data/gnome-gsame.png
  55. BIN
      packages/extra/gtk2/examples/gtk_demo/data/gnu-keys.png
  56. BIN
      packages/extra/gtk2/examples/gtk_demo/data/gtk-logo-rgb.gif
  57. 189 0
      packages/extra/gtk2/examples/gtk_demo/dialog.inc
  58. 320 0
      packages/extra/gtk2/examples/gtk_demo/drawingarea.inc
  59. 314 0
      packages/extra/gtk2/examples/gtk_demo/editable_cells.inc
  60. 1092 0
      packages/extra/gtk2/examples/gtk_demo/gtk_demo.pas
  61. 438 0
      packages/extra/gtk2/examples/gtk_demo/images.inc
  62. 52 0
      packages/extra/gtk2/examples/gtk_demo/init.inc
  63. 169 0
      packages/extra/gtk2/examples/gtk_demo/item_factory.inc
  64. 232 0
      packages/extra/gtk2/examples/gtk_demo/list_store.inc
  65. 220 0
      packages/extra/gtk2/examples/gtk_demo/menus.inc
  66. 212 0
      packages/extra/gtk2/examples/gtk_demo/panes.inc
  67. 293 0
      packages/extra/gtk2/examples/gtk_demo/pixbufs.inc
  68. 182 0
      packages/extra/gtk2/examples/gtk_demo/sizegroup.inc
  69. 551 0
      packages/extra/gtk2/examples/gtk_demo/stock_browser.inc
  70. 643 0
      packages/extra/gtk2/examples/gtk_demo/textview.inc
  71. 461 0
      packages/extra/gtk2/examples/gtk_demo/tree_store.inc
  72. 1731 0
      packages/extra/gtk2/examples/helloworld/Makefile
  73. 15 0
      packages/extra/gtk2/examples/helloworld/Makefile.fpc
  74. 96 0
      packages/extra/gtk2/examples/helloworld/helloworld.pas
  75. 1731 0
      packages/extra/gtk2/examples/helloworld2/Makefile
  76. 15 0
      packages/extra/gtk2/examples/helloworld2/Makefile.fpc
  77. 100 0
      packages/extra/gtk2/examples/helloworld2/helloworld2.pas
  78. 1731 0
      packages/extra/gtk2/examples/plugins/Makefile
  79. 15 0
      packages/extra/gtk2/examples/plugins/Makefile.fpc
  80. 47 0
      packages/extra/gtk2/examples/plugins/main.pas
  81. 12 0
      packages/extra/gtk2/examples/plugins/plugin.pas
  82. 1731 0
      packages/extra/gtk2/examples/scribble_simple/Makefile
  83. 15 0
      packages/extra/gtk2/examples/scribble_simple/Makefile.fpc
  84. 170 0
      packages/extra/gtk2/examples/scribble_simple/scribble_simple.pas
  85. 10 0
      packages/extra/gtk2/glib/galloca.inc
  86. 126 0
      packages/extra/gtk2/glib/garray.inc
  87. 66 0
      packages/extra/gtk2/glib/gasyncqueue.inc
  88. 28 0
      packages/extra/gtk2/glib/gbacktrace.inc
  89. 67 0
      packages/extra/gtk2/glib/gboxed.inc
  90. 25 0
      packages/extra/gtk2/glib/gcache.inc
  91. 149 0
      packages/extra/gtk2/glib/gclosure.inc
  92. 33 0
      packages/extra/gtk2/glib/gcompletion.inc
  93. 56 0
      packages/extra/gtk2/glib/gconvert.inc
  94. 76 0
      packages/extra/gtk2/glib/gdataset.inc
  95. 256 0
      packages/extra/gtk2/glib/gdate.inc
  96. 13 0
      packages/extra/gtk2/glib/gdir.inc
  97. 87 0
      packages/extra/gtk2/glib/genums.inc
  98. 48 0
      packages/extra/gtk2/glib/gerror.inc
  99. 76 0
      packages/extra/gtk2/glib/gfileutils.inc
  100. 57 0
      packages/extra/gtk2/glib/ghash.inc

+ 58 - 7
packages/extra/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 1.9.8 [2005/01/12]
+# Don't edit, this file is generated by FPCMake Version 1.9.8 [2005/01/11]
 #
 default: all
 MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-sunos i386-qnx i386-netware i386-openbsd i386-wdosx i386-emx i386-watcom i386-netwlibc m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos powerpc-linux powerpc-netbsd powerpc-macos powerpc-darwin powerpc-morphos sparc-linux sparc-netbsd sparc-sunos x86_64-linux x86_64-freebsd arm-linux
@@ -231,7 +231,7 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_DIRS+=unzip zlib x11 opengl gtk syslog forms svgalib ggi libpng libgd utmp bfd gdbm ncurses tcl cdrom imlib gnome1 fpgtk unixutil newt
+override TARGET_DIRS+=unzip zlib x11 opengl gtk gtk2 syslog forms svgalib ggi libpng libgd utmp bfd gdbm ncurses tcl cdrom imlib gnome1 fpgtk unixutil newt
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 override TARGET_DIRS+=unzip
@@ -261,7 +261,7 @@ ifeq ($(FULL_TARGET),i386-netwlibc)
 override TARGET_DIRS+=unzip zlib
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_DIRS+=unzip zlib x11 opengl gtk syslog forms svgalib ggi libpng libgd utmp bfd gdbm ncurses tcl cdrom imlib gnome1 fpgtk unixutil newt
+override TARGET_DIRS+=unzip zlib x11 opengl gtk gtk2 syslog forms svgalib ggi libpng libgd utmp bfd gdbm ncurses tcl cdrom imlib gnome1 fpgtk unixutil newt
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 override TARGET_DIRS+=unzip zlib x11 opengl gtk syslog forms svgalib ggi libpng libgd utmp bfd gdbm ncurses fpgtk tcl imlib gnome1
@@ -279,7 +279,7 @@ ifeq ($(FULL_TARGET),m68k-palmos)
 override TARGET_DIRS+=palmunits
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_DIRS+=unzip zlib x11 opengl gtk syslog forms svgalib ggi libpng libgd utmp bfd gdbm ncurses tcl cdrom imlib gnome1 fpgtk unixutil newt
+override TARGET_DIRS+=unzip zlib x11 opengl gtk gtk2 syslog forms svgalib ggi libpng libgd utmp bfd gdbm ncurses tcl cdrom imlib gnome1 fpgtk unixutil newt
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 override TARGET_DIRS+=unzip zlib x11 opengl gtk syslog forms svgalib ggi libpng libgd utmp bfd gdbm ncurses fpgtk tcl imlib gnome1
@@ -288,19 +288,19 @@ ifeq ($(FULL_TARGET),powerpc-darwin)
 override TARGET_DIRS+=unzip zlib x11 opengl gtk syslog forms svgalib ggi libpng libgd utmp bfd gdbm ncurses fpgtk tcl imlib gnome1
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_DIRS+=unzip zlib x11 opengl gtk syslog forms svgalib ggi libpng libgd utmp bfd gdbm ncurses tcl cdrom imlib gnome1 fpgtk unixutil newt
+override TARGET_DIRS+=unzip zlib x11 opengl gtk gtk2 syslog forms svgalib ggi libpng libgd utmp bfd gdbm ncurses tcl cdrom imlib gnome1 fpgtk unixutil newt
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 override TARGET_DIRS+=unzip zlib x11 opengl gtk syslog forms svgalib ggi libpng libgd utmp bfd gdbm ncurses fpgtk tcl imlib gnome1
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_DIRS+=unzip zlib x11 opengl gtk syslog forms svgalib ggi libpng libgd utmp bfd gdbm ncurses tcl cdrom imlib gnome1 fpgtk unixutil newt
+override TARGET_DIRS+=unzip zlib x11 opengl gtk gtk2 syslog forms svgalib ggi libpng libgd utmp bfd gdbm ncurses tcl cdrom imlib gnome1 fpgtk unixutil newt
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 override TARGET_DIRS+=unzip zlib x11 opengl gtk syslog forms svgalib ggi libpng libgd utmp bfd gdbm ncurses fpgtk tcl imlib gnome1
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_DIRS+=unzip zlib x11 opengl gtk syslog forms svgalib ggi libpng libgd utmp bfd gdbm ncurses tcl cdrom imlib gnome1 fpgtk unixutil newt
+override TARGET_DIRS+=unzip zlib x11 opengl gtk gtk2 syslog forms svgalib ggi libpng libgd utmp bfd gdbm ncurses tcl cdrom imlib gnome1 fpgtk unixutil newt
 endif
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCSUBDIR=packages/extra
@@ -1344,6 +1344,7 @@ TARGET_DIRS_ZLIB=1
 TARGET_DIRS_X11=1
 TARGET_DIRS_OPENGL=1
 TARGET_DIRS_GTK=1
+TARGET_DIRS_GTK2=1
 TARGET_DIRS_SYSLOG=1
 TARGET_DIRS_FORMS=1
 TARGET_DIRS_SVGALIB=1
@@ -1477,6 +1478,7 @@ TARGET_DIRS_ZLIB=1
 TARGET_DIRS_X11=1
 TARGET_DIRS_OPENGL=1
 TARGET_DIRS_GTK=1
+TARGET_DIRS_GTK2=1
 TARGET_DIRS_SYSLOG=1
 TARGET_DIRS_FORMS=1
 TARGET_DIRS_SVGALIB=1
@@ -1570,6 +1572,7 @@ TARGET_DIRS_ZLIB=1
 TARGET_DIRS_X11=1
 TARGET_DIRS_OPENGL=1
 TARGET_DIRS_GTK=1
+TARGET_DIRS_GTK2=1
 TARGET_DIRS_SYSLOG=1
 TARGET_DIRS_FORMS=1
 TARGET_DIRS_SVGALIB=1
@@ -1636,6 +1639,7 @@ TARGET_DIRS_ZLIB=1
 TARGET_DIRS_X11=1
 TARGET_DIRS_OPENGL=1
 TARGET_DIRS_GTK=1
+TARGET_DIRS_GTK2=1
 TARGET_DIRS_SYSLOG=1
 TARGET_DIRS_FORMS=1
 TARGET_DIRS_SVGALIB=1
@@ -1681,6 +1685,7 @@ TARGET_DIRS_ZLIB=1
 TARGET_DIRS_X11=1
 TARGET_DIRS_OPENGL=1
 TARGET_DIRS_GTK=1
+TARGET_DIRS_GTK2=1
 TARGET_DIRS_SYSLOG=1
 TARGET_DIRS_FORMS=1
 TARGET_DIRS_SVGALIB=1
@@ -1726,6 +1731,7 @@ TARGET_DIRS_ZLIB=1
 TARGET_DIRS_X11=1
 TARGET_DIRS_OPENGL=1
 TARGET_DIRS_GTK=1
+TARGET_DIRS_GTK2=1
 TARGET_DIRS_SYSLOG=1
 TARGET_DIRS_FORMS=1
 TARGET_DIRS_SVGALIB=1
@@ -1969,6 +1975,51 @@ gtk:
 	$(MAKE) -C gtk all
 .PHONY: gtk_all gtk_debug gtk_smart gtk_release gtk_units gtk_examples gtk_shared gtk_install gtk_sourceinstall gtk_exampleinstall gtk_distinstall gtk_zipinstall gtk_zipsourceinstall gtk_zipexampleinstall gtk_zipdistinstall gtk_clean gtk_distclean gtk_cleanall gtk_info gtk_makefiles gtk
 endif
+ifdef TARGET_DIRS_GTK2
+gtk2_all:
+	$(MAKE) -C gtk2 all
+gtk2_debug:
+	$(MAKE) -C gtk2 debug
+gtk2_smart:
+	$(MAKE) -C gtk2 smart
+gtk2_release:
+	$(MAKE) -C gtk2 release
+gtk2_units:
+	$(MAKE) -C gtk2 units
+gtk2_examples:
+	$(MAKE) -C gtk2 examples
+gtk2_shared:
+	$(MAKE) -C gtk2 shared
+gtk2_install:
+	$(MAKE) -C gtk2 install
+gtk2_sourceinstall:
+	$(MAKE) -C gtk2 sourceinstall
+gtk2_exampleinstall:
+	$(MAKE) -C gtk2 exampleinstall
+gtk2_distinstall:
+	$(MAKE) -C gtk2 distinstall
+gtk2_zipinstall:
+	$(MAKE) -C gtk2 zipinstall
+gtk2_zipsourceinstall:
+	$(MAKE) -C gtk2 zipsourceinstall
+gtk2_zipexampleinstall:
+	$(MAKE) -C gtk2 zipexampleinstall
+gtk2_zipdistinstall:
+	$(MAKE) -C gtk2 zipdistinstall
+gtk2_clean:
+	$(MAKE) -C gtk2 clean
+gtk2_distclean:
+	$(MAKE) -C gtk2 distclean
+gtk2_cleanall:
+	$(MAKE) -C gtk2 cleanall
+gtk2_info:
+	$(MAKE) -C gtk2 info
+gtk2_makefiles:
+	$(MAKE) -C gtk2 makefiles
+gtk2:
+	$(MAKE) -C gtk2 all
+.PHONY: gtk2_all gtk2_debug gtk2_smart gtk2_release gtk2_units gtk2_examples gtk2_shared gtk2_install gtk2_sourceinstall gtk2_exampleinstall gtk2_distinstall gtk2_zipinstall gtk2_zipsourceinstall gtk2_zipexampleinstall gtk2_zipdistinstall gtk2_clean gtk2_distclean gtk2_cleanall gtk2_info gtk2_makefiles gtk2
+endif
 ifdef TARGET_DIRS_SYSLOG
 syslog_all:
 	$(MAKE) -C syslog all

+ 1 - 1
packages/extra/Makefile.fpc

@@ -3,7 +3,7 @@
 #
 [target]
 dirs_linux=unzip zlib \
-           x11 opengl gtk syslog \
+           x11 opengl gtk gtk2 syslog \
            forms svgalib ggi libpng libgd \
            utmp bfd gdbm ncurses tcl cdrom \
            imlib gnome1 fpgtk unixutil newt

+ 1947 - 0
packages/extra/gtk2/Makefile

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

+ 29 - 0
packages/extra/gtk2/Makefile.fpc

@@ -0,0 +1,29 @@
+#
+#   Makefile.fpc for Free Pascal GTK 2.x.y Bindings
+#
+
+[package]
+name=gtk2
+version=1.9.6
+
+[require]
+libc=y
+
+[target]
+units=buildgtk2
+implicitunits=glib2 atk pango gdk2pixbuf gdk2 gtk2 libglade2
+
+[compiler]
+unitdir=glib atk pango gtk+/gdk-pixbuf gtk+/gdk gtk+/gtk libglade
+
+[libs]
+libname=libfpgtk2.so
+libversion=1.0
+
+[install]
+buildunit=buildgtk2
+fpcpackage=y
+
+[default]
+fpcdir=../../..
+

+ 55 - 0
packages/extra/gtk2/atk/atk.inc

@@ -0,0 +1,55 @@
+{ Pointers to basic pascal types, inserted by h2pas conversion program.}
+Type
+  PLongint  = ^Longint;
+  PSmallInt = ^SmallInt;
+  PByte     = ^Byte;
+  PWord     = ^Word;
+  PDWord    = ^DWord;
+  PDouble   = ^Double;
+
+{$PACKRECORDS C}
+
+{ ATK -  Accessibility Toolkit
+   Copyright 2001 Sun Microsystems Inc.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public
+   License as published by the Free Software Foundation; either
+   version 2 of the License, or (at your option) any later version.
+
+   This library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
+  }
+{$ifndef __ATK_H__}
+{$define __ATK_H__}
+{$include <atk/atkobject.inc}
+{$include <atk/atkaction.inc}
+{$include <atk/atkcomponent.inc}
+{$include <atk/atkdocument.inc}
+{$include <atk/atkeditabletext.inc}
+{$include <atk/atkgobjectaccessible.inc}
+{$include <atk/atkhyperlink.inc}
+{$include <atk/atkhypertext.inc}
+{$include <atk/atkimage.inc}
+{$include <atk/atkobjectfactory.inc}
+{$include <atk/atkregistry.inc}
+{$include <atk/atkrelation.inc}
+{$include <atk/atkrelationset.inc}
+{$include <atk/atkselection.inc}
+{$include <atk/atkstate.inc}
+{$include <atk/atkstateset.inc}
+{$include <atk/atkstreamablecontent.inc}
+{$include <atk/atktable.inc}
+{$include <atk/atktext.inc}
+{$include <atk/atkutil.inc}
+{$include <atk/atkvalue.inc}
+{$endif}
+{ __ATK_H__  }
+

+ 92 - 0
packages/extra/gtk2/atk/atk.pas

@@ -0,0 +1,92 @@
+{ ATK -  Accessibility Toolkit
+   Copyright 2001 Sun Microsystems Inc.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public
+   License as published by the Free Software Foundation; either
+   version 2 of the License, or (at your option) any later version.
+
+   This library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
+  }
+unit atk; // keep unit name lowercase for kylix
+
+{$IFDEF FPC}
+  {$mode objfpc}
+{$ENDIF}
+{$IFDEF VER140}
+  {$DEFINE KYLIX}
+{$ENDIF}
+
+interface
+
+uses glib2;
+
+const
+{$ifdef win32}
+  {$define atkwin}
+  atklib = 'libatk-1.0-0';
+  {$IFDEF FPC}
+  {$smartlink on}
+  {$ENDIF}
+{$else}
+  {$ifdef UseCustomLibs}
+  atklib = '';
+  {$else}
+  atklib = 'libatk-1.0.so';
+  {$endif}
+{$endif}
+
+{$IFNDEF KYLIX}
+  {$PACKRECORDS C}
+{$ELSE}
+  {$ALIGN 4}
+  {$WEAKPACKAGEUNIT}
+  {$WARNINGS OFF}
+{$ENDIF}
+
+type
+{$DEFINE read_forward_definitions}
+  // internal types
+  PAtkImplementor = pointer;
+  PAtkAction = pointer;
+  PAtkComponent = pointer;
+  PAtkDocument = pointer;
+  PAtkEditableText = pointer;
+  PAtkHypertext = pointer;
+  PAtkImage = pointer;
+  PAtkSelection = pointer;
+  PAtkStreamableContent = pointer;
+  PAtkTable = pointer;
+  PAtkText = pointer;
+  PAtkValue = pointer;
+
+{$include atkincludes.inc}
+{$UNDEF read_forward_definitions}
+
+{$DEFINE read_interface_types}
+{$include atkincludes.inc}
+{$UNDEF read_interface_types}
+
+{$DEFINE read_interface_rest}
+{$include atkincludes.inc}
+{$UNDEF read_interface_rest}
+
+implementation
+
+// call implementation parts of header files
+{$DEFINE read_implementation}
+{$include atkincludes.inc}
+{$UNDEF read_implementation}
+
+end.
+
+
+

+ 89 - 0
packages/extra/gtk2/atk/atkaction.inc

@@ -0,0 +1,89 @@
+// included by atk.pp
+
+{
+   The interface AtkAction should be supported by any anObject that can
+   perform one or more actions. The interface provides the standard
+   mechanism for an assistive technology to determine what those actions
+   are as well as tell the anObject to perform them. Any anObject that can
+   be manipulated should support this interface.
+  }
+
+{$IFDEF read_forward_definitions}
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_types}
+   PAtkActionIface = ^TAtkActionIface;
+   TAtkActionIface = record
+        parent : TGTypeInterface;
+        do_action : function (action:PAtkAction; i:gint):gboolean; cdecl;
+        get_n_actions : function (action:PAtkAction):gint; cdecl;
+        get_description : function (action:PAtkAction; i:gint):Pgchar; cdecl;
+        get_name : function (action:PAtkAction; i:gint):Pgchar; cdecl;
+        get_keybinding : function (action:PAtkAction; i:gint):Pgchar; cdecl;
+        set_description : function (action:PAtkAction; i:gint; desc:Pgchar):gboolean; cdecl;
+        pad1 : TAtkFunction;
+        pad2 : TAtkFunction;
+     end;
+
+{$ENDIF read_interface_types}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+function ATK_TYPE_ACTION : GType;
+function ATK_IS_ACTION(obj: pointer) : boolean;
+function ATK_ACTION(obj: pointer) : PAtkAction;
+function ATK_ACTION_GET_IFACE(obj: pointer) : PAtkActionIface;
+
+
+{
+   These are the function which would be called by an application with
+   the argument being a AtkObject anObject cast to (AtkAction).
+
+   The function will just check that   the corresponding
+   function pointer is not NULL and will call it.
+
+   The "real" implementation of the function for accessible will be
+   provided in a support library
+  }
+function atk_action_get_type:GType; cdecl; external atklib;
+function atk_action_do_action(action:PAtkAction; i:gint):gboolean; cdecl; external atklib;
+function atk_action_get_n_actions(action:PAtkAction):gint; cdecl; external atklib;
+function atk_action_get_description(action:PAtkAction; i:gint):Pgchar; cdecl; external atklib;
+function atk_action_get_name(action:PAtkAction; i:gint):Pgchar; cdecl; external atklib;
+function atk_action_get_keybinding(action:PAtkAction; i:gint):Pgchar; cdecl; external atklib;
+function atk_action_set_description(action:PAtkAction; i:gint; desc:Pgchar):gboolean; cdecl; external atklib;
+{
+   Additional GObject properties exported by AtkAction:
+      "accessible_action"
+         (an accessible action, or the list of actions, has changed)
+  }
+{$ENDIF read_interface_rest}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_implementation}
+function ATK_TYPE_ACTION : GType;
+begin
+   ATK_TYPE_ACTION:=atk_action_get_type;
+end;
+
+function ATK_IS_ACTION(obj: pointer) : boolean;
+begin
+   ATK_IS_ACTION:=G_TYPE_CHECK_INSTANCE_TYPE(obj,ATK_TYPE_ACTION);
+end;
+
+function ATK_ACTION(obj: pointer) : PAtkAction;
+begin
+   ATK_ACTION:=PAtkAction(G_TYPE_CHECK_INSTANCE_CAST(obj,ATK_TYPE_ACTION));
+end;
+
+function ATK_ACTION_GET_IFACE(obj: pointer) : PAtkActionIface;
+begin
+   ATK_ACTION_GET_IFACE:=PAtkActionIface(G_TYPE_INSTANCE_GET_INTERFACE(obj,ATK_TYPE_ACTION));
+end;
+
+{$ENDIF read_implementation}
+

+ 92 - 0
packages/extra/gtk2/atk/atkcomponent.inc

@@ -0,0 +1,92 @@
+// included by atk.pp
+
+{$IFDEF read_forward_definitions}
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_types}
+   TAtkFocusHandler = procedure (para1:PAtkObject; para2:gboolean); cdecl;
+   PAtkComponentIface = ^TAtkComponentIface;
+   TAtkComponentIface = record
+        parent : TGTypeInterface;
+        add_focus_handler : function (component:PAtkComponent; handler:TAtkFocusHandler):guint; cdecl;
+        contains : function (component:PAtkComponent; x:gint; y:gint; coord_type:TAtkCoordType):gboolean; cdecl;
+        ref_accessible_at_point : function (component:PAtkComponent; x:gint; y:gint; coord_type:TAtkCoordType):PAtkObject; cdecl;
+        get_extents : procedure (component:PAtkComponent; x:Pgint; y:Pgint; width:Pgint; height:Pgint;
+                      coord_type:TAtkCoordType); cdecl;
+        get_position : procedure (component:PAtkComponent; x:Pgint; y:Pgint; coord_type:TAtkCoordType); cdecl;
+        get_size : procedure (component:PAtkComponent; width:Pgint; height:Pgint); cdecl;
+        grab_focus : function (component:PAtkComponent):gboolean; cdecl;
+        remove_focus_handler : procedure (component:PAtkComponent; handler_id:guint); cdecl;
+        set_extents : function (component:PAtkComponent; x:gint; y:gint; width:gint; height:gint;
+                     coord_type:TAtkCoordType):gboolean; cdecl;
+        set_position : function (component:PAtkComponent; x:gint; y:gint; coord_type:TAtkCoordType):gboolean; cdecl;
+        set_size : function (component:PAtkComponent; width:gint; height:gint):gboolean; cdecl;
+        get_layer : function (component:PAtkComponent):TAtkLayer; cdecl;
+        get_mdi_zorder : function (component:PAtkComponent):gint; cdecl;
+        pad1 : TAtkFunction;
+        pad2 : TAtkFunction;
+     end;
+
+{$ENDIF read_interface_types}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+{
+   The AtkComponent interface should be supported by any anObject that is
+   rendered on the screen. The interface provides the standard mechanism
+   for an assistive technology to determine and set the graphical
+   representation of an anObject.
+  }
+function ATK_TYPE_COMPONENT : GType;
+function ATK_IS_COMPONENT(obj: pointer) : boolean;
+function ATK_COMPONENT(obj: pointer) : PAtkComponent;
+function ATK_COMPONENT_GET_IFACE(obj: pointer) : PAtkComponentIface;
+
+
+{ convenience functions  }
+function atk_component_get_type:GType; cdecl; external atklib;
+function atk_component_add_focus_handler(component:PAtkComponent; handler:TAtkFocusHandler):guint; cdecl; external atklib;
+function atk_component_contains(component:PAtkComponent; x:gint; y:gint; coord_type:TAtkCoordType):gboolean; cdecl; external atklib;
+function atk_component_ref_accessible_at_point(component:PAtkComponent; x:gint; y:gint; coord_type:TAtkCoordType):PAtkObject; cdecl; external atklib;
+procedure atk_component_get_extents(component:PAtkComponent; x:Pgint; y:Pgint; width:Pgint; height:Pgint;
+            coord_type:TAtkCoordType); cdecl; external atklib;
+procedure atk_component_get_position(component:PAtkComponent; x:Pgint; y:Pgint; coord_type:TAtkCoordType); cdecl; external atklib;
+procedure atk_component_get_size(component:PAtkComponent; width:Pgint; height:Pgint); cdecl; external atklib;
+function atk_component_get_layer(component:PAtkComponent):TAtkLayer; cdecl; external atklib;
+function atk_component_get_mdi_zorder(component:PAtkComponent):gint; cdecl; external atklib;
+function atk_component_grab_focus(component:PAtkComponent):gboolean; cdecl; external atklib;
+procedure atk_component_remove_focus_handler(component:PAtkComponent; handler_id:guint); cdecl; external atklib;
+function atk_component_set_extents(component:PAtkComponent; x:gint; y:gint; width:gint; height:gint;
+           coord_type:TAtkCoordType):gboolean; cdecl; external atklib;
+function atk_component_set_position(component:PAtkComponent; x:gint; y:gint; coord_type:TAtkCoordType):gboolean; cdecl; external atklib;
+function atk_component_set_size(component:PAtkComponent; width:gint; height:gint):gboolean; cdecl; external atklib;
+{$ENDIF read_interface_rest}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_implementation}
+function ATK_TYPE_COMPONENT : GType;
+begin
+   ATK_TYPE_COMPONENT:=atk_component_get_type;
+end;
+
+function ATK_IS_COMPONENT(obj: pointer) : boolean;
+begin
+   ATK_IS_COMPONENT:=G_TYPE_CHECK_INSTANCE_TYPE(obj,ATK_TYPE_COMPONENT);
+end;
+
+function ATK_COMPONENT(obj: pointer) : PAtkComponent;
+begin
+   ATK_COMPONENT:=PAtkComponent(G_TYPE_CHECK_INSTANCE_CAST(obj,ATK_TYPE_COMPONENT));
+end;
+
+function ATK_COMPONENT_GET_IFACE(obj: pointer) : PAtkComponentIface;
+begin
+   ATK_COMPONENT_GET_IFACE:=PAtkComponentIface(G_TYPE_INSTANCE_GET_INTERFACE(obj,ATK_TYPE_COMPONENT));
+end;
+
+{$ENDIF read_implementation}
+

+ 71 - 0
packages/extra/gtk2/atk/atkdocument.inc

@@ -0,0 +1,71 @@
+// included by atk.pp
+
+{
+   The AtkDocument interface should be supported by any anObject that has an
+   associated document anObject model (DOM). This interface provides the
+   standard mechanism allowing an assistive technology access to the DOM.
+  }
+
+
+{$IFDEF read_forward_definitions}
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_types}
+   PAtkDocumentIface = ^TAtkDocumentIface;
+   TAtkDocumentIface = record
+        parent : TGTypeInterface;
+        get_document_type : function (document:PAtkDocument):Pgchar; cdecl;
+        get_document : function (document:PAtkDocument):gpointer; cdecl;
+        pad1 : TAtkFunction;
+        pad2 : TAtkFunction;
+        pad3 : TAtkFunction;
+        pad4 : TAtkFunction;
+        pad5 : TAtkFunction;
+        pad6 : TAtkFunction;
+        pad7 : TAtkFunction;
+        pad8 : TAtkFunction;
+     end;
+
+{$ENDIF read_interface_types}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+function ATK_TYPE_DOCUMENT : GType;
+function ATK_IS_DOCUMENT(obj: pointer) : boolean;
+function ATK_DOCUMENT(obj: pointer) : PAtkDocument;
+function ATK_DOCUMENT_GET_IFACE(obj: pointer) : PAtkDocumentIface;
+
+
+function atk_document_get_type:GType; cdecl; external atklib;
+function atk_document_get_document_type(document:PAtkDocument):Pgchar; cdecl; external atklib;
+function atk_document_get_document(document:PAtkDocument):gpointer; cdecl; external atklib;
+{$ENDIF read_interface_rest}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_implementation}
+function ATK_TYPE_DOCUMENT : GType;
+begin
+   ATK_TYPE_DOCUMENT:=atk_document_get_type;
+end;
+
+function ATK_IS_DOCUMENT(obj: pointer) : boolean;
+begin
+   ATK_IS_DOCUMENT:=G_TYPE_CHECK_INSTANCE_TYPE(obj,ATK_TYPE_DOCUMENT);
+end;
+
+function ATK_DOCUMENT(obj: pointer) : PAtkDocument;
+begin
+   ATK_DOCUMENT:=PAtkDocument(G_TYPE_CHECK_INSTANCE_CAST(obj,ATK_TYPE_DOCUMENT));
+end;
+
+function ATK_DOCUMENT_GET_IFACE(obj: pointer) : PAtkDocumentIface;
+begin
+   ATK_DOCUMENT_GET_IFACE:=PAtkDocumentIface(G_TYPE_INSTANCE_GET_INTERFACE(obj,ATK_TYPE_DOCUMENT));
+end;
+
+{$ENDIF read_implementation}
+

+ 73 - 0
packages/extra/gtk2/atk/atkeditabletext.inc

@@ -0,0 +1,73 @@
+// included by atk.pp
+
+{
+   AtkEditableText is used to support access in an "accessibility" context
+   to editing features of editable text widgets.
+  }
+
+{$IFDEF read_forward_definitions}
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_types}
+   PAtkEditableTextIface = ^TAtkEditableTextIface;
+   TAtkEditableTextIface = record
+        parent_interface : TGTypeInterface;
+        set_run_attributes : function (text:PAtkEditableText; attrib_set:PAtkAttributeSet; start_offset:gint; end_offset:gint):gboolean; cdecl;
+        set_text_contents : procedure (text:PAtkEditableText; _string:Pgchar); cdecl;
+        insert_text : procedure (text:PAtkEditableText; _string:Pgchar; length:gint; position:Pgint); cdecl;
+        copy_text : procedure (text:PAtkEditableText; start_pos:gint; end_pos:gint); cdecl;
+        cut_text : procedure (text:PAtkEditableText; start_pos:gint; end_pos:gint); cdecl;
+        delete_text : procedure (text:PAtkEditableText; start_pos:gint; end_pos:gint); cdecl;
+        paste_text : procedure (text:PAtkEditableText; position:gint); cdecl;
+        pad1 : TAtkFunction;
+        pad2 : TAtkFunction;
+     end;
+
+{$ENDIF read_interface_types}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+function ATK_TYPE_EDITABLE_TEXT : GType;
+function ATK_IS_EDITABLE_TEXT(obj: pointer) : boolean;
+function ATK_EDITABLE_TEXT(obj: pointer) : PAtkEditableText;
+function ATK_EDITABLE_TEXT_GET_IFACE(obj: pointer) : PAtkEditableTextIface;
+
+
+function atk_editable_text_get_type:GType; cdecl; external atklib;
+function atk_editable_text_set_run_attributes(text:PAtkEditableText; attrib_set:PAtkAttributeSet; start_offset:gint; end_offset:gint):gboolean; cdecl; external atklib;
+procedure atk_editable_text_set_text_contents(text:PAtkEditableText; _string:Pgchar); cdecl; external atklib;
+procedure atk_editable_text_insert_text(text:PAtkEditableText; _string:Pgchar; length:gint; position:Pgint); cdecl; external atklib;
+procedure atk_editable_text_copy_text(text:PAtkEditableText; start_pos:gint; end_pos:gint); cdecl; external atklib;
+procedure atk_editable_text_cut_text(text:PAtkEditableText; start_pos:gint; end_pos:gint); cdecl; external atklib;
+procedure atk_editable_text_delete_text(text:PAtkEditableText; start_pos:gint; end_pos:gint); cdecl; external atklib;
+procedure atk_editable_text_paste_text(text:PAtkEditableText; position:gint); cdecl; external atklib;
+{$ENDIF read_interface_rest}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_implementation}
+function ATK_TYPE_EDITABLE_TEXT : GType;
+begin
+   ATK_TYPE_EDITABLE_TEXT:=atk_editable_text_get_type;
+end;
+
+function ATK_IS_EDITABLE_TEXT(obj: pointer) : boolean;
+begin
+   ATK_IS_EDITABLE_TEXT:=G_TYPE_CHECK_INSTANCE_TYPE(obj,ATK_TYPE_EDITABLE_TEXT);
+end;
+
+function ATK_EDITABLE_TEXT(obj: pointer) : PAtkEditableText;
+begin
+   ATK_EDITABLE_TEXT:=PAtkEditableText(G_TYPE_CHECK_INSTANCE_CAST(obj,ATK_TYPE_EDITABLE_TEXT));
+end;
+
+function ATK_EDITABLE_TEXT_GET_IFACE(obj: pointer) : PAtkEditableTextIface;
+begin
+   ATK_EDITABLE_TEXT_GET_IFACE:=PAtkEditableTextIface(G_TYPE_INSTANCE_GET_INTERFACE(obj,ATK_TYPE_EDITABLE_TEXT));
+end;
+
+{$ENDIF read_implementation}
+

+ 79 - 0
packages/extra/gtk2/atk/atkgobjectaccessible.inc

@@ -0,0 +1,79 @@
+// included by atk.pp
+
+{
+   The AtkGObjectAccessible class is provided as a basis for implementing
+   accessibility support for objects which are not GTK+ widgets
+  }
+
+{$IFDEF read_forward_definitions}
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_types}
+   PAtkGObjectAccessible = ^TAtkGObjectAccessible;
+   TAtkGObjectAccessible = record
+        parent : TAtkObject;
+     end;
+
+   PAtkGObjectAccessibleClass = ^TAtkGObjectAccessibleClass;
+   TAtkGObjectAccessibleClass = record
+        parent_class : TAtkObjectClass;
+        pad1 : TAtkFunction;
+        pad2 : TAtkFunction;
+     end;
+
+{$ENDIF read_interface_types}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+function ATK_TYPE_GOBJECT_ACCESSIBLE : GType;
+function ATK_GOBJECT_ACCESSIBLE(obj: pointer) : PAtkGObjectAccessible;
+function ATK_GOBJECT_ACCESSIBLE_CLASS(klass: pointer) : PAtkGObjectAccessibleClass;
+function ATK_IS_GOBJECT_ACCESSIBLE(obj: pointer) : boolean;
+function ATK_IS_GOBJECT_ACCESSIBLE_CLASS(klass: pointer) : boolean;
+function ATK_GOBJECT_ACCESSIBLE_GET_CLASS(obj: pointer) : PAtkGObjectAccessibleClass;
+
+
+function atk_gobject_accessible_get_type:GType; cdecl; external atklib;
+
+function atk_gobject_accessible_for_object(obj:PGObject):PAtkObject; cdecl; external atklib;
+function atk_gobject_accessible_get_object(obj:PAtkGObjectAccessible):PGObject; cdecl; external atklib;
+{$ENDIF read_interface_rest}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_implementation}
+function ATK_TYPE_GOBJECT_ACCESSIBLE : GType;
+begin
+   ATK_TYPE_GOBJECT_ACCESSIBLE:=atk_gobject_accessible_get_type;
+end;
+
+function ATK_GOBJECT_ACCESSIBLE(obj: pointer) : PAtkGObjectAccessible;
+begin
+   ATK_GOBJECT_ACCESSIBLE:=PAtkGObjectAccessible(G_TYPE_CHECK_INSTANCE_CAST(obj,ATK_TYPE_GOBJECT_ACCESSIBLE));
+end;
+
+function ATK_GOBJECT_ACCESSIBLE_CLASS(klass: pointer) : PAtkGObjectAccessibleClass;
+begin
+   ATK_GOBJECT_ACCESSIBLE_CLASS:=PAtkGObjectAccessibleClass(G_TYPE_CHECK_CLASS_CAST(klass,ATK_TYPE_GOBJECT_ACCESSIBLE));
+end;
+
+function ATK_IS_GOBJECT_ACCESSIBLE(obj: pointer) : boolean;
+begin
+   ATK_IS_GOBJECT_ACCESSIBLE:=G_TYPE_CHECK_INSTANCE_TYPE(obj,ATK_TYPE_GOBJECT_ACCESSIBLE);
+end;
+
+function ATK_IS_GOBJECT_ACCESSIBLE_CLASS(klass: pointer) : boolean;
+begin
+   ATK_IS_GOBJECT_ACCESSIBLE_CLASS:=G_TYPE_CHECK_CLASS_TYPE(klass,ATK_TYPE_GOBJECT_ACCESSIBLE);
+end;
+
+function ATK_GOBJECT_ACCESSIBLE_GET_CLASS(obj: pointer) : PAtkGObjectAccessibleClass;
+begin
+   ATK_GOBJECT_ACCESSIBLE_GET_CLASS:=PAtkGObjectAccessibleClass(G_TYPE_INSTANCE_GET_CLASS(obj,ATK_TYPE_GOBJECT_ACCESSIBLE));
+end;
+
+{$ENDIF read_implementation}
+

+ 101 - 0
packages/extra/gtk2/atk/atkhyperlink.inc

@@ -0,0 +1,101 @@
+// included by atk.pp
+
+{
+   AtkHyperlink encapsulates a link or set of links in a hypertext document.
+
+   It implements the AtkAction interface.
+  }
+
+{$IFDEF read_forward_definitions}
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_types}
+   PAtkHyperlink = ^TAtkHyperlink;
+   TAtkHyperlink = record
+        parent : TGObject;
+     end;
+
+{ Returns a string specifying the URI associated with the nth anchor
+  of this link. }
+{ Returns an anObject which represents the link action, as appropriate for
+  that link. }
+{ Gets the index with the hypertext document at which this link ends }
+{ Gets the index with the hypertext document at which this link begins }
+{ Since the document a link is associated with may have changed, this
+  method returns whether or not this link is still valid (with respect
+  to the document is references) }
+{ Returns the number of anchors associated with this link }
+   PAtkHyperlinkClass = ^TAtkHyperlinkClass;
+   TAtkHyperlinkClass = record
+        parent : TGObjectClass;
+        get_uri : function (link:PAtkHyperlink; i:gint):Pgchar; cdecl;
+        get_object : function (link:PAtkHyperlink; i:gint):PAtkObject; cdecl;
+        get_end_index : function (link:PAtkHyperlink):gint; cdecl;
+        get_start_index : function (link:PAtkHyperlink):gint; cdecl;
+        is_valid : function (link:PAtkHyperlink):gboolean; cdecl;
+        get_n_anchors : function (link:PAtkHyperlink):gint; cdecl;
+        pad1 : TAtkFunction;
+        pad2 : TAtkFunction;
+        pad3 : TAtkFunction;
+        pad4 : TAtkFunction;
+     end;
+
+{$ENDIF read_interface_types}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+function ATK_TYPE_HYPERLINK : GType;
+function ATK_HYPERLINK(obj: pointer) : PAtkHyperlink;
+function ATK_HYPERLINK_CLASS(klass: pointer) : PAtkHyperlinkClass;
+function ATK_IS_HYPERLINK(obj: pointer) : boolean;
+function ATK_IS_HYPERLINK_CLASS(klass: pointer) : boolean;
+function ATK_HYPERLINK_GET_CLASS(obj: pointer) : PAtkHyperlinkClass;
+
+
+function atk_hyperlink_get_type:GType; cdecl; external atklib;
+function atk_hyperlink_get_uri(link:PAtkHyperlink; i:gint):Pgchar; cdecl; external atklib;
+function atk_hyperlink_get_object(link:PAtkHyperlink; i:gint):PAtkObject; cdecl; external atklib;
+function atk_hyperlink_get_end_index(link:PAtkHyperlink):gint; cdecl; external atklib;
+function atk_hyperlink_get_start_index(link:PAtkHyperlink):gint; cdecl; external atklib;
+function atk_hyperlink_is_valid(link:PAtkHyperlink):gboolean; cdecl; external atklib;
+function atk_hyperlink_get_n_anchors(link:PAtkHyperlink):gint; cdecl; external atklib;
+{$ENDIF read_interface_rest}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_implementation}
+function ATK_TYPE_HYPERLINK : GType;
+begin
+   ATK_TYPE_HYPERLINK:=atk_hyperlink_get_type;
+end;
+
+function ATK_HYPERLINK(obj: pointer) : PAtkHyperlink;
+begin
+   ATK_HYPERLINK:=PAtkHyperlink(G_TYPE_CHECK_INSTANCE_CAST(obj,ATK_TYPE_HYPERLINK));
+end;
+
+function ATK_HYPERLINK_CLASS(klass: pointer) : PAtkHyperlinkClass;
+begin
+   ATK_HYPERLINK_CLASS:=PAtkHyperlinkClass(G_TYPE_CHECK_CLASS_CAST(klass,ATK_TYPE_HYPERLINK));
+end;
+
+function ATK_IS_HYPERLINK(obj: pointer) : boolean;
+begin
+   ATK_IS_HYPERLINK:=G_TYPE_CHECK_INSTANCE_TYPE(obj,ATK_TYPE_HYPERLINK);
+end;
+
+function ATK_IS_HYPERLINK_CLASS(klass: pointer) : boolean;
+begin
+   ATK_IS_HYPERLINK_CLASS:=G_TYPE_CHECK_CLASS_TYPE(klass,ATK_TYPE_HYPERLINK);
+end;
+
+function ATK_HYPERLINK_GET_CLASS(obj: pointer) : PAtkHyperlinkClass;
+begin
+   ATK_HYPERLINK_GET_CLASS:=PAtkHyperlinkClass(G_TYPE_INSTANCE_GET_CLASS(obj,ATK_TYPE_HYPERLINK));
+end;
+
+{$ENDIF read_implementation}
+

+ 68 - 0
packages/extra/gtk2/atk/atkhypertext.inc

@@ -0,0 +1,68 @@
+// included by atk.pp
+
+{
+   The AtkHypertext interface provides standard  mechanisms for manipulating
+   hyperlinks.
+  }
+
+
+{$IFDEF read_forward_definitions}
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_types}
+   PAtkHypertextIface = ^TAtkHypertextIface;
+   TAtkHypertextIface = record
+        parent : TGTypeInterface;
+        get_link : function (hypertext:PAtkHypertext; link_index:gint):PAtkHyperlink; cdecl;
+        get_n_links : function (hypertext:PAtkHypertext):gint; cdecl;
+        get_link_index : function (hypertext:PAtkHypertext; char_index:gint):gint; cdecl;
+        pad1 : TAtkFunction;
+        pad2 : TAtkFunction;
+        pad3 : TAtkFunction;
+        pad4 : TAtkFunction;
+     end;
+
+{$ENDIF read_interface_types}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+function ATK_TYPE_HYPERTEXT : GType;
+function ATK_IS_HYPERTEXT(obj: pointer) : boolean;
+function ATK_HYPERTEXT(obj: pointer) : PAtkHypertext;
+function ATK_HYPERTEXT_GET_IFACE(obj: pointer) : PAtkHypertextIface;
+
+
+function atk_hypertext_get_type:GType; cdecl; external atklib;
+function atk_hypertext_get_link(hypertext:PAtkHypertext; link_index:gint):PAtkHyperlink; cdecl; external atklib;
+function atk_hypertext_get_n_links(hypertext:PAtkHypertext):gint; cdecl; external atklib;
+function atk_hypertext_get_link_index(hypertext:PAtkHypertext; char_index:gint):gint; cdecl; external atklib;
+{$ENDIF read_interface_rest}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_implementation}
+function ATK_TYPE_HYPERTEXT : GType;
+begin
+   ATK_TYPE_HYPERTEXT:=atk_hypertext_get_type;
+end;
+
+function ATK_IS_HYPERTEXT(obj: pointer) : boolean;
+begin
+   ATK_IS_HYPERTEXT:=G_TYPE_CHECK_INSTANCE_TYPE(obj,ATK_TYPE_HYPERTEXT);
+end;
+
+function ATK_HYPERTEXT(obj: pointer) : PAtkHypertext;
+begin
+   ATK_HYPERTEXT:=PAtkHypertext(G_TYPE_CHECK_INSTANCE_CAST(obj,ATK_TYPE_HYPERTEXT));
+end;
+
+function ATK_HYPERTEXT_GET_IFACE(obj: pointer) : PAtkHypertextIface;
+begin
+   ATK_HYPERTEXT_GET_IFACE:=PAtkHypertextIface(G_TYPE_INSTANCE_GET_INTERFACE(obj,ATK_TYPE_HYPERTEXT));
+end;
+
+{$ENDIF read_implementation}
+

+ 68 - 0
packages/extra/gtk2/atk/atkimage.inc

@@ -0,0 +1,68 @@
+// included by atk.pp
+
+{
+   The AtkImage interface should be supported by any anObject that has an
+   associated image. This interface provides the standard mechanism for
+   an assistive technology to get descriptive information about images.
+  }
+
+{$IFDEF read_forward_definitions}
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_types}
+   PAtkImageIface = ^TAtkImageIface;
+   TAtkImageIface = record
+        parent : TGTypeInterface;
+        get_image_position : procedure (image:PAtkImage; x:Pgint; y:Pgint; coord_type:TAtkCoordType); cdecl;
+        get_image_description : function (image:PAtkImage):Pgchar; cdecl;
+        get_image_size : procedure (image:PAtkImage; width:Pgint; height:Pgint); cdecl;
+        set_image_description : function (image:PAtkImage; description:Pgchar):gboolean; cdecl;
+        pad1 : TAtkFunction;
+        pad2 : TAtkFunction;
+     end;
+
+{$ENDIF read_interface_types}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+function ATK_TYPE_IMAGE : GType;
+function ATK_IS_IMAGE(obj: pointer) : boolean;
+function ATK_IMAGE(obj: pointer) : PAtkImage;
+function ATK_IMAGE_GET_IFACE(obj: pointer) : PAtkImageIface;
+
+
+function atk_image_get_type:GType; cdecl; external atklib;
+function atk_image_get_image_description(image:PAtkImage):Pgchar; cdecl; external atklib;
+procedure atk_image_get_image_size(image:PAtkImage; width:Pgint; height:Pgint); cdecl; external atklib;
+function atk_image_set_image_description(image:PAtkImage; description:Pgchar):gboolean; cdecl; external atklib;
+procedure atk_image_get_image_position(image:PAtkImage; x:Pgint; y:Pgint; coord_type:TAtkCoordType); cdecl; external atklib;
+{$ENDIF read_interface_rest}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_implementation}
+function ATK_TYPE_IMAGE : GType;
+begin
+   ATK_TYPE_IMAGE:=atk_image_get_type;
+end;
+
+function ATK_IS_IMAGE(obj: pointer) : boolean;
+begin
+   ATK_IS_IMAGE:=G_TYPE_CHECK_INSTANCE_TYPE(obj,ATK_TYPE_IMAGE);
+end;
+
+function ATK_IMAGE(obj: pointer) : PAtkImage;
+begin
+   ATK_IMAGE:=PAtkImage(G_TYPE_CHECK_INSTANCE_CAST(obj,ATK_TYPE_IMAGE));
+end;
+
+function ATK_IMAGE_GET_IFACE(obj: pointer) : PAtkImageIface;
+begin
+   ATK_IMAGE_GET_IFACE:=PAtkImageIface(G_TYPE_INSTANCE_GET_INTERFACE(obj,ATK_TYPE_IMAGE));
+end;
+
+{$ENDIF read_implementation}
+

+ 23 - 0
packages/extra/gtk2/atk/atkincludes.inc

@@ -0,0 +1,23 @@
+// included by atk.pp
+{$include atkobject.inc}
+{$include atkaction.inc}
+{$include atkcomponent.inc}
+{$include atkdocument.inc}
+{$include atkeditabletext.inc}
+{$include atkgobjectaccessible.inc}
+{$include atkhyperlink.inc}
+{$include atkhypertext.inc}
+{$include atkimage.inc}
+{$include atkobjectfactory.inc}
+{$include atkregistry.inc}
+{$include atkrelation.inc}
+{$include atkrelationset.inc}
+{$include atkselection.inc}
+{$include atkstate.inc}
+{$include atkstateset.inc}
+{$include atkstreamablecontent.inc}
+{$include atktable.inc}
+{$include atktext.inc}
+{$include atkutil.inc}
+{$include atkvalue.inc}
+

+ 510 - 0
packages/extra/gtk2/atk/atkobject.inc

@@ -0,0 +1,510 @@
+// included by atk.pp
+
+{
+   AtkObject represents the minimum information all accessible objects
+   return. This information includes accessible name, accessible
+   description, role and state of the anObject, as well information about
+   its parent and children. It is also possible to obtain more specific
+   accessibility information about a component if it supports one or more
+   of the following interfaces:
+  }
+
+{$IFDEF read_forward_definitions}
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_types}
+
+{
+  AtkRole:
+  @ATK_ROLE_INVALID: Invalid role
+  @ATK_ROLE_ACCEL_LABEL: A label which represents an accelerator
+  @ATK_ROLE_ALERT: An anObject which is an alert to the user
+  @ATK_ROLE_ANIMATION: An anObject which is an animated image
+  @ATK_ROLE_ARROW: An arrow in one of the four cardinal directions
+  @ATK_ROLE_CALENDAR:  An anObject that displays a calendar and allows the user to select a date
+  @ATK_ROLE_CANVAS: An anObject that can be drawn into and is used to trap events
+  @ATK_ROLE_CHECK_BOX: A choice that can be checked or unchecked and provides a separate indicator for the current state
+  @ATK_ROLE_CHECK_MENU_ITEM: A menu item with a check box
+  @ATK_ROLE_COLOR_CHOOSER: A specialized dialog that lets the user choose a color
+  @ATK_ROLE_COLUMN_HEADER: The header for a column of data
+  @ATK_ROLE_COMBO_BOX: A list of choices the user can select from
+  @ATK_ROLE_DATE_EDITOR: An anObject whose purpose is to allow a user to edit a date
+  @ATK_ROLE_DESKTOP_ICON: An inconifed internal frame within a DESKTOP_PANE
+  @ATK_ROLE_DESKTOP_FRAME: A pane that supports internal frames and iconified versions of those internal frames
+  @ATK_ROLE_DIAL: An anObject whose purpose is to allow a user to set a value
+  @ATK_ROLE_DIALOG: A top level window with title bar and a border
+  @ATK_ROLE_DIRECTORY_PANE: A pane that allows the user to navigate through and select the contents of a directory
+  @ATK_ROLE_DRAWING_AREA: An anObject used for drawing custom user interface elements
+  @ATK_ROLE_FILE_CHOOSER: A specialized dialog that lets the user choose a file
+  @ATK_ROLE_FILLER: A anObject that fills up space in a user interface
+  @ATK_ROLE_FONT_CHOOSER: A specialized dialog that lets the user choose a font
+  @ATK_ROLE_FRAME: A top level window with a title bar, border, menubar, etc.
+  @ATK_ROLE_GLASS_PANE: A pane that is guaranteed to be painted on top of all panes beneath it
+  @ATK_ROLE_HTML_CONTAINER: A document container for HTML, whose children represent the document content
+  @ATK_ROLE_ICON: A small fixed size picture, typically used to decorate components
+  @ATK_ROLE_IMAGE: An anObject whose primary purpose is to display an image
+  @ATK_ROLE_INTERNAL_FRAME: A frame-like anObject that is clipped by a desktop pane
+  @ATK_ROLE_LABEL: An anObject used to present an icon or short string in an interface
+  @ATK_ROLE_LAYERED_PANE: A specialized pane that allows its children to be drawn in layers, providing a form of stacking order
+  @ATK_ROLE_LIST: An anObject that presents a list of objects to the user and allows the user to select one or more of them
+  @ATK_ROLE_LIST_ITEM: An anObject that represents an element of a list
+  @ATK_ROLE_MENU: An anObject usually found inside a menu bar that contains a list of actions the user can choose from
+  @ATK_ROLE_MENU_BAR: An anObject usually drawn at the top of the primary dialog box of an application that contains a list of menus the user can choose from
+  @ATK_ROLE_MENU_ITEM: An anObject usually contained in a menu that presents an action the user can choose
+  @ATK_ROLE_OPTION_PANE: A specialized pane whose primary use is inside a DIALOG
+  @ATK_ROLE_PAGE_TAB: An anObject that is a child of a page tab list
+  @ATK_ROLE_PAGE_TAB_LIST: An anObject that presents a series of panels (or page tabs), one at a time, through some mechanism provided by the anObject
+  @ATK_ROLE_PANEL: A generic container that is often used to group objects
+  @ATK_ROLE_PASSWORD_TEXT: A text anObject uses for passwords, or other places where the text content is not shown visibly to the user
+  @ATK_ROLE_POPUP_MENU: A temporary window that is usually used to offer the user a list of choices, and then hides when the user selects one of those choices
+  @ATK_ROLE_PROGRESS_BAR: An anObject used to indicate how much of a task has been completed
+  @ATK_ROLE_PUSH_BUTTON: An anObject the user can manipulate to tell the application to do something
+  @ATK_ROLE_RADIO_BUTTON: A specialized check box that will cause other radio buttons in the same group to become unchecked when this one is checked
+  @ATK_ROLE_RADIO_MENU_ITEM: A check menu item which belongs to a group. At each instant exactly one of the radio menu items from a group is selected
+  @ATK_ROLE_ROOT_PANE: A specialized pane that has a glass pane and a layered pane as its children
+  @ATK_ROLE_ROW_HEADER: The header for a row of data
+  @ATK_ROLE_SCROLL_BAR: An anObject usually used to allow a user to incrementally view a large amount of data.
+  @ATK_ROLE_SCROLL_PANE: An anObject that allows a user to incrementally view a large amount of information
+  @ATK_ROLE_SEPARATOR: An anObject usually contained in a menu to provide a visible and logical separation of the contents in a menu
+  @ATK_ROLE_SLIDER: An anObject that allows the user to select from a bounded range
+  @ATK_ROLE_SPLIT_PANE: A specialized panel that presents two other panels at the same time
+  @ATK_ROLE_SPIN_BUTTON: An anObject used to get an integer or floating point number from the user
+  @ATK_ROLE_STATUSBAR: An anObject which reports messages of minor importance to the user
+  @ATK_ROLE_TABLE: An anObject used to represent information in terms of rows and columns
+  @ATK_ROLE_TABLE_CELL: A cell in a table
+  @ATK_ROLE_TABLE_COLUMN_HEADER: The header for a column of a table
+  @ATK_ROLE_TABLE_ROW_HEADER: The header for a row of a table
+  @ATK_ROLE_TEAR_OFF_MENU_ITEM: A menu item used to tear off and reattach its menu
+  @ATK_ROLE_TERMINAL: An anObject that represents an accessible terminal
+  @ATK_ROLE_TEXT: An anObject that presents text to the user
+  @ATK_ROLE_TOGGLE_BUTTON: A specialized push button that can be checked or unchecked, but does not provide a separate indicator for the current state
+  @ATK_ROLE_TOOL_BAR: A bar or palette usually composed of push buttons or toggle buttons
+  @ATK_ROLE_TOOL_TIP: An anObject that provides information about another anObject
+  @ATK_ROLE_TREE: An anObject used to represent hierarchical information to the user
+  @ATK_ROLE_TREE_TABLE: An anObject capable of expanding and collapsing rows as well as showing multiple columns of data
+  @ATK_ROLE_UNKNOWN: The anObject contains some Accessible information, but its role is not known
+  @ATK_ROLE_VIEWPORT: An anObject usually used in a scroll pane
+  @ATK_ROLE_WINDOW: A top level window with no title or border
+  @ATK_ROLE_LAST_DEFINED: not a valid role, used for finding theEnd of enumeration
+
+  Describes the role of an anObject
+   }
+   PAtkRole = ^TAtkRole;
+   TAtkRole = (
+     ATK_ROLE_INVALID {:= 0},
+     ATK_ROLE_ACCEL_LABEL,
+     ATK_ROLE_ALERT,
+     ATK_ROLE_ANIMATION,
+     ATK_ROLE_ARROW,
+     ATK_ROLE_CALENDAR,
+     ATK_ROLE_CANVAS,
+     ATK_ROLE_CHECK_BOX,
+     ATK_ROLE_CHECK_MENU_ITEM,
+     ATK_ROLE_COLOR_CHOOSER,
+     ATK_ROLE_COLUMN_HEADER,
+     ATK_ROLE_COMBO_BOX,
+     ATK_ROLE_DATE_EDITOR,
+     ATK_ROLE_DESKTOP_ICON,
+     ATK_ROLE_DESKTOP_FRAME,
+     ATK_ROLE_DIAL,
+     ATK_ROLE_DIALOG,
+     ATK_ROLE_DIRECTORY_PANE,
+     ATK_ROLE_DRAWING_AREA,
+     ATK_ROLE_FILE_CHOOSER,
+     ATK_ROLE_FILLER,
+     ATK_ROLE_FONT_CHOOSER,
+     ATK_ROLE_FRAME,
+     ATK_ROLE_GLASS_PANE,
+     ATK_ROLE_HTML_CONTAINER,
+     ATK_ROLE_ICON,
+     ATK_ROLE_IMAGE,
+     ATK_ROLE_INTERNAL_FRAME,
+     ATK_ROLE_LABEL,
+     ATK_ROLE_LAYERED_PANE,
+     ATK_ROLE_LIST,
+     ATK_ROLE_LIST_ITEM,
+     ATK_ROLE_MENU,
+     ATK_ROLE_MENU_BAR,
+     ATK_ROLE_MENU_ITEM,
+     ATK_ROLE_OPTION_PANE,
+     ATK_ROLE_PAGE_TAB,
+     ATK_ROLE_PAGE_TAB_LIST,
+     ATK_ROLE_PANEL,
+     ATK_ROLE_PASSWORD_TEXT,
+     ATK_ROLE_POPUP_MENU,
+     ATK_ROLE_PROGRESS_BAR,
+     ATK_ROLE_PUSH_BUTTON,
+     ATK_ROLE_RADIO_BUTTON,
+     ATK_ROLE_RADIO_MENU_ITEM,
+     ATK_ROLE_ROOT_PANE,
+     ATK_ROLE_ROW_HEADER,
+     ATK_ROLE_SCROLL_BAR,
+     ATK_ROLE_SCROLL_PANE,
+     ATK_ROLE_SEPARATOR,
+     ATK_ROLE_SLIDER,
+     ATK_ROLE_SPLIT_PANE,
+     ATK_ROLE_SPIN_BUTTON,
+     ATK_ROLE_STATUSBAR,
+     ATK_ROLE_TABLE,
+     ATK_ROLE_TABLE_CELL,
+     ATK_ROLE_TABLE_COLUMN_HEADER,
+     ATK_ROLE_TABLE_ROW_HEADER,
+     ATK_ROLE_TEAR_OFF_MENU_ITEM,
+     ATK_ROLE_TERMINAL,
+     ATK_ROLE_TEXT,
+     ATK_ROLE_TOGGLE_BUTTON,
+     ATK_ROLE_TOOL_BAR,
+     ATK_ROLE_TOOL_TIP,
+     ATK_ROLE_TREE,
+     ATK_ROLE_TREE_TABLE,
+     ATK_ROLE_UNKNOWN,
+     ATK_ROLE_VIEWPORT,
+     ATK_ROLE_WINDOW,
+     ATK_ROLE_LAST_DEFINED
+   );
+
+
+{
+  AtkLayer:
+  @ATK_LAYER_INVALID: The anObject does not have a layer
+  @ATK_LAYER_BACKGROUND: This layer is reserved for the desktop background
+  @ATK_LAYER_CANVAS: This layer is used for Canvas components
+  @ATK_LAYER_WIDGET: This layer is normally used for components
+  @ATK_LAYER_MDI: This layer is used for layered components
+  @ATK_LAYER_POPUP: This layer is used for popup components, such as menus
+  @ATK_LAYER_OVERLAY: This layer is reserved for future use.
+
+   Describes the layer of a component
+   }
+   PAtkLayer = ^TAtkLayer;
+   TAtkLayer = (
+     ATK_LAYER_INVALID,
+     ATK_LAYER_BACKGROUND,
+     ATK_LAYER_CANVAS,
+     ATK_LAYER_WIDGET,
+     ATK_LAYER_MDI,
+     ATK_LAYER_POPUP,
+     ATK_LAYER_OVERLAY
+   );
+
+
+   PAtkPropertyValues = ^TAtkPropertyValues;
+   TAtkPropertyValues = record
+        property_name : Pgchar;
+        old_value : TGValue;
+        new_value : TGValue;
+     end;
+
+
+   TAtkFunction = function (data:gpointer):gboolean; cdecl;
+{
+   For most properties the old_value field of AtkPropertyValues will
+   not contain a valid value.
+
+   Currently, the only property for which old_value is used is
+   accessible-state; for instance if there is a focus state the
+   property change handler will be called for the anObject which lost the focus
+   with the old_value containing an AtkState value corresponding to focused
+   and the property change handler will be called for the anObject which
+   received the focus with the new_value containing an AtkState value
+   corresponding to focused.
+  }
+
+   PAtkObject = ^TAtkObject;
+   PPAtkObject = ^PAtkObject;
+   TAtkObject = record
+        parent : TGObject;
+        description : Pgchar;
+        name : Pgchar;
+        accessible_parent : PAtkObject;
+        role : TAtkRole;
+        relation_set : PAtkRelationSet;
+        layer : TAtkLayer;
+     end;
+
+   TAtkPropertyChangeHandler = procedure (para1:PAtkObject; para2:PAtkPropertyValues); cdecl;
+
+{
+     Gets the accessible name of the anObject
+    }
+{
+     Gets the accessible description of the anObject
+    }
+{
+     Gets the accessible parent of the anObject
+    }
+{
+     Gets the number of accessible children of the anObject
+    }
+{
+     Returns a reference to the specified accessible child of the anObject.
+     The accessible children are 0-based so the first accessible child is
+     at index 0, the second at index 1 and so on.
+    }
+{
+     Gets the 0-based index of this anObject in its parent; returns -1 if the
+     anObject does not have an accessible parent.
+    }
+{
+     Gets the RelationSet associated with the anObject
+    }
+{
+     Gets the role of the anObject
+    }
+{
+     Gets the state set of the anObject
+    }
+{
+     Sets the accessible name of the anObject
+    }
+{
+     Sets the accessible description of the anObject
+    }
+{
+     Sets the accessible parent of the anObject
+    }
+{
+     Sets the accessible role of the anObject
+    }
+{
+     Specifies a function to be called when a property changes value
+    }
+{
+     Removes a property change handler which was specified using
+     connect_property_change_handler
+    }
+{
+     The signal handler which is executed when there is a change in the
+     children of the anObject
+    }
+{
+     The signal handler which is executed  when there is a focus event
+     for an anObject.
+    }
+{
+     The signal handler which is executed  when there is a property_change
+     signal for an anObject.
+    }
+{
+     The signal handler which is executed  when there is a state_change
+     signal for an anObject.
+    }
+{
+     The signal handler which is executed when there is a change in the
+     visible data for an anObject
+    }
+   PAtkObjectClass = ^TAtkObjectClass;
+   TAtkObjectClass = record
+        parent : TGObjectClass;
+        get_name : function (accessible:PAtkObject):Pgchar; cdecl;
+        get_description : function (accessible:PAtkObject):Pgchar; cdecl;
+        get_parent : function (accessible:PAtkObject):PAtkObject; cdecl;
+        get_n_children : function (accessible:PAtkObject):gint; cdecl;
+        ref_child : function (accessible:PAtkObject; i:gint):PAtkObject; cdecl;
+        get_index_in_parent : function (accessible:PAtkObject):gint; cdecl;
+        ref_relation_set : function (accessible:PAtkObject):PAtkRelationSet; cdecl;
+        get_role : function (accessible:PAtkObject):TAtkRole; cdecl;
+        get_layer : function (accessible:PAtkObject):TAtkLayer; cdecl;
+        get_mdi_zorder : function (accessible:PAtkObject):gint; cdecl;
+        ref_state_set : function (accessible:PAtkObject):PAtkStateSet; cdecl;
+        set_name : procedure (accessible:PAtkObject; name:Pgchar); cdecl;
+        set_description : procedure (accessible:PAtkObject; description:Pgchar); cdecl;
+        set_parent : procedure (accessible:PAtkObject; parent:PAtkObject); cdecl;
+        set_role : procedure (accessible:PAtkObject; role:TAtkRole); cdecl;
+        connect_property_change_handler : function (accessible:PAtkObject; handler:TAtkPropertyChangeHandler):guint; cdecl;
+        remove_property_change_handler : procedure (accessible:PAtkObject; handler_id:guint); cdecl;
+        initialize : procedure (accessible:PAtkObject; data:gpointer); cdecl;
+        children_changed : procedure (accessible:PAtkObject; change_index:guint; changed_child:gpointer); cdecl;
+        focus_event : procedure (accessible:PAtkObject; focus_in:gboolean); cdecl;
+        property_change : procedure (accessible:PAtkObject; values:PAtkPropertyValues); cdecl;
+        state_change : procedure (accessible:PAtkObject; name:Pgchar; state_set:gboolean); cdecl;
+        visible_data_changed : procedure (accessible:PAtkObject); cdecl;
+        pad1 : TAtkFunction;
+        pad2 : TAtkFunction;
+        pad3 : TAtkFunction;
+        pad4 : TAtkFunction;
+     end;
+
+   PAtkImplementorIface = ^TAtkImplementorIface;
+   TAtkImplementorIface = record
+        parent : TGTypeInterface;
+        ref_accessible : function (implementor:PAtkImplementor):PAtkObject; cdecl;
+     end;
+
+
+{$ENDIF read_interface_types}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+function atk_role_register(name:Pgchar):TAtkRole; cdecl; external atklib;
+
+function atk_object_get_type:GType; cdecl; external atklib;
+
+function ATK_TYPE_OBJECT : GType;
+function ATK_OBJECT(obj: pointer) : PAtkObject;
+function ATK_OBJECT_CLASS(klass: pointer) : PAtkObjectClass;
+function ATK_IS_OBJECT(obj: pointer) : boolean;
+function ATK_IS_OBJECT_CLASS(klass: pointer) : boolean;
+function ATK_OBJECT_GET_CLASS(obj: pointer) : PAtkObjectClass;
+
+function ATK_TYPE_IMPLEMENTOR : GType;
+function ATK_IS_IMPLEMENTOR(obj: pointer) : boolean;
+function ATK_IMPLEMENTOR(obj: pointer) : PAtkImplementor;
+function ATK_IMPLEMENTOR_GET_IFACE(obj: pointer) : PAtkImplementorIface;
+
+function atk_implementor_get_type:GType; cdecl; external atklib;
+{
+   This method uses the ref_accessible method in AtkImplementorIface,
+   if the anObject's class implements AtkImplementorIface.
+   Otherwise it returns %NULL.
+
+   IMPORTANT:
+   Note also that because this method may return flyweight objects,
+   it increments the returned AtkObject's reference count.
+   Therefore it is the responsibility of the calling
+   program to unreference the anObject when no longer needed.
+   (c.f. gtk_widget_get_accessible() where this is not the case).
+  }
+function atk_implementor_ref_accessible(implementor:PAtkImplementor):PAtkObject; cdecl; external atklib;
+{
+   Properties directly supported by AtkObject
+  }
+function atk_object_get_name(accessible:PAtkObject):Pgchar; cdecl; external atklib;
+function atk_object_get_description(accessible:PAtkObject):Pgchar; cdecl; external atklib;
+function atk_object_get_parent(accessible:PAtkObject):PAtkObject; cdecl; external atklib;
+function atk_object_get_n_accessible_children(accessible:PAtkObject):gint; cdecl; external atklib;
+function atk_object_ref_accessible_child(accessible:PAtkObject; i:gint):PAtkObject; cdecl; external atklib;
+function atk_object_ref_relation_set(accessible:PAtkObject):PAtkRelationSet; cdecl; external atklib;
+function atk_object_get_role(accessible:PAtkObject):TAtkRole; cdecl; external atklib;
+function atk_object_get_layer(accessible:PAtkObject):TAtkLayer; cdecl; external atklib;
+function atk_object_get_mdi_zorder(accessible:PAtkObject):gint; cdecl; external atklib;
+function atk_object_ref_state_set(accessible:PAtkObject):PAtkStateSet; cdecl; external atklib;
+function atk_object_get_index_in_parent(accessible:PAtkObject):gint; cdecl; external atklib;
+procedure atk_object_set_name(accessible:PAtkObject; name:Pgchar); cdecl; external atklib;
+procedure atk_object_set_description(accessible:PAtkObject; description:Pgchar); cdecl; external atklib;
+procedure atk_object_set_parent(accessible:PAtkObject; parent:PAtkObject); cdecl; external atklib;
+procedure atk_object_set_role(accessible:PAtkObject; role:TAtkRole); cdecl; external atklib;
+function atk_object_connect_property_change_handler(accessible:PAtkObject; handler:TAtkPropertyChangeHandler):guint; cdecl; external atklib;
+procedure atk_object_remove_property_change_handler(accessible:PAtkObject; handler_id:guint); cdecl; external atklib;
+procedure atk_object_notify_state_change(accessible:PAtkObject; state:TAtkState; value:gboolean); cdecl; external atklib;
+procedure atk_object_initialize(accessible:PAtkObject; data:gpointer); cdecl; external atklib;
+function atk_role_get_name(role:TAtkRole):Pgchar; cdecl; external atklib;
+function atk_role_for_name(name:Pgchar):TAtkRole; cdecl; external atklib;
+{
+   Note: the properties which are registered with the GType
+     property registry, for type ATK_TYPE_OBJECT, are as follows:
+
+     "accessible-name"
+     "accessible-description"
+     "accessible-parent"
+     "accessible-role"
+     "accessible-value"
+     "accessible-component-layer"
+     "accessible-component-zorder"
+     "accessible-table-caption"
+     "accessible-table-column-description"
+     "accessible-table-column-header"
+     "accessible-table-row-description"
+     "accessible-table-row-header"
+     "accessible-table-summary"
+     "accessible-model"
+
+   accessibility property change listeners should use the
+     normal GObject property interfaces and "property-change"
+     signal handler semantics to interpret the property change
+     information relayed from AtkObject.
+     (AtkObject instances will connect to the "notify"
+     signal in their host objects, and relay the signals when appropriate).
+  }
+(* For other signals, see related interfaces
+
+      AtkActionIface,
+      AtkComponentIface,
+      AtkHypertextIface,
+      AtkImageIface,
+      AtkSelectionIface,
+      AtkTableIface,
+      AtkTextIface,
+      AtkValueIface.
+
+    The usage model for obtaining these interface instances is:
+      ATK_<interfacename>_GET_IFACE(GObject  accessible),
+      where accessible, though specified as a GObject, is
+      the AtkObject instance being queried.
+    More usually, the interface will be used via a cast to the
+      interface's corresponding "type":
+
+      var
+        textImpl: PAtkText;
+      begin
+        textImpl := ATK_TEXT(accessible);
+        if (textImpl<>nil) then
+          cpos := atk_text_get_caret_position(textImpl);
+      end;
+
+    If it's known in advance that accessible implements AtkTextIface,
+      this is shortened to:
+
+      cpos := atk_text_get_caret_position (ATK_TEXT (accessible));
+*)
+
+{$ENDIF read_interface_rest}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_implementation}
+function ATK_TYPE_OBJECT : GType;
+begin
+  ATK_TYPE_OBJECT:=atk_object_get_type;
+end;
+
+function ATK_OBJECT(obj: pointer) : PAtkObject;
+begin
+  ATK_OBJECT:=PAtkObject(G_TYPE_CHECK_INSTANCE_CAST(obj,ATK_TYPE_OBJECT));
+end;
+
+function ATK_OBJECT_CLASS(klass: pointer) : PAtkObjectClass;
+begin
+  ATK_OBJECT_CLASS:=PAtkObjectClass(G_TYPE_CHECK_CLASS_CAST(klass,ATK_TYPE_OBJECT));
+end;
+
+function ATK_IS_OBJECT(obj: pointer) : boolean;
+begin
+  ATK_IS_OBJECT:=G_TYPE_CHECK_INSTANCE_TYPE(obj,ATK_TYPE_OBJECT);
+end;
+
+function ATK_IS_OBJECT_CLASS(klass: pointer) : boolean;
+begin
+   ATK_IS_OBJECT_CLASS:=G_TYPE_CHECK_CLASS_TYPE(klass,ATK_TYPE_OBJECT);
+end;
+
+function ATK_OBJECT_GET_CLASS(obj: pointer) : PAtkObjectClass;
+begin
+   ATK_OBJECT_GET_CLASS:=PAtkObjectClass(G_TYPE_INSTANCE_GET_CLASS(obj,ATK_TYPE_OBJECT));
+end;
+
+function ATK_TYPE_IMPLEMENTOR : GType;
+begin
+  ATK_TYPE_IMPLEMENTOR:=atk_implementor_get_type;
+end;
+
+function ATK_IS_IMPLEMENTOR(obj: pointer) : boolean;
+begin
+  ATK_IS_IMPLEMENTOR:=G_TYPE_CHECK_INSTANCE_TYPE(obj,ATK_TYPE_IMPLEMENTOR);
+end;
+
+function ATK_IMPLEMENTOR(obj: pointer) : PAtkImplementor;
+begin
+  ATK_IMPLEMENTOR:=PAtkImplementor(G_TYPE_CHECK_INSTANCE_CAST(obj,ATK_TYPE_IMPLEMENTOR));
+end;
+
+function ATK_IMPLEMENTOR_GET_IFACE(obj: pointer) : PAtkImplementorIface;
+begin
+   ATK_IMPLEMENTOR_GET_IFACE:=PAtkImplementorIface(G_TYPE_INSTANCE_GET_INTERFACE(obj,ATK_TYPE_IMPLEMENTOR));
+end;
+
+{$ENDIF read_implementation}
+

+ 77 - 0
packages/extra/gtk2/atk/atkobjectfactory.inc

@@ -0,0 +1,77 @@
+// included by atk.pp
+
+{$IFDEF read_forward_definitions}
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_types}
+   PAtkObjectFactory = ^TAtkObjectFactory;
+   TAtkObjectFactory = record
+        parent : TGObject;
+     end;
+
+   PAtkObjectFactoryClass = ^TAtkObjectFactoryClass;
+   TAtkObjectFactoryClass = record
+        parent_class : TGObjectClass;
+        create_accessible : function (obj:PGObject):PAtkObject; cdecl;
+        invalidate : procedure (factory:PAtkObjectFactory); cdecl;
+        get_accessible_type : function :GType; cdecl;
+        pad1 : TAtkFunction;
+        pad2 : TAtkFunction;
+     end;
+
+{$ENDIF read_interface_types}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+function ATK_TYPE_OBJECT_FACTORY : GType;
+function ATK_OBJECT_FACTORY(obj: pointer) : PAtkObjectFactory;
+function ATK_OBJECT_FACTORY_CLASS(klass: pointer) : PAtkObjectFactoryClass;
+function ATK_IS_OBJECT_FACTORY(obj: pointer) : boolean;
+function ATK_IS_OBJECT_FACTORY_CLASS(klass: pointer) : boolean;
+function ATK_OBJECT_FACTORY_GET_CLASS(obj: pointer) : PAtkObjectFactoryClass;
+
+
+function atk_object_factory_get_type:GType; cdecl; external atklib;
+function atk_object_factory_create_accessible(factory:PAtkObjectFactory; obj:PGObject):PAtkObject; cdecl; external atklib;
+procedure atk_object_factory_invalidate(factory:PAtkObjectFactory); cdecl; external atklib;
+function atk_object_factory_get_accessible_type(factory:PAtkObjectFactory):GType; cdecl; external atklib;
+{$ENDIF read_interface_rest}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_implementation}
+function ATK_TYPE_OBJECT_FACTORY : GType;
+begin
+   ATK_TYPE_OBJECT_FACTORY:=atk_object_factory_get_type;
+end;
+
+function ATK_OBJECT_FACTORY(obj: pointer) : PAtkObjectFactory;
+begin
+   ATK_OBJECT_FACTORY:=PAtkObjectFactory(G_TYPE_CHECK_INSTANCE_CAST(obj,ATK_TYPE_OBJECT_FACTORY));
+end;
+
+function ATK_OBJECT_FACTORY_CLASS(klass: pointer) : PAtkObjectFactoryClass;
+begin
+   ATK_OBJECT_FACTORY_CLASS:=PAtkObjectFactoryClass(G_TYPE_CHECK_CLASS_CAST(klass,ATK_TYPE_OBJECT_FACTORY));
+end;
+
+function ATK_IS_OBJECT_FACTORY(obj: pointer) : boolean;
+begin
+   ATK_IS_OBJECT_FACTORY:=G_TYPE_CHECK_INSTANCE_TYPE(obj,ATK_TYPE_OBJECT_FACTORY);
+end;
+
+function ATK_IS_OBJECT_FACTORY_CLASS(klass: pointer) : boolean;
+begin
+   ATK_IS_OBJECT_FACTORY_CLASS:=G_TYPE_CHECK_CLASS_TYPE(klass,ATK_TYPE_OBJECT_FACTORY);
+end;
+
+function ATK_OBJECT_FACTORY_GET_CLASS(obj: pointer) : PAtkObjectFactoryClass;
+begin
+   ATK_OBJECT_FACTORY_GET_CLASS:=PAtkObjectFactoryClass(G_TYPE_INSTANCE_GET_CLASS(obj,ATK_TYPE_OBJECT_FACTORY));
+end;
+
+{$ENDIF read_implementation}
+

+ 75 - 0
packages/extra/gtk2/atk/atkregistry.inc

@@ -0,0 +1,75 @@
+// included by atk.pp
+
+{$IFDEF read_forward_definitions}
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_types}
+   PAtkRegistry = ^TAtkRegistry;
+   TAtkRegistry = record
+        parent : TGObject;
+        factory_type_registry : PGHashTable;
+        factory_singleton_cache : PGHashTable;
+     end;
+
+   PAtkRegistryClass = ^TAtkRegistryClass;
+   TAtkRegistryClass = record
+        parent_class : TGObjectClass;
+     end;
+
+{$ENDIF read_interface_types}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+function ATK_TYPE_REGISTRY : GType;
+function ATK_REGISTRY(obj: pointer) : PAtkRegistry;
+function ATK_REGISTRY_CLASS(klass: pointer) : PAtkRegistryClass;
+function ATK_IS_REGISTRY(obj: pointer) : boolean;
+function ATK_IS_REGISTRY_CLASS(klass: pointer) : boolean;
+function ATK_REGISTRY_GET_CLASS(obj: pointer) : PAtkRegistryClass;
+
+
+function atk_registry_get_type:GType; cdecl; external atklib;
+procedure atk_registry_set_factory_type(registry:PAtkRegistry; _type:GType; factory_type:GType); cdecl; external atklib;
+function atk_registry_get_factory_type(registry:PAtkRegistry; _type:GType):GType; cdecl; external atklib;
+function atk_registry_get_factory(registry:PAtkRegistry; _type:GType):PAtkObjectFactory; cdecl; external atklib;
+function atk_get_default_registry:PAtkRegistry; cdecl; external atklib;
+{$ENDIF read_interface_rest}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_implementation}
+function ATK_TYPE_REGISTRY : GType;
+begin
+   ATK_TYPE_REGISTRY:=atk_registry_get_type;
+end;
+
+function ATK_REGISTRY(obj: pointer) : PAtkRegistry;
+begin
+   ATK_REGISTRY:=PAtkRegistry(G_TYPE_CHECK_INSTANCE_CAST(obj,ATK_TYPE_REGISTRY));
+end;
+
+function ATK_REGISTRY_CLASS(klass: pointer) : PAtkRegistryClass;
+begin
+   ATK_REGISTRY_CLASS:=PAtkRegistryClass(G_TYPE_CHECK_CLASS_CAST(klass,ATK_TYPE_REGISTRY));
+end;
+
+function ATK_IS_REGISTRY(obj: pointer) : boolean;
+begin
+   ATK_IS_REGISTRY:=G_TYPE_CHECK_INSTANCE_TYPE(obj,ATK_TYPE_REGISTRY);
+end;
+
+function ATK_IS_REGISTRY_CLASS(klass: pointer) : boolean;
+begin
+   ATK_IS_REGISTRY_CLASS:=G_TYPE_CHECK_CLASS_TYPE(klass,ATK_TYPE_REGISTRY);
+end;
+
+function ATK_REGISTRY_GET_CLASS(obj: pointer) : PAtkRegistryClass;
+begin
+   ATK_REGISTRY_GET_CLASS:=PAtkRegistryClass(G_TYPE_INSTANCE_GET_CLASS(obj,ATK_TYPE_REGISTRY));
+end;
+
+{$ENDIF read_implementation}
+

+ 113 - 0
packages/extra/gtk2/atk/atkrelation.inc

@@ -0,0 +1,113 @@
+// included by atk.pp
+
+{
+   An AtkRelation describes a relation between the anObject and one or more
+   other objects. The actual relations that an anObject has with other objects
+   are defined as an AtkRelationSet, which is a set of AtkRelations.
+  }
+
+{$IFDEF read_forward_definitions}
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_types}
+{
+  AtkRelationType:
+  @ATK_RELATION_NULL:
+  @ATK_RELATION_CONTROLLED_BY: Indicates an anObject controlled by one or more target objects.
+  @ATK_RELATION_CONTROLLER_FOR: Indicates an anObject is an controller for one or more target objects.
+  @ATK_RELATION_LABEL_FOR: Indicates an anObject is a label for one or more target objects.
+  @ATK_RELATION_LABELLED_BY: Indicates an anObject is labelled by one or more target objects.
+  @ATK_RELATION_MEMBER_OF: Indicates an anObject is a member of a group of one or more target objects.
+  @ATK_RELATION_NODE_CHILD_OF: Indicates an anObject is a cell in a treetable which is displayed because a cell in the same column is expanded and identifies that cell.
+  @ATK_RELATION_LAST_DEFINED:
+
+  Describes the type of the relation
+   }
+   PAtkRelationType = ^TAtkRelationType;
+   TAtkRelationType = (
+     ATK_RELATION_NULL {:= 0},
+     ATK_RELATION_CONTROLLED_BY,
+     ATK_RELATION_CONTROLLER_FOR,
+     ATK_RELATION_LABEL_FOR,
+     ATK_RELATION_LABELLED_BY,
+     ATK_RELATION_MEMBER_OF,
+     ATK_RELATION_NODE_CHILD_OF,
+     ATK_RELATION_LAST_DEFINED
+   );
+
+
+   PAtkRelation = ^TAtkRelation;
+   TAtkRelation = record
+        parent : TGObject;
+        target : PGPtrArray;
+        relationship : TAtkRelationType;
+     end;
+
+   PAtkRelationClass = ^TAtkRelationClass;
+   TAtkRelationClass = record
+        parent : TGObjectClass;
+     end;
+
+{$ENDIF read_interface_types}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+
+function ATK_TYPE_RELATION : GType;
+function ATK_RELATION(obj: pointer) : PAtkRelation;
+function ATK_RELATION_CLASS(klass: pointer) : PAtkRelationClass;
+function ATK_IS_RELATION(obj: pointer) : boolean;
+function ATK_IS_RELATION_CLASS(klass: pointer) : boolean;
+function ATK_RELATION_GET_CLASS(obj: pointer) : PAtkRelationClass;
+
+
+function atk_relation_get_type:GType; cdecl; external atklib;
+function atk_relation_type_register(name:Pgchar):TAtkRelationType; cdecl; external atklib;
+function atk_relation_type_get_name(_type:TAtkRelationType):Pgchar; cdecl; external atklib;
+function atk_relation_type_for_name(name:Pgchar):TAtkRelationType; cdecl; external atklib;
+{ Create a new relation for the specified key and the specified list of targets. }
+function atk_relation_new(targets:PPAtkObject; n_targets:gint; relationship:TAtkRelationType):PAtkRelation; cdecl; external atklib;
+{ Returns the type of a relation. }
+function atk_relation_get_relation_type(relation:PAtkRelation):TAtkRelationType; cdecl; external atklib;
+{ Returns the target list of a relation. }
+function atk_relation_get_target(relation:PAtkRelation):PGPtrArray; cdecl; external atklib;
+{$ENDIF read_interface_rest}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_implementation}
+function ATK_TYPE_RELATION : GType;
+begin
+   ATK_TYPE_RELATION:=atk_relation_get_type;
+end;
+
+function ATK_RELATION(obj: pointer) : PAtkRelation;
+begin
+   ATK_RELATION:=PAtkRelation(G_TYPE_CHECK_INSTANCE_CAST(obj,ATK_TYPE_RELATION));
+end;
+
+function ATK_RELATION_CLASS(klass: pointer) : PAtkRelationClass;
+begin
+   ATK_RELATION_CLASS:=PAtkRelationClass(G_TYPE_CHECK_CLASS_CAST(klass,ATK_TYPE_RELATION));
+end;
+
+function ATK_IS_RELATION(obj: pointer) : boolean;
+begin
+   ATK_IS_RELATION:=G_TYPE_CHECK_INSTANCE_TYPE(obj,ATK_TYPE_RELATION);
+end;
+
+function ATK_IS_RELATION_CLASS(klass: pointer) : boolean;
+begin
+   ATK_IS_RELATION_CLASS:=G_TYPE_CHECK_CLASS_TYPE(klass,ATK_TYPE_RELATION);
+end;
+
+function ATK_RELATION_GET_CLASS(obj: pointer) : PAtkRelationClass;
+begin
+   ATK_RELATION_GET_CLASS:=PAtkRelationClass(G_TYPE_INSTANCE_GET_CLASS(obj,ATK_TYPE_RELATION));
+end;
+
+{$ENDIF read_implementation}
+

+ 79 - 0
packages/extra/gtk2/atk/atkrelationset.inc

@@ -0,0 +1,79 @@
+// included by atk.pp
+
+{$IFDEF read_forward_definitions}
+   PAtkRelationSet = ^TAtkRelationSet;
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_types}
+   TAtkRelationSet = record
+        parent : TGObject;
+        relations : PGPtrArray;
+     end;
+
+   PAtkRelationSetClass = ^TAtkRelationSetClass;
+   TAtkRelationSetClass = record
+        parent : TGObjectClass;
+        pad1 : TAtkFunction;
+        pad2 : TAtkFunction;
+     end;
+
+{$ENDIF read_interface_types}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+function ATK_TYPE_RELATION_SET : GType;
+function ATK_RELATION_SET(obj: pointer) : PAtkRelationSet;
+function ATK_RELATION_SET_CLASS(klass: pointer) : PAtkRelationSetClass;
+function ATK_IS_RELATION_SET(obj: pointer) : boolean;
+function ATK_IS_RELATION_SET_CLASS(klass: pointer) : boolean;
+function ATK_RELATION_SET_GET_CLASS(obj: pointer) : PAtkRelationSetClass;
+
+
+function atk_relation_set_get_type:GType; cdecl; external atklib;
+function atk_relation_set_new:PAtkRelationSet; cdecl; external atklib;
+function atk_relation_set_contains(RelationSet:PAtkRelationSet; relationship:TAtkRelationType):gboolean; cdecl; external atklib;
+procedure atk_relation_set_remove(RelationSet:PAtkRelationSet; relation:PAtkRelation); cdecl; external atklib;
+procedure atk_relation_set_add(RelationSet:PAtkRelationSet; relation:PAtkRelation); cdecl; external atklib;
+function atk_relation_set_get_n_relations(RelationSet:PAtkRelationSet):gint; cdecl; external atklib;
+function atk_relation_set_get_relation(RelationSet:PAtkRelationSet; i:gint):PAtkRelation; cdecl; external atklib;
+function atk_relation_set_get_relation_by_type(RelationSet:PAtkRelationSet; relationship:TAtkRelationType):PAtkRelation; cdecl; external atklib;
+{$ENDIF read_interface_rest}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_implementation}
+function ATK_TYPE_RELATION_SET : GType;
+begin
+   ATK_TYPE_RELATION_SET:=atk_relation_set_get_type;
+end;
+
+function ATK_RELATION_SET(obj: pointer) : PAtkRelationSet;
+begin
+   ATK_RELATION_SET:=PAtkRelationSet(G_TYPE_CHECK_INSTANCE_CAST(obj,ATK_TYPE_RELATION_SET));
+end;
+
+function ATK_RELATION_SET_CLASS(klass: pointer) : PAtkRelationSetClass;
+begin
+   ATK_RELATION_SET_CLASS:=PAtkRelationSetClass(G_TYPE_CHECK_CLASS_CAST(klass,ATK_TYPE_RELATION_SET));
+end;
+
+function ATK_IS_RELATION_SET(obj: pointer) : boolean;
+begin
+   ATK_IS_RELATION_SET:=G_TYPE_CHECK_INSTANCE_TYPE(obj,ATK_TYPE_RELATION_SET);
+end;
+
+function ATK_IS_RELATION_SET_CLASS(klass: pointer) : boolean;
+begin
+   ATK_IS_RELATION_SET_CLASS:=G_TYPE_CHECK_CLASS_TYPE(klass,ATK_TYPE_RELATION_SET);
+end;
+
+function ATK_RELATION_SET_GET_CLASS(obj: pointer) : PAtkRelationSetClass;
+begin
+   ATK_RELATION_SET_GET_CLASS:=PAtkRelationSetClass(G_TYPE_INSTANCE_GET_CLASS(obj,ATK_TYPE_RELATION_SET));
+end;
+
+{$ENDIF read_implementation}
+

+ 77 - 0
packages/extra/gtk2/atk/atkselection.inc

@@ -0,0 +1,77 @@
+// included by atk.pp
+
+{
+   This AtkSelection interface provides the standard mechanism for an
+   assistive technology to determine what the current selected children are,
+   as well as modify the selection set. Any anObject that has children that
+   can be selected should support the AtkSelection interface.
+  }
+
+{$IFDEF read_forward_definitions}
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_types}
+{ signal handlers  }
+   PAtkSelectionIface = ^TAtkSelectionIface;
+   TAtkSelectionIface = record
+        parent : TGTypeInterface;
+        add_selection : function (selection:PAtkSelection; i:gint):gboolean; cdecl;
+        clear_selection : function (selection:PAtkSelection):gboolean; cdecl;
+        ref_selection : function (selection:PAtkSelection; i:gint):PAtkObject; cdecl;
+        get_selection_count : function (selection:PAtkSelection):gint; cdecl;
+        is_child_selected : function (selection:PAtkSelection; i:gint):gboolean; cdecl;
+        remove_selection : function (selection:PAtkSelection; i:gint):gboolean; cdecl;
+        select_all_selection : function (selection:PAtkSelection):gboolean; cdecl;
+        selection_changed : procedure (selection:PAtkSelection); cdecl;
+        pad1 : TAtkFunction;
+        pad2 : TAtkFunction;
+     end;
+
+{$ENDIF read_interface_types}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+function ATK_TYPE_SELECTION : GType;
+function ATK_IS_SELECTION(obj: pointer) : boolean;
+function ATK_SELECTION(obj: pointer) : PAtkSelection;
+function ATK_SELECTION_GET_IFACE(obj: pointer) : PAtkSelectionIface;
+
+
+function atk_selection_get_type:GType; cdecl; external atklib;
+function atk_selection_add_selection(selection:PAtkSelection; i:gint):gboolean; cdecl; external atklib;
+function atk_selection_clear_selection(selection:PAtkSelection):gboolean; cdecl; external atklib;
+function atk_selection_ref_selection(selection:PAtkSelection; i:gint):PAtkObject; cdecl; external atklib;
+function atk_selection_get_selection_count(selection:PAtkSelection):gint; cdecl; external atklib;
+function atk_selection_is_child_selected(selection:PAtkSelection; i:gint):gboolean; cdecl; external atklib;
+function atk_selection_remove_selection(selection:PAtkSelection; i:gint):gboolean; cdecl; external atklib;
+function atk_selection_select_all_selection(selection:PAtkSelection):gboolean; cdecl; external atklib;
+{$ENDIF read_interface_rest}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_implementation}
+function ATK_TYPE_SELECTION : GType;
+begin
+   ATK_TYPE_SELECTION:=atk_selection_get_type;
+end;
+
+function ATK_IS_SELECTION(obj: pointer) : boolean;
+begin
+   ATK_IS_SELECTION:=G_TYPE_CHECK_INSTANCE_TYPE(obj,ATK_TYPE_SELECTION);
+end;
+
+function ATK_SELECTION(obj: pointer) : PAtkSelection;
+begin
+   ATK_SELECTION:=PAtkSelection(G_TYPE_CHECK_INSTANCE_CAST(obj,ATK_TYPE_SELECTION));
+end;
+
+function ATK_SELECTION_GET_IFACE(obj: pointer) : PAtkSelectionIface;
+begin
+   ATK_SELECTION_GET_IFACE:=PAtkSelectionIface(G_TYPE_INSTANCE_GET_INTERFACE(obj,ATK_TYPE_SELECTION));
+end;
+
+{$ENDIF read_implementation}
+

+ 96 - 0
packages/extra/gtk2/atk/atkstate.inc

@@ -0,0 +1,96 @@
+// included by atk.pp
+
+{$IFDEF read_forward_definitions}
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_types}
+{
+  AtkStateType:
+  @ATK_STATE_INVALID: Indicates an invalid state
+  @ATK_STATE_ACTIVE: Indicates a window is currently the active window
+  @ATK_STATE_ARMED: Indicates that the anObject is armed
+  @ATK_STATE_BUSY: Indicates the current anObject is busy
+  @ATK_STATE_CHECKED: Indicates this anObject is currently checked
+  @ATK_STATE_DEFUNCT: Indicates the user interface anObject corresponding to this anObject no longer exists
+  @ATK_STATE_EDITABLE: Indicates the user can change the contents of this anObject
+  @ATK_STATE_ENABLED: Indicates that this anObject is enabled
+  @ATK_STATE_EXPANDABLE: Indicates this anObject allows progressive disclosure of its children
+  @ATK_STATE_EXPANDED: Indicates this anObject its expanded
+  @ATK_STATE_FOCUSABLE: Indicates this anObject can accept keyboard focus, which means all events resulting from typing on the keyboard will normally be passed to it when it has focus
+  @ATK_STATE_FOCUSED: Indicates this anObject currently has the keyboard focus
+  @ATK_STATE_HORIZONTAL: Indicates the orientation of this anObject is horizontal
+  @ATK_STATE_ICONIFIED: Indicates this anObject is minimized and is represented only by an icon
+  @ATK_STATE_MODAL: Indicates something must be done with this anObject before the user can interact with an anObject in a different window
+  @ATK_STATE_MULTI_LINE: Indicates this (text) anObject can contain multiple lines of text
+  @ATK_STATE_MULTISELECTABLE: Indicates this anObject allows more than one of its children to be selected at the same time
+  @ATK_STATE_OPAQUE: Indicates this anObject paints every pixel within its rectangular region
+  @ATK_STATE_PRESSED: Indicates this anObject is currently pressed
+  @ATK_STATE_RESIZABLE: Indicates the size of this anObject is not fixed
+  @ATK_STATE_SELECTABLE: Indicates this anObject is the child of an anObject that allows its children to be selected and that this child is one of those children that can be selected
+  @ATK_STATE_SELECTED: Indicates this anObject is the child of an anObject that allows its children to be selected and that this child is one of those children that has been selected
+  @ATK_STATE_SENSITIVE: Indicates this anObject is sensitive
+  @ATK_STATE_SHOWING: Indicates this anObject, the anObject's parent, the anObject's parent's parent, and so on, are all visible
+  @ATK_STATE_SINGLE_LINE: Indicates this (text) anObject can contain only a single line of text
+  @ATK_STATE_STALE: Indicates that the index associated with this anObject has changed since the user accessed the anObject.
+  @ATK_STATE_TRANSIENT: Indicates this anObject is transient
+  @ATK_STATE_VERTICAL: Indicates the orientation of this anObject is vertical
+  @ATK_STATE_VISIBLE: Indicates this anObject is visible
+  @ATK_STATE_LAST_DEFINED: Not a valid role, used for finding theEnd of enumeration
+
+  The possible types of states of an anObject
+   }
+   PAtkStateType = ^TAtkStateType;
+   TAtkStateType = (
+     ATK_STATE_INVALID,
+     ATK_STATE_ACTIVE,
+     ATK_STATE_ARMED,
+     ATK_STATE_BUSY,
+     ATK_STATE_CHECKED,
+     ATK_STATE_DEFUNCT,
+     ATK_STATE_EDITABLE,
+     ATK_STATE_ENABLED,
+     ATK_STATE_EXPANDABLE,
+     ATK_STATE_EXPANDED,
+     ATK_STATE_FOCUSABLE,
+     ATK_STATE_FOCUSED,
+     ATK_STATE_HORIZONTAL,
+     ATK_STATE_ICONIFIED,
+     ATK_STATE_MODAL,
+     ATK_STATE_MULTI_LINE,
+     ATK_STATE_MULTISELECTABLE,
+     ATK_STATE_OPAQUE,
+     ATK_STATE_PRESSED,
+     ATK_STATE_RESIZABLE,
+     ATK_STATE_SELECTABLE,
+     ATK_STATE_SELECTED,
+     ATK_STATE_SENSITIVE,
+     ATK_STATE_SHOWING,
+     ATK_STATE_SINGLE_LINE,
+     ATK_STATE_STALE,
+     ATK_STATE_TRANSIENT,
+     ATK_STATE_VERTICAL,
+     ATK_STATE_VISIBLE,
+     ATK_STATE_LAST_DEFINED
+   );
+
+   PAtkState = ^TAtkState;
+   TAtkState = guint64;
+
+{$ENDIF read_interface_types}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+
+function atk_state_type_register(name:Pgchar):TAtkStateType; cdecl; external atklib;
+function atk_state_type_get_name(_type:TAtkStateType):Pgchar; cdecl; external atklib;
+function atk_state_type_for_name(name:Pgchar):TAtkStateType; cdecl; external atklib;
+{$ENDIF read_interface_rest}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_implementation}
+{$ENDIF read_implementation}
+

+ 80 - 0
packages/extra/gtk2/atk/atkstateset.inc

@@ -0,0 +1,80 @@
+// included by atk.pp
+
+{$IFDEF read_forward_definitions}
+   PAtkStateSet = ^TAtkStateSet;
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_types}
+   TAtkStateSet = record
+        parent : TGObject;
+     end;
+
+   PAtkStateSetClass = ^TAtkStateSetClass;
+   TAtkStateSetClass = record
+        parent : TGObjectClass;
+     end;
+
+{$ENDIF read_interface_types}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+function ATK_TYPE_STATE_SET : GType;
+function ATK_STATE_SET(obj: pointer) : PAtkStateSet;
+function ATK_STATE_SET_CLASS(klass: pointer) : PAtkStateSetClass;
+function ATK_IS_STATE_SET(obj: pointer) : boolean;
+function ATK_IS_STATE_SET_CLASS(klass: pointer) : boolean;
+function ATK_STATE_SET_GET_CLASS(obj: pointer) : PAtkStateSetClass;
+
+
+function atk_state_set_get_type:GType; cdecl; external atklib;
+function atk_state_set_new:PAtkStateSet; cdecl; external atklib;
+function atk_state_set_is_empty(StateSet:PAtkStateSet):gboolean; cdecl; external atklib;
+function atk_state_set_add_state(StateSet:PAtkStateSet; _type:TAtkStateType):gboolean; cdecl; external atklib;
+procedure atk_state_set_add_states(StateSet:PAtkStateSet; types:PAtkStateType; n_types:gint); cdecl; external atklib;
+procedure atk_state_set_clear_states(StateSet:PAtkStateSet); cdecl; external atklib;
+function atk_state_set_contains_state(StateSet:PAtkStateSet; _type:TAtkStateType):gboolean; cdecl; external atklib;
+function atk_state_set_contains_states(StateSet:PAtkStateSet; types:PAtkStateType; n_types:gint):gboolean; cdecl; external atklib;
+function atk_state_set_remove_state(StateSet:PAtkStateSet; _type:TAtkStateType):gboolean; cdecl; external atklib;
+function atk_state_set_and_sets(StateSet:PAtkStateSet; compare_set:PAtkStateSet):PAtkStateSet; cdecl; external atklib;
+function atk_state_set_or_sets(StateSet:PAtkStateSet; compare_set:PAtkStateSet):PAtkStateSet; cdecl; external atklib;
+function atk_state_set_xor_sets(StateSet:PAtkStateSet; compare_set:PAtkStateSet):PAtkStateSet; cdecl; external atklib;
+{$ENDIF read_interface_rest}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_implementation}
+function ATK_TYPE_STATE_SET : GType;
+begin
+   ATK_TYPE_STATE_SET:=atk_state_set_get_type;
+end;
+
+function ATK_STATE_SET(obj: pointer) : PAtkStateSet;
+begin
+   ATK_STATE_SET:=PAtkStateSet(G_TYPE_CHECK_INSTANCE_CAST(obj,ATK_TYPE_STATE_SET));
+end;
+
+function ATK_STATE_SET_CLASS(klass: pointer) : PAtkStateSetClass;
+begin
+   ATK_STATE_SET_CLASS:=PAtkStateSetClass(G_TYPE_CHECK_CLASS_CAST(klass,ATK_TYPE_STATE_SET));
+end;
+
+function ATK_IS_STATE_SET(obj: pointer) : boolean;
+begin
+   ATK_IS_STATE_SET:=G_TYPE_CHECK_INSTANCE_TYPE(obj,ATK_TYPE_STATE_SET);
+end;
+
+function ATK_IS_STATE_SET_CLASS(klass: pointer) : boolean;
+begin
+   ATK_IS_STATE_SET_CLASS:=G_TYPE_CHECK_CLASS_TYPE(klass,ATK_TYPE_STATE_SET);
+end;
+
+function ATK_STATE_SET_GET_CLASS(obj: pointer) : PAtkStateSetClass;
+begin
+   ATK_STATE_SET_GET_CLASS:=PAtkStateSetClass(G_TYPE_INSTANCE_GET_CLASS(obj,ATK_TYPE_STATE_SET));
+end;
+
+{$ENDIF read_implementation}
+

+ 78 - 0
packages/extra/gtk2/atk/atkstreamablecontent.inc

@@ -0,0 +1,78 @@
+// included by atk.pp
+
+{$IFDEF read_forward_definitions}
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_types}
+{  Get the number of mime types supported by this anObject }
+{  Gets the specified mime type supported by this anObject.
+   The mime types are 0-based so the first mime type is
+   at index 0, the second at index 1 and so on.
+
+   This assumes that the strings for the mime types are stored in the
+   AtkStreamableContent. Alternatively the  could be removed
+   and the caller would be responsible for calling g_free() on the
+   returned value.
+    }
+{
+   Is one possible implementation for this method that it constructs the
+   content appropriate for the mime type and then creates a temporary
+   file containing the content, opens the file and then calls
+   g_io_channel_unix_new_fd().
+    }
+   PAtkStreamableContentIface = ^TAtkStreamableContentIface;
+   TAtkStreamableContentIface = record
+        parent : TGTypeInterface;
+        get_n_mime_types : function (streamable:PAtkStreamableContent):gint; cdecl;
+        get_mime_type : function (streamable:PAtkStreamableContent; i:gint):Pgchar; cdecl;
+        get_stream : function (streamable:PAtkStreamableContent; mime_type:Pgchar):PGIOChannel; cdecl;
+        pad1 : TAtkFunction;
+        pad2 : TAtkFunction;
+        pad3 : TAtkFunction;
+        pad4 : TAtkFunction;
+     end;
+
+{$ENDIF read_interface_types}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+function ATK_TYPE_STREAMABLE_CONTENT : GType;
+function ATK_IS_STREAMABLE_CONTENT(obj: pointer) : boolean;
+function ATK_STREAMABLE_CONTENT(obj: pointer) : PAtkStreamableContent;
+function ATK_STREAMABLE_CONTENT_GET_IFACE(obj: pointer) : PAtkStreamableContentIface;
+
+
+function atk_streamable_content_get_type:GType; cdecl; external atklib;
+function atk_streamable_content_get_n_mime_types(streamable:PAtkStreamableContent):gint; cdecl; external atklib;
+function atk_streamable_content_get_mime_type(streamable:PAtkStreamableContent; i:gint):Pgchar; cdecl; external atklib;
+function atk_streamable_content_get_stream(streamable:PAtkStreamableContent; mime_type:Pgchar):PGIOChannel; cdecl; external atklib;
+{$ENDIF read_interface_rest}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_implementation}
+function ATK_TYPE_STREAMABLE_CONTENT : GType;
+begin
+   ATK_TYPE_STREAMABLE_CONTENT:=atk_streamable_content_get_type;
+end;
+
+function ATK_IS_STREAMABLE_CONTENT(obj: pointer) : boolean;
+begin
+   ATK_IS_STREAMABLE_CONTENT:=G_TYPE_CHECK_INSTANCE_TYPE(obj,ATK_TYPE_STREAMABLE_CONTENT);
+end;
+
+function ATK_STREAMABLE_CONTENT(obj: pointer) : PAtkStreamableContent;
+begin
+   ATK_STREAMABLE_CONTENT:=PAtkStreamableContent(G_TYPE_CHECK_INSTANCE_CAST(obj,ATK_TYPE_STREAMABLE_CONTENT));
+end;
+
+function ATK_STREAMABLE_CONTENT_GET_IFACE(obj: pointer) : PAtkStreamableContentIface;
+begin
+   ATK_STREAMABLE_CONTENT_GET_IFACE:=PAtkStreamableContentIface(G_TYPE_INSTANCE_GET_INTERFACE(obj,ATK_TYPE_STREAMABLE_CONTENT));
+end;
+
+{$ENDIF read_implementation}
+

+ 129 - 0
packages/extra/gtk2/atk/atktable.inc

@@ -0,0 +1,129 @@
+// included by atk.pp
+
+{
+   AtkTable describes a user-interface component that presents data in
+   two-dimensional table format.
+  }
+
+{$IFDEF read_forward_definitions}
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_types}
+{
+     signal handlers
+    }
+   PAtkTableIface = ^TAtkTableIface;
+   TAtkTableIface = record
+        parent : TGTypeInterface;
+        ref_at : function (table:PAtkTable; row:gint; column:gint):PAtkObject; cdecl;
+        get_index_at : function (table:PAtkTable; row:gint; column:gint):gint; cdecl;
+        get_column_at_index : function (table:PAtkTable; index:gint):gint; cdecl;
+        get_row_at_index : function (table:PAtkTable; index:gint):gint; cdecl;
+        get_n_columns : function (table:PAtkTable):gint; cdecl;
+        get_n_rows : function (table:PAtkTable):gint; cdecl;
+        get_column_extent_at : function (table:PAtkTable; row:gint; column:gint):gint; cdecl;
+        get_row_extent_at : function (table:PAtkTable; row:gint; column:gint):gint; cdecl;
+        get_caption : function (table:PAtkTable):PAtkObject; cdecl;
+        get_column_description : function (table:PAtkTable; column:gint):Pgchar; cdecl;
+        get_column_header : function (table:PAtkTable; column:gint):PAtkObject; cdecl;
+        get_row_description : function (table:PAtkTable; row:gint):Pgchar; cdecl;
+        get_row_header : function (table:PAtkTable; row:gint):PAtkObject; cdecl;
+        get_summary : function (table:PAtkTable):PAtkObject; cdecl;
+        set_caption : procedure (table:PAtkTable; caption:PAtkObject); cdecl;
+        set_column_description : procedure (table:PAtkTable; column:gint; description:Pgchar); cdecl;
+        set_column_header : procedure (table:PAtkTable; column:gint; header:PAtkObject); cdecl;
+        set_row_description : procedure (table:PAtkTable; row:gint; description:Pgchar); cdecl;
+        set_row_header : procedure (table:PAtkTable; row:gint; header:PAtkObject); cdecl;
+        set_summary : procedure (table:PAtkTable; accessible:PAtkObject); cdecl;
+        get_selected_columns : function (table:PAtkTable; selected:PPgint):gint; cdecl;
+        get_selected_rows : function (table:PAtkTable; selected:PPgint):gint; cdecl;
+        is_column_selected : function (table:PAtkTable; column:gint):gboolean; cdecl;
+        is_row_selected : function (table:PAtkTable; row:gint):gboolean; cdecl;
+        is_selected : function (table:PAtkTable; row:gint; column:gint):gboolean; cdecl;
+        add_row_selection : function (table:PAtkTable; row:gint):gboolean; cdecl;
+        remove_row_selection : function (table:PAtkTable; row:gint):gboolean; cdecl;
+        add_column_selection : function (table:PAtkTable; column:gint):gboolean; cdecl;
+        remove_column_selection : function (table:PAtkTable; column:gint):gboolean; cdecl;
+        row_inserted : procedure (table:PAtkTable; row:gint; num_inserted:gint); cdecl;
+        column_inserted : procedure (table:PAtkTable; column:gint; num_inserted:gint); cdecl;
+        row_deleted : procedure (table:PAtkTable; row:gint; num_deleted:gint); cdecl;
+        column_deleted : procedure (table:PAtkTable; column:gint; num_deleted:gint); cdecl;
+        row_reordered : procedure (table:PAtkTable); cdecl;
+        column_reordered : procedure (table:PAtkTable); cdecl;
+        model_changed : procedure (table:PAtkTable); cdecl;
+        pad1 : TAtkFunction;
+        pad2 : TAtkFunction;
+        pad3 : TAtkFunction;
+        pad4 : TAtkFunction;
+     end;
+
+{$ENDIF read_interface_types}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+function ATK_TYPE_TABLE : GType;
+function ATK_IS_TABLE(obj: pointer) : boolean;
+function ATK_TABLE(obj: pointer) : PAtkTable;
+function ATK_TABLE_GET_IFACE(obj: pointer) : PAtkTableIface;
+
+
+function atk_table_get_type:GType; cdecl; external atklib;
+function atk_table_ref_at(table:PAtkTable; row:gint; column:gint):PAtkObject; cdecl; external atklib;
+function atk_table_get_index_at(table:PAtkTable; row:gint; column:gint):gint; cdecl; external atklib;
+function atk_table_get_column_at_index(table:PAtkTable; index:gint):gint; cdecl; external atklib;
+function atk_table_get_row_at_index(table:PAtkTable; index:gint):gint; cdecl; external atklib;
+function atk_table_get_n_columns(table:PAtkTable):gint; cdecl; external atklib;
+function atk_table_get_n_rows(table:PAtkTable):gint; cdecl; external atklib;
+function atk_table_get_column_extent_at(table:PAtkTable; row:gint; column:gint):gint; cdecl; external atklib;
+function atk_table_get_row_extent_at(table:PAtkTable; row:gint; column:gint):gint; cdecl; external atklib;
+function atk_table_get_caption(table:PAtkTable):PAtkObject; cdecl; external atklib;
+function atk_table_get_column_description(table:PAtkTable; column:gint):Pgchar; cdecl; external atklib;
+function atk_table_get_column_header(table:PAtkTable; column:gint):PAtkObject; cdecl; external atklib;
+function atk_table_get_row_description(table:PAtkTable; row:gint):Pgchar; cdecl; external atklib;
+function atk_table_get_row_header(table:PAtkTable; row:gint):PAtkObject; cdecl; external atklib;
+function atk_table_get_summary(table:PAtkTable):PAtkObject; cdecl; external atklib;
+procedure atk_table_set_caption(table:PAtkTable; caption:PAtkObject); cdecl; external atklib;
+procedure atk_table_set_column_description(table:PAtkTable; column:gint; description:Pgchar); cdecl; external atklib;
+procedure atk_table_set_column_header(table:PAtkTable; column:gint; header:PAtkObject); cdecl; external atklib;
+procedure atk_table_set_row_description(table:PAtkTable; row:gint; description:Pgchar); cdecl; external atklib;
+procedure atk_table_set_row_header(table:PAtkTable; row:gint; header:PAtkObject); cdecl; external atklib;
+procedure atk_table_set_summary(table:PAtkTable; accessible:PAtkObject); cdecl; external atklib;
+function atk_table_get_selected_columns(table:PAtkTable; selected:PPgint):gint; cdecl; external atklib;
+function atk_table_get_selected_rows(table:PAtkTable; selected:PPgint):gint; cdecl; external atklib;
+function atk_table_is_column_selected(table:PAtkTable; column:gint):gboolean; cdecl; external atklib;
+function atk_table_is_row_selected(table:PAtkTable; row:gint):gboolean; cdecl; external atklib;
+function atk_table_is_selected(table:PAtkTable; row:gint; column:gint):gboolean; cdecl; external atklib;
+function atk_table_add_row_selection(table:PAtkTable; row:gint):gboolean; cdecl; external atklib;
+function atk_table_remove_row_selection(table:PAtkTable; row:gint):gboolean; cdecl; external atklib;
+function atk_table_add_column_selection(table:PAtkTable; column:gint):gboolean; cdecl; external atklib;
+function atk_table_remove_column_selection(table:PAtkTable; column:gint):gboolean; cdecl; external atklib;
+{$ENDIF read_interface_rest}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_implementation}
+function ATK_TYPE_TABLE : GType;
+begin
+   ATK_TYPE_TABLE:=atk_table_get_type;
+end;
+
+function ATK_IS_TABLE(obj: pointer) : boolean;
+begin
+   ATK_IS_TABLE:=G_TYPE_CHECK_INSTANCE_TYPE(obj,ATK_TYPE_TABLE);
+end;
+
+function ATK_TABLE(obj: pointer) : PAtkTable;
+begin
+   ATK_TABLE:=PAtkTable(G_TYPE_CHECK_INSTANCE_CAST(obj,ATK_TYPE_TABLE));
+end;
+
+function ATK_TABLE_GET_IFACE(obj: pointer) : PAtkTableIface;
+begin
+   ATK_TABLE_GET_IFACE:=PAtkTableIface(G_TYPE_INSTANCE_GET_INTERFACE(obj,ATK_TYPE_TABLE));
+end;
+
+{$ENDIF read_implementation}
+

+ 230 - 0
packages/extra/gtk2/atk/atktext.inc

@@ -0,0 +1,230 @@
+// included by atk.pp
+
+{
+   AtkAttributeSet:
+
+   This is a singly-linked list (a #GSList) of #AtkAttribute. It is
+   used by atk_text_get_run_attributes(), atk_text_get_default_attributes()
+   and atk_editable_text_set_run_attributes()
+   }
+
+{$IFDEF read_forward_definitions}
+   PAtkAttributeSet = ^TAtkAttributeSet;
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_types}
+   TAtkAttributeSet = TGSList;
+
+{
+   AtkAttribute:
+   @name: The attribute name. Call atk_text_attr_get_name()
+   @value: the value of the attribute, represented as a string.
+   Call atk_text_attr_get_value() for those which are strings.
+   For values which are numbers, the string representation of the number
+   is in value.
+
+   A string name/value pair representing a text attribute.
+   }
+   PAtkAttribute = ^TAtkAttribute;
+   TAtkAttribute = record
+        name : Pgchar;
+        value : Pgchar;
+     end;
+
+{
+  AtkTextAttribute
+  @ATK_TEXT_ATTR_INVALID: Invalid attribute
+  @ATK_TEXT_ATTR_LEFT_MARGIN: The pixel width of the left margin
+  @ATK_TEXT_ATTR_RIGHT_MARGIN: The pixel width of the right margin
+  @ATK_TEXT_ATTR_INDENT: The number of pixels that the text is indented
+  @ATK_TEXT_ATTR_INVISIBLE: Either "true" or "false" indicating whether text is visible or not
+  @ATK_TEXT_ATTR_EDITABLE: Either "true" or "false" indicating whether text is editable or not
+  @ATK_TEXT_ATTR_PIXELS_ABOVE_LINES: Pixels of blank space to leave above each newline-terminated line.
+  @ATK_TEXT_ATTR_PIXELS_BELOW_LINES: Pixels of blank space to leave below each newline-terminated line.
+  @ATK_TEXT_ATTR_PIXELS_INSIDE_WRAP: Pixels of blank space to leave between wrapped lines inside the same newline-terminated line (paragraph).
+  @ATK_TEXT_ATTR_BG_FULL_HEIGHT: "true" or "false" whether to make the background color for each character the height of the highest font used on the current line, or the height of the font used for the current character.
+  @ATK_TEXT_ATTR_RISE: Number of pixels that the characters are risen above the baseline
+  @ATK_TEXT_ATTR_UNDERLINE: "none", "single", "double" or "low"
+  @ATK_TEXT_ATTR_STRIKETHROUGH: "true" or "false" whether the text is strikethrough
+  @ATK_TEXT_ATTR_SIZE: The size of the characters.
+  @ATK_TEXT_ATTR_SCALE: The scale of the characters. The value is a string representation of a double
+  @ATK_TEXT_ATTR_WEIGHT: The weight of the characters.
+  @ATK_TEXT_ATTR_LANGUAGE: The language used
+  @ATK_TEXT_ATTR_FAMILY_NAME: The font family name
+  @ATK_TEXT_ATTR_BG_COLOR: The background color. The value is an RGB value of the format "%u,%u,%u"
+  @ATK_TEXT_ATTR_FG_COLOR:The foreground color. The value is an RGB value of the format "%u,%u,%u"
+  @ATK_TEXT_ATTR_BG_STIPPLE: "true" if a #GdkBitmap is set for stippling the background color.
+  @ATK_TEXT_ATTR_FG_STIPPLE: "true" if a #GdkBitmap is set for stippling the foreground color.
+  @ATK_TEXT_ATTR_WRAP_MODE: The wrap mode of the text, if any. Values are "none", "char" or "word"
+  @ATK_TEXT_ATTR_DIRECTION: The direction of the text, if set. Values are "none", "ltr" or "rtl"
+  @ATK_TEXT_ATTR_JUSTIFICATION: The justification of the text, if set. Values are "left", "right", "center" or "fill"
+  @ATK_TEXT_ATTR_STRETCH: The stretch of the text, if set. Values are "ultra_condensed", "extra_condensed", "condensed", "semi_condensed", "normal", "semi_expanded", "expanded", "extra_expanded" or "ultra_expanded"
+  @ATK_TEXT_ATTR_VARIANT: The capitalization variant of the text, if set. Values are "normal" or "small_caps"
+  @ATK_TEXT_ATTR_STYLE: The slant style of the text, if set. Values are "normal", "oblique" or "italic"
+  @ATK_TEXT_ATTR_LAST_DEFINED: not a valid text attribute, used for finding theEnd of enumeration
+
+   Describes the text attributes supported
+   }
+
+   PAtkTextAttribute = ^TAtkTextAttribute;
+   TAtkTextAttribute = (
+     ATK_TEXT_ATTR_INVALID {:= 0},
+     ATK_TEXT_ATTR_LEFT_MARGIN,
+     ATK_TEXT_ATTR_RIGHT_MARGIN,
+     ATK_TEXT_ATTR_INDENT,
+     ATK_TEXT_ATTR_INVISIBLE,
+     ATK_TEXT_ATTR_EDITABLE,
+     ATK_TEXT_ATTR_PIXELS_ABOVE_LINES,
+     ATK_TEXT_ATTR_PIXELS_BELOW_LINES,
+     ATK_TEXT_ATTR_PIXELS_INSIDE_WRAP,
+     ATK_TEXT_ATTR_BG_FULL_HEIGHT,
+     ATK_TEXT_ATTR_RISE,
+     ATK_TEXT_ATTR_UNDERLINE,
+     ATK_TEXT_ATTR_STRIKETHROUGH,
+     ATK_TEXT_ATTR_SIZE,
+     ATK_TEXT_ATTR_SCALE,
+     ATK_TEXT_ATTR_WEIGHT,
+     ATK_TEXT_ATTR_LANGUAGE,
+     ATK_TEXT_ATTR_FAMILY_NAME,
+     ATK_TEXT_ATTR_BG_COLOR,
+     ATK_TEXT_ATTR_FG_COLOR,
+     ATK_TEXT_ATTR_BG_STIPPLE,
+     ATK_TEXT_ATTR_FG_STIPPLE,
+     ATK_TEXT_ATTR_WRAP_MODE,
+     ATK_TEXT_ATTR_DIRECTION,
+     ATK_TEXT_ATTR_JUSTIFICATION,
+     ATK_TEXT_ATTR_STRETCH,
+     ATK_TEXT_ATTR_VARIANT,
+     ATK_TEXT_ATTR_STYLE,
+     ATK_TEXT_ATTR_LAST_DEFINED
+   );
+
+
+{
+  AtkTextBoundary:
+  @ATK_TEXT_BOUNDARY_CHAR:
+  @ATK_TEXT_BOUNDARY_WORD_START:
+  @ATK_TEXT_BOUNDARY_WORD_END:
+  @ATK_TEXT_BOUNDARY_SENTENCE_START:
+  @ATK_TEXT_BOUNDARY_SENTENCE_END:
+  @ATK_TEXT_BOUNDARY_LINE_START:
+  @ATK_TEXT_BOUNDARY_LINE_END:
+
+  Text boundary types used for specifying boundaries for regions of text
+   }
+
+   PAtkTextBoundary = ^TAtkTextBoundary;
+   TAtkTextBoundary = (
+     ATK_TEXT_BOUNDARY_CHAR,
+     ATK_TEXT_BOUNDARY_WORD_START,
+     ATK_TEXT_BOUNDARY_WORD_END,
+     ATK_TEXT_BOUNDARY_SENTENCE_START,
+     ATK_TEXT_BOUNDARY_SENTENCE_END,
+     ATK_TEXT_BOUNDARY_LINE_START,
+     ATK_TEXT_BOUNDARY_LINE_END
+   );
+{
+     signal handlers
+    }
+   PAtkTextIface = ^TAtkTextIface;
+   TAtkTextIface = record
+        parent : TGTypeInterface;
+        get_text : function (text:PAtkText; start_offset:gint; end_offset:gint):Pgchar; cdecl;
+        get_text_after_offset : function (text:PAtkText; offset:gint; boundary_type:TAtkTextBoundary; start_offset:Pgint; end_offset:Pgint):Pgchar; cdecl;
+        get_text_at_offset : function (text:PAtkText; offset:gint; boundary_type:TAtkTextBoundary; start_offset:Pgint; end_offset:Pgint):Pgchar; cdecl;
+        get_character_at_offset : function (text:PAtkText; offset:gint):gunichar; cdecl;
+        get_text_before_offset : function (text:PAtkText; offset:gint; boundary_type:TAtkTextBoundary; start_offset:Pgint; end_offset:Pgint):Pgchar; cdecl;
+        get_caret_offset : function (text:PAtkText):gint; cdecl;
+        get_run_attributes : function (text:PAtkText; offset:gint; start_offset:Pgint; end_offset:Pgint):PAtkAttributeSet; cdecl;
+        get_default_attributes : function (text:PAtkText):PAtkAttributeSet; cdecl;
+        get_character_extents : procedure (text:PAtkText; offset:gint; x:Pgint; y:Pgint; width:Pgint;
+                      height:Pgint; coords:TAtkCoordType); cdecl;
+        get_character_count : function (text:PAtkText):gint; cdecl;
+        get_offset_at_point : function (text:PAtkText; x:gint; y:gint; coords:TAtkCoordType):gint; cdecl;
+        get_n_selections : function (text:PAtkText):gint; cdecl;
+        get_selection : function (text:PAtkText; selection_num:gint; start_offset:Pgint; end_offset:Pgint):Pgchar; cdecl;
+        add_selection : function (text:PAtkText; start_offset:gint; end_offset:gint):gboolean; cdecl;
+        remove_selection : function (text:PAtkText; selection_num:gint):gboolean; cdecl;
+        set_selection : function (text:PAtkText; selection_num:gint; start_offset:gint; end_offset:gint):gboolean; cdecl;
+        set_caret_offset : function (text:PAtkText; offset:gint):gboolean; cdecl;
+        text_changed : procedure (text:PAtkText; position:gint; length:gint); cdecl;
+        text_caret_moved : procedure (text:PAtkText; location:gint); cdecl;
+        text_selection_changed : procedure (text:PAtkText); cdecl;
+        pad1 : TAtkFunction;
+        pad2 : TAtkFunction;
+        pad3 : TAtkFunction;
+        pad4 : TAtkFunction;
+     end;
+
+{$ENDIF read_interface_types}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+
+function atk_text_attribute_register(name:Pgchar):TAtkTextAttribute; cdecl; external atklib;
+
+function ATK_TYPE_TEXT : GType;
+function ATK_IS_TEXT(obj: pointer) : boolean;
+function ATK_TEXT(obj: pointer) : PAtkText;
+function ATK_TEXT_GET_IFACE(obj: pointer) : PAtkTextIface;
+
+
+{
+   Additional AtkObject properties used by AtkText:
+      "accessible_text" (accessible text has changed)
+      "accessible_caret" (accessible text cursor position changed:
+                           editable text only)
+  }
+function atk_text_get_type:GType; cdecl; external atklib;
+function atk_text_get_text(text:PAtkText; start_offset:gint; end_offset:gint):Pgchar; cdecl; external atklib;
+function atk_text_get_character_at_offset(text:PAtkText; offset:gint):gunichar; cdecl; external atklib;
+function atk_text_get_text_after_offset(text:PAtkText; offset:gint; boundary_type:TAtkTextBoundary; start_offset:Pgint; end_offset:Pgint):Pgchar; cdecl; external atklib;
+function atk_text_get_text_at_offset(text:PAtkText; offset:gint; boundary_type:TAtkTextBoundary; start_offset:Pgint; end_offset:Pgint):Pgchar; cdecl; external atklib;
+function atk_text_get_text_before_offset(text:PAtkText; offset:gint; boundary_type:TAtkTextBoundary; start_offset:Pgint; end_offset:Pgint):Pgchar; cdecl; external atklib;
+function atk_text_get_caret_offset(text:PAtkText):gint; cdecl; external atklib;
+procedure atk_text_get_character_extents(text:PAtkText; offset:gint; x:Pgint; y:Pgint; width:Pgint;
+            height:Pgint; coords:TAtkCoordType); cdecl; external atklib;
+function atk_text_get_run_attributes(text:PAtkText; offset:gint; start_offset:Pgint; end_offset:Pgint):PAtkAttributeSet; cdecl; external atklib;
+function atk_text_get_default_attributes(text:PAtkText):PAtkAttributeSet; cdecl; external atklib;
+function atk_text_get_character_count(text:PAtkText):gint; cdecl; external atklib;
+function atk_text_get_offset_at_point(text:PAtkText; x:gint; y:gint; coords:TAtkCoordType):gint; cdecl; external atklib;
+function atk_text_get_n_selections(text:PAtkText):gint; cdecl; external atklib;
+function atk_text_get_selection(text:PAtkText; selection_num:gint; start_offset:Pgint; end_offset:Pgint):Pgchar; cdecl; external atklib;
+function atk_text_add_selection(text:PAtkText; start_offset:gint; end_offset:gint):gboolean; cdecl; external atklib;
+function atk_text_remove_selection(text:PAtkText; selection_num:gint):gboolean; cdecl; external atklib;
+function atk_text_set_selection(text:PAtkText; selection_num:gint; start_offset:gint; end_offset:gint):gboolean; cdecl; external atklib;
+function atk_text_set_caret_offset(text:PAtkText; offset:gint):gboolean; cdecl; external atklib;
+procedure atk_attribute_set_free(attrib_set:PAtkAttributeSet); cdecl; external atklib;
+function atk_text_attribute_get_name(attr:TAtkTextAttribute):Pgchar; cdecl; external atklib;
+function atk_text_attribute_for_name(name:Pgchar):TAtkTextAttribute; cdecl; external atklib;
+function atk_text_attribute_get_value(attr:TAtkTextAttribute; index:gint):Pgchar; cdecl; external atklib;
+{$ENDIF read_interface_rest}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_implementation}
+function ATK_TYPE_TEXT : GType;
+begin
+   ATK_TYPE_TEXT:=atk_text_get_type;
+end;
+
+function ATK_IS_TEXT(obj: pointer) : boolean;
+begin
+   ATK_IS_TEXT:=G_TYPE_CHECK_INSTANCE_TYPE(obj,ATK_TYPE_TEXT);
+end;
+
+function ATK_TEXT(obj: pointer) : PAtkText;
+begin
+   ATK_TEXT:=PAtkText(G_TYPE_CHECK_INSTANCE_CAST(obj,ATK_TYPE_TEXT));
+end;
+
+function ATK_TEXT_GET_IFACE(obj: pointer) : PAtkTextIface;
+begin
+   ATK_TEXT_GET_IFACE:=PAtkTextIface(G_TYPE_INSTANCE_GET_INTERFACE(obj,ATK_TYPE_TEXT));
+end;
+
+{$ENDIF read_implementation}
+

+ 175 - 0
packages/extra/gtk2/atk/atkutil.inc

@@ -0,0 +1,175 @@
+// included by atk.pp
+
+{$IFDEF read_forward_definitions}
+{
+  AtkCoordType:
+  @ATK_XY_SCREEN: specifies xy coordinates relative to the screen
+  @ATK_XY_WINDOW: specifies xy coordinates relative to the widgets
+   top-level window
+
+  Specifies how xy coordinates are to be interpreted. Used by functions such
+  as atk_component_get_position() and atk_text_get_character_extents()
+   }
+   PAtkCoordType = ^TAtkCoordType;
+   TAtkCoordType = (
+     ATK_XY_SCREEN,
+     ATK_XY_WINDOW
+   );
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_types}
+{
+   A focus tracker is a function which is called when an anObject
+   receives focus.
+  }
+   TAtkEventListener = procedure (para1:PAtkObject); cdecl;
+
+   TAtkEventListenerInitProc = procedure;
+   TAtkEventListenerInit = procedure (para1: TAtkEventListenerInitProc); cdecl;
+
+   PAtkKeyEventStruct = ^TAtkKeyEventStruct;
+   TAtkKeyEventStruct = record
+        _type : gint;
+        state : guint;
+        keyval : guint;
+        length : gint;
+        _string : Pgchar;
+        keycode : guint16;
+        timestamp : guint32;
+     end;
+   TAtkKeySnoopFunc = function (event:PAtkKeyEventStruct; func_data:gpointer):gint; cdecl;
+
+
+   PAtkKeyEventType = ^TAtkKeyEventType;
+   TAtkKeyEventType = (
+     ATK_KEY_EVENT_PRESS,
+     ATK_KEY_EVENT_RELEASE,
+     ATK_KEY_EVENT_LAST_DEFINED
+   );
+
+   PAtkUtil = ^TAtkUtil;
+   TAtkUtil = record
+        parent : TGObject;
+     end;
+
+   PAtkUtilClass = ^TAtkUtilClass;
+   TAtkUtilClass = record
+        parent : TGObjectClass;
+        add_global_event_listener : function (listener:TGSignalEmissionHook; event_type:Pgchar):guint; cdecl;
+        remove_global_event_listener : procedure (listener_id:guint); cdecl;
+        add_key_event_listener : function (listener:TAtkKeySnoopFunc; data:gpointer):guint; cdecl;
+        remove_key_event_listener : procedure (listener_id:guint); cdecl;
+        get_root : function :PAtkObject; cdecl;
+        get_toolkit_name : function :Pgchar; cdecl;
+        get_toolkit_version : function :Pgchar; cdecl;
+     end;
+
+
+
+{$ENDIF read_interface_types}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+function ATK_TYPE_UTIL : GType;
+function ATK_IS_UTIL(obj: pointer) : boolean;
+function ATK_UTIL(obj: pointer) : PAtkUtil;
+function ATK_UTIL_CLASS(klass: pointer) : PAtkUtilClass;
+function ATK_IS_UTIL_CLASS(klass: pointer) : boolean;
+function ATK_UTIL_GET_CLASS(obj: pointer) : PAtkUtilClass;
+
+
+function atk_util_get_type:GType; cdecl; external atklib;
+
+{
+   Adds the specified function to the list of functions to be called
+   when an anObject receives focus.
+  }
+
+function atk_add_focus_tracker(focus_tracker:TAtkEventListener):guint; cdecl; external atklib;
+{
+   Removes the specified focus tracker from the list of function
+   to be called when any anObject receives focus
+  }
+procedure atk_remove_focus_tracker(tracker_id:guint); cdecl; external atklib;
+{
+   Specifies the function to be called for focus tracker initialization.
+   removal. This function should be called by an implementation of the
+   ATK interface if any specific work needs to be done to enable
+   focus tracking.
+  }
+procedure atk_focus_tracker_init(add_function:TAtkEventListenerInit); cdecl; external atklib;
+{
+   Cause the focus tracker functions which have been specified to be
+   executed for the anObject.
+  }
+procedure atk_focus_tracker_notify(anObject:PAtkObject); cdecl; external atklib;
+{
+   Adds the specified function to the list of functions to be called
+   when an event of type event_type occurs.
+  }
+function atk_add_global_event_listener(listener:TGSignalEmissionHook; event_type:Pgchar):guint; cdecl; external atklib;
+{
+   Removes the specified event listener
+  }
+procedure atk_remove_global_event_listener(listener_id:guint); cdecl; external atklib;
+{
+   Adds the specified function to the list of functions to be called
+   when an keyboard event occurs.
+  }
+function atk_add_key_event_listener(listener:TAtkKeySnoopFunc; data:gpointer):guint; cdecl; external atklib;
+{
+   Removes the specified event listener
+  }
+procedure atk_remove_key_event_listener(listener_id:guint); cdecl; external atklib;
+{
+   Returns the root accessible container for the current application.
+  }
+function atk_get_root:PAtkObject; cdecl; external atklib;
+{
+   Returns name string for the GUI toolkit.
+  }
+function atk_get_toolkit_name:Pgchar; cdecl; external atklib;
+{
+   Returns version string for the GUI toolkit.
+  }
+function atk_get_toolkit_version:Pgchar; cdecl; external atklib;
+{$ENDIF read_interface_rest}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_implementation}
+function ATK_TYPE_UTIL : GType;
+begin
+   ATK_TYPE_UTIL:=atk_util_get_type;
+end;
+
+function ATK_IS_UTIL(obj: pointer) : boolean;
+begin
+   ATK_IS_UTIL:=G_TYPE_CHECK_INSTANCE_TYPE(obj,ATK_TYPE_UTIL);
+end;
+
+function ATK_UTIL(obj: pointer) : PAtkUtil;
+begin
+   ATK_UTIL:=PAtkUtil(G_TYPE_CHECK_INSTANCE_CAST(obj,ATK_TYPE_UTIL));
+end;
+
+function ATK_UTIL_CLASS(klass: pointer) : PAtkUtilClass;
+begin
+   ATK_UTIL_CLASS:=PAtkUtilClass(G_TYPE_CHECK_CLASS_CAST(klass,ATK_TYPE_UTIL));
+end;
+
+function ATK_IS_UTIL_CLASS(klass: pointer) : boolean;
+begin
+   ATK_IS_UTIL_CLASS:=G_TYPE_CHECK_CLASS_TYPE(klass,ATK_TYPE_UTIL);
+end;
+
+function ATK_UTIL_GET_CLASS(obj: pointer) : PAtkUtilClass;
+begin
+   ATK_UTIL_GET_CLASS:=PAtkUtilClass(G_TYPE_INSTANCE_GET_CLASS(obj,ATK_TYPE_UTIL));
+end;
+
+{$ENDIF read_implementation}
+

+ 76 - 0
packages/extra/gtk2/atk/atkvalue.inc

@@ -0,0 +1,76 @@
+// included by atk.pp
+
+{
+   The AtkValue interface should be supported by any anObject that
+   supports a numerical value (e.g., a scroll bar). This interface
+   provides the standard mechanism for an assistive technology to
+   determine and set the numerical value as well as get the minimum
+   and maximum values.
+  }
+
+{$IFDEF read_forward_definitions}
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_types}
+   PAtkValueIface = ^TAtkValueIface;
+   TAtkValueIface = record
+        parent : TGTypeInterface;
+        get_current_value : procedure (obj:PAtkValue; value:PGValue); cdecl;
+        get_maximum_value : procedure (obj:PAtkValue; value:PGValue); cdecl;
+        get_minimum_value : procedure (obj:PAtkValue; value:PGValue); cdecl;
+        set_current_value : function (obj:PAtkValue; value:PGValue):gboolean; cdecl;
+        pad1 : TAtkFunction;
+        pad2 : TAtkFunction;
+     end;
+
+{$ENDIF read_interface_types}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+function ATK_TYPE_VALUE : GType;
+function ATK_IS_VALUE(obj: pointer) : boolean;
+function ATK_VALUE(obj: pointer) : PAtkValue;
+function ATK_VALUE_GET_IFACE(obj: pointer) : PAtkValueIface;
+
+
+function atk_value_get_type:GType; cdecl; external atklib;
+procedure atk_value_get_current_value(obj:PAtkValue; value:PGValue); cdecl; external atklib;
+procedure atk_value_get_maximum_value(obj:PAtkValue; value:PGValue); cdecl; external atklib;
+procedure atk_value_get_minimum_value(obj:PAtkValue; value:PGValue); cdecl; external atklib;
+function atk_value_set_current_value(obj:PAtkValue; value:PGValue):gboolean; cdecl; external atklib;
+{
+   Additional GObject properties exported by GaccessibleValue:
+      "accessible_value"
+         (the accessible value has changed)
+  }
+
+{$ENDIF read_interface_rest}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_implementation}
+function ATK_TYPE_VALUE : GType;
+begin
+   ATK_TYPE_VALUE:=atk_value_get_type;
+end;
+
+function ATK_IS_VALUE(obj: pointer) : boolean;
+begin
+   ATK_IS_VALUE:=G_TYPE_CHECK_INSTANCE_TYPE(obj,ATK_TYPE_VALUE);
+end;
+
+function ATK_VALUE(obj: pointer) : PAtkValue;
+begin
+   ATK_VALUE:=PAtkValue(G_TYPE_CHECK_INSTANCE_CAST(obj,ATK_TYPE_VALUE));
+end;
+
+function ATK_VALUE_GET_IFACE(obj: pointer) : PAtkValueIface;
+begin
+   ATK_VALUE_GET_IFACE:=PAtkValueIface(G_TYPE_INSTANCE_GET_INTERFACE(obj,ATK_TYPE_VALUE));
+end;
+
+{$ENDIF read_implementation}
+

+ 33 - 0
packages/extra/gtk2/buildgtk2.pp

@@ -0,0 +1,33 @@
+{
+   Dummy unit to compile everything in one go
+
+   This unit is part of gtk2forpascal.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2 of the License, or (at your option) any later version.
+
+   This library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
+}
+unit buildgtk2; // keep unit name lowercase for kylix
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  gtk2, libglade2;
+
+implementation
+
+end.
+

+ 2082 - 0
packages/extra/gtk2/examples/Makefile

@@ -0,0 +1,2082 @@
+#
+# Don't edit, this file is generated by FPCMake Version 1.9.8 [2005/01/11]
+#
+default: all
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-sunos i386-qnx i386-netware i386-openbsd i386-wdosx i386-emx i386-watcom i386-netwlibc m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos powerpc-linux powerpc-netbsd powerpc-macos powerpc-darwin powerpc-morphos sparc-linux sparc-netbsd sparc-sunos x86_64-linux x86_64-freebsd arm-linux
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) sunos qnx
+LIMIT83fs = go32v2 os2 emx watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override DEFAULT_FPCDIR=../../../..
+ifndef FPC
+ifdef PP
+FPC=$(PP)
+endif
+endif
+ifndef FPC
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+FPC:=$(shell $(FPCPROG) -PB)
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+else
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+FOUNDFPC:=$(strip $(wildcard $(FPC)))
+ifeq ($(FOUNDFPC),)
+FOUNDFPC=$(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))
+ifeq ($(FOUNDFPC),)
+$(error Compiler $(FPC) not found)
+endif
+endif
+ifndef FPC_COMPILERINFO
+FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
+endif
+ifndef FPC_VERSION
+FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
+endif
+export FPC FPC_VERSION FPC_COMPILERINFO
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifndef CPU_TARGET
+ifdef CPU_TARGET_DEFAULT
+CPU_TARGET=$(CPU_TARGET_DEFAULT)
+endif
+endif
+ifndef OS_TARGET
+ifdef OS_TARGET_DEFAULT
+OS_TARGET=$(OS_TARGET_DEFAULT)
+endif
+endif
+ifneq ($(words $(FPC_COMPILERINFO)),5)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSO)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTO)
+endif
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO))
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO))
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO))
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
+endif
+FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+SOURCESUFFIX=$(OS_SOURCE)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+SOURCESUFFIX=$(FULL_SOURCE)
+endif
+ifneq ($(FULL_TARGET),$(FULL_SOURCE))
+CROSSCOMPILE=1
+endif
+ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
+ifeq ($(findstring $(FULL_TARGET),$(MAKEFILETARGETS)),)
+$(error The Makefile doesn't support target $(FULL_TARGET), please run fpcmake first)
+endif
+endif
+ifneq ($(findstring $(OS_TARGET),$(BSDs)),)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),linux)
+linuxHier=1
+endif
+export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+ifdef FPCDIR
+override FPCDIR:=$(subst \,/,$(FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+else
+override FPCDIR=wrong
+endif
+ifdef DEFAULT_FPCDIR
+ifeq ($(FPCDIR),wrong)
+override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+endif
+endif
+ifeq ($(FPCDIR),wrong)
+ifdef inUnix
+override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
+endif
+else
+override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(BASEDIR)
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=c:/pp
+endif
+endif
+endif
+endif
+endif
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(TARGETSUFFIX))
+endif
+ifndef BINUTILSPREFIX
+ifndef CROSSBINDIR
+ifdef CROSSCOMPILE
+BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)-
+endif
+endif
+endif
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX))
+ifeq ($(UNITSDIR),)
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
+ifeq ($(FULL_TARGET),i386-linux)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),i386-sunos)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),sparc-sunos)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override TARGET_DIRS+=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+endif
+override INSTALL_FPCPACKAGE=y
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+ifeq ($(OS_SOURCE),linux)
+ifndef GCCLIBDIR
+ifeq ($(CPU_TARGET),i386)
+ifneq ($(findstring x86_64,$(shell uname -a)),)
+ifeq ($(BINUTILSPREFIX),)
+GCCLIBDIR:=$(shell dirname `gcc -m32 -print-libgcc-file-name`)
+endif
+endif
+endif
+endif
+ifndef GCCLIBDIR
+CROSSGCC=$(strip $(wildcard $(addsuffix /$(BINUTILSPREFIX)gcc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(CROSSGCC),)
+GCCLIBDIR:=$(shell dirname `$(CROSSGCC) -print-libgcc-file-name`)
+endif
+endif
+ifndef OTHERLIBDIR
+OTHERLIBDIR:=$(shell grep -v "^\#" /etc/ld.so.conf | awk '{ ORS=" "; print $1 }')
+endif
+endif
+ifdef inUnix
+ifeq ($(OS_SOURCE),netbsd)
+OTHERLIBDIR+=/usr/pkg/lib
+endif
+export GCCLIBDIR OTHERLIB
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+STATICLIBPREFIX=libp
+RSTEXT=.rst
+ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),go32v1)
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+OEXT=.obj
+ASMEXT=.asm
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),emx)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=emx
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),morphos)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=mos
+endif
+ifeq ($(OS_TARGET),atari)
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),sunos)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+ifeq ($(OS_TARGET),darwin)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+endif
+else
+ifeq ($(OS_TARGET),go32v1)
+PPUEXT=.pp1
+OEXT=.o1
+ASMEXT=.s1
+SMARTEXT=.sl1
+STATICLIBEXT=.a1
+SHAREDLIBEXT=.so1
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+PPUEXT=.ppw
+OEXT=.ow
+ASMEXT=.sw
+SMARTEXT=.slw
+STATICLIBEXT=.aw
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+PPUEXT=.ppo
+ASMEXT=.so2
+OEXT=.oo2
+AOUTEXT=.out
+SMARTEXT=.sl2
+STATICLIBPREFIX=
+STATICLIBEXT=.ao2
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+PPUEXT=.ppu
+ASMEXT=.asm
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),atari)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),sunos)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+FPCMADE=fpcmade.$(SHORTSUFFIX)
+ZIPSUFFIX=$(SHORTSUFFIX)
+ZIPCROSSPREFIX=
+ZIPSOURCESUFFIX=src
+ZIPEXAMPLESUFFIX=exm
+else
+FPCMADE=fpcmade.$(TARGETSUFFIX)
+ZIPSOURCESUFFIX=.source
+ZIPEXAMPLESUFFIX=.examples
+ifdef CROSSCOMPILE
+ZIPSUFFIX=.$(SOURCESUFFIX)
+ZIPCROSSPREFIX=$(TARGETSUFFIX)-
+else
+ZIPSUFFIX=.$(TARGETSUFFIX)
+ZIPCROSSPREFIX=
+endif
+endif
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO= __missing_command_ECHO
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+ifndef DATE
+DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE= __missing_command_DATE
+else
+DATE:=$(firstword $(DATE))
+endif
+else
+DATE:=$(firstword $(DATE))
+endif
+endif
+export DATE
+ifndef GINSTALL
+GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL= __missing_command_GINSTALL
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+endif
+export GINSTALL
+ifndef CPPROG
+CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(CPPROG),)
+CPPROG= __missing_command_CPPROG
+else
+CPPROG:=$(firstword $(CPPROG))
+endif
+endif
+export CPPROG
+ifndef RMPROG
+RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMPROG),)
+RMPROG= __missing_command_RMPROG
+else
+RMPROG:=$(firstword $(RMPROG))
+endif
+endif
+export RMPROG
+ifndef MVPROG
+MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MVPROG),)
+MVPROG= __missing_command_MVPROG
+else
+MVPROG:=$(firstword $(MVPROG))
+endif
+endif
+export MVPROG
+ifndef MKDIRPROG
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG= __missing_command_MKDIRPROG
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+endif
+export MKDIRPROG
+ifndef ECHOREDIR
+ifndef inUnix
+ECHOREDIR=echo
+else
+ECHOREDIR=$(ECHO)
+endif
+endif
+ifndef COPY
+COPY:=$(CPPROG) -fp
+endif
+ifndef COPYTREE
+COPYTREE:=$(CPPROG) -Rfp
+endif
+ifndef MKDIRTREE
+MKDIRTREE:=$(MKDIRPROG) -p
+endif
+ifndef MOVE
+MOVE:=$(MVPROG) -f
+endif
+ifndef DEL
+DEL:=$(RMPROG) -f
+endif
+ifndef DELTREE
+DELTREE:=$(RMPROG) -rf
+endif
+ifndef INSTALL
+ifdef inUnix
+INSTALL:=$(GINSTALL) -c -m 644
+else
+INSTALL:=$(COPY)
+endif
+endif
+ifndef INSTALLEXE
+ifdef inUnix
+INSTALLEXE:=$(GINSTALL) -c -m 755
+else
+INSTALLEXE:=$(COPY)
+endif
+endif
+ifndef MKDIR
+MKDIR:=$(GINSTALL) -m 755 -d
+endif
+export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
+ifndef PPUMOVE
+PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(PPUMOVE),)
+PPUMOVE= __missing_command_PPUMOVE
+else
+PPUMOVE:=$(firstword $(PPUMOVE))
+endif
+endif
+export PPUMOVE
+ifndef FPCMAKE
+FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(FPCMAKE),)
+FPCMAKE= __missing_command_FPCMAKE
+else
+FPCMAKE:=$(firstword $(FPCMAKE))
+endif
+endif
+export FPCMAKE
+ifndef ZIPPROG
+ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ZIPPROG),)
+ZIPPROG= __missing_command_ZIPPROG
+else
+ZIPPROG:=$(firstword $(ZIPPROG))
+endif
+endif
+export ZIPPROG
+ifndef TARPROG
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG= __missing_command_TARPROG
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+ASNAME=$(BINUTILSPREFIX)as
+LDNAME=$(BINUTILSPREFIX)ld
+ARNAME=$(BINUTILSPREFIX)ar
+RCNAME=$(BINUTILSPREFIX)rc
+ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),win32)
+ifeq ($(CROSSBINDIR),)
+ASNAME=asw
+LDNAME=ldw
+ARNAME=arw
+endif
+endif
+endif
+ifndef ASPROG
+ifdef CROSSBINDIR
+ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
+else
+ASPROG=$(ASNAME)
+endif
+endif
+ifndef LDPROG
+ifdef CROSSBINDIR
+LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT)
+else
+LDPROG=$(LDNAME)
+endif
+endif
+ifndef RCPROG
+ifdef CROSSBINDIR
+RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT)
+else
+RCPROG=$(RCNAME)
+endif
+endif
+ifndef ARPROG
+ifdef CROSSBINDIR
+ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT)
+else
+ARPROG=$(ARNAME)
+endif
+endif
+AS=$(ASPROG)
+LD=$(LDPROG)
+RC=$(RCPROG)
+AR=$(ARPROG)
+PPAS=ppas$(SRCBATCHEXT)
+ifdef inUnix
+LDCONFIG=ldconfig
+else
+LDCONFIG=
+endif
+ifdef DATE
+DATESTR:=$(shell $(DATE) +%Y%m%d)
+else
+DATESTR=
+endif
+ifndef UPXPROG
+ifeq ($(OS_TARGET),go32v2)
+UPXPROG:=1
+endif
+ifeq ($(OS_TARGET),win32)
+UPXPROG:=1
+endif
+ifdef UPXPROG
+UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(UPXPROG),)
+UPXPROG=
+else
+UPXPROG:=$(firstword $(UPXPROG))
+endif
+else
+UPXPROG=
+endif
+endif
+export UPXPROG
+ZIPOPT=-9
+ZIPEXT=.zip
+ifeq ($(USETAR),bz2)
+TAROPT=vI
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+override REQUIRE_PACKAGES=gtk2
+ifeq ($(FULL_TARGET),i386-linux)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),i386-sunos)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),sparc-sunos)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+REQUIRE_PACKAGES_GTK2=1
+endif
+ifdef REQUIRE_PACKAGES_GTK2
+PACKAGEDIR_GTK2:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /gtk2/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_GTK2),)
+ifneq ($(wildcard $(PACKAGEDIR_GTK2)/units/$(TARGETSUFFIX)),)
+UNITDIR_GTK2=$(PACKAGEDIR_GTK2)/units/$(TARGETSUFFIX)
+else
+UNITDIR_GTK2=$(PACKAGEDIR_GTK2)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_GTK2)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_GTK2) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_GTK2)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_GTK2=
+UNITDIR_GTK2:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /gtk2/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_GTK2),)
+UNITDIR_GTK2:=$(firstword $(UNITDIR_GTK2))
+else
+UNITDIR_GTK2=
+endif
+endif
+ifdef UNITDIR_GTK2
+override COMPILER_UNITDIR+=$(UNITDIR_GTK2)
+endif
+endif
+ifndef NOCPUDEF
+override FPCOPTDEF=$(CPU_TARGET)
+endif
+ifneq ($(OS_TARGET),$(OS_SOURCE))
+override FPCOPT+=-T$(OS_TARGET)
+endif
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+endif
+ifndef CROSSBOOTSTRAP
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-XP$(BINUTILSPREFIX) -Xc
+endif
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-Xr$(RLINKPATH)
+endif
+endif
+ifdef UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
+endif
+ifdef LIBDIR
+override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
+endif
+ifdef OBJDIR
+override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
+endif
+ifdef INCDIR
+override FPCOPT+=$(addprefix -Fi,$(INCDIR))
+endif
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+ifdef DEBUG
+override FPCOPT+=-gl
+override FPCOPTDEF+=DEBUG
+endif
+ifdef RELEASE
+ifeq ($(CPU_TARGET),i386)
+FPCCPUOPT:=-OG2p3
+else
+ifeq ($(CPU_TARGET),powerpc)
+FPCCPUOPT:=-O1
+else
+FPCCPUOPT:=
+endif
+endif
+override FPCOPT+=-Xs $(FPCCPUOPT) -n
+override FPCOPTDEF+=RELEASE
+endif
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+ifeq ($(CPU_TARGET),i386)
+override FPCOPT+=-OG2p3
+endif
+endif
+ifdef VERBOSE
+override FPCOPT+=-vwni
+endif
+ifdef COMPILER_OPTIONS
+override FPCOPT+=$(COMPILER_OPTIONS)
+endif
+ifdef COMPILER_UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR))
+endif
+ifdef COMPILER_LIBRARYDIR
+override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR))
+endif
+ifdef COMPILER_OBJECTDIR
+override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR))
+endif
+ifdef COMPILER_INCLUDEDIR
+override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR))
+endif
+ifdef CROSSBINDIR
+override FPCOPT+=-FD$(CROSSBINDIR)
+endif
+ifdef COMPILER_TARGETDIR
+override FPCOPT+=-FE$(COMPILER_TARGETDIR)
+ifeq ($(COMPILER_TARGETDIR),.)
+override TARGETDIRPREFIX=
+else
+override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/
+endif
+endif
+ifdef COMPILER_UNITTARGETDIR
+override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR)
+ifeq ($(COMPILER_UNITTARGETDIR),.)
+override UNITTARGETDIRPREFIX=
+else
+override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/
+endif
+else
+ifdef COMPILER_TARGETDIR
+override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
+override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
+endif
+endif
+ifeq ($(OS_TARGET),linux)
+ifeq ($(FPC_VERSION),1.0.6)
+override FPCOPTDEF+=HASUNIX
+endif
+endif
+ifdef GCCLIBDIR
+override FPCOPT+=-Fl$(GCCLIBDIR)
+endif
+ifdef OTHERLIBDIR
+override FPCOPT+=$(addprefix -Fl,$(OTHERLIBDIR))
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+EXECPPAS:=@$(PPAS)
+endif
+endif
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+endif
+ifdef CLEAN_UNITS
+override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
+endif
+ifdef CLEANPPUFILES
+override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
+ifdef DEBUGSYMEXT
+override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES))
+endif
+override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
+override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES)))
+endif
+fpc_clean: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+endif
+ifdef LIB_NAME
+	-$(DEL) $(LIB_NAME) $(LIB_FULLNAME)
+endif
+	-$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT)
+fpc_cleanall: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef COMPILER_UNITTARGETDIR
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+endif
+	-$(DELTREE) units
+	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+ifneq ($(PPUEXT),.ppu)
+	-$(DEL) *.o *.ppu *.a
+endif
+	-$(DELTREE) *$(SMARTEXT)
+	-$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *_ppas$(BATCHEXT)
+ifdef AOUTEXT
+	-$(DEL) *$(AOUTEXT)
+endif
+ifdef DEBUGSYMEXT
+	-$(DEL) *$(DEBUGSYMEXT)
+endif
+fpc_distclean: cleanall
+.PHONY: fpc_baseinfo
+override INFORULES+=fpc_baseinfo
+fpc_baseinfo:
+	@$(ECHO)
+	@$(ECHO)  == Package info ==
+	@$(ECHO)  Package Name..... $(PACKAGE_NAME)
+	@$(ECHO)  Package Version.. $(PACKAGE_VERSION)
+	@$(ECHO)
+	@$(ECHO)  == Configuration info ==
+	@$(ECHO)
+	@$(ECHO)  FPC.......... $(FPC)
+	@$(ECHO)  FPC Version.. $(FPC_VERSION)
+	@$(ECHO)  Source CPU... $(CPU_SOURCE)
+	@$(ECHO)  Target CPU... $(CPU_TARGET)
+	@$(ECHO)  Source OS.... $(OS_SOURCE)
+	@$(ECHO)  Target OS.... $(OS_TARGET)
+	@$(ECHO)  Full Source.. $(FULL_SOURCE)
+	@$(ECHO)  Full Target.. $(FULL_TARGET)
+	@$(ECHO)  SourceSuffix. $(SOURCESUFFIX)
+	@$(ECHO)  TargetSuffix. $(TARGETSUFFIX)
+	@$(ECHO)
+	@$(ECHO)  == Directory info ==
+	@$(ECHO)
+	@$(ECHO)  Required pkgs... $(REQUIRE_PACKAGES)
+	@$(ECHO)
+	@$(ECHO)  Basedir......... $(BASEDIR)
+	@$(ECHO)  FPCDir.......... $(FPCDIR)
+	@$(ECHO)  CrossBinDir..... $(CROSSBINDIR)
+	@$(ECHO)  UnitsDir........ $(UNITSDIR)
+	@$(ECHO)  PackagesDir..... $(PACKAGESDIR)
+	@$(ECHO)
+	@$(ECHO)  GCC library..... $(GCCLIBDIR)
+	@$(ECHO)  Other library... $(OTHERLIBDIR)
+	@$(ECHO)
+	@$(ECHO)  == Tools info ==
+	@$(ECHO)
+	@$(ECHO)  As........ $(AS)
+	@$(ECHO)  Ld........ $(LD)
+	@$(ECHO)  Ar........ $(AR)
+	@$(ECHO)  Rc........ $(RC)
+	@$(ECHO)
+	@$(ECHO)  Mv........ $(MVPROG)
+	@$(ECHO)  Cp........ $(CPPROG)
+	@$(ECHO)  Rm........ $(RMPROG)
+	@$(ECHO)  GInstall.. $(GINSTALL)
+	@$(ECHO)  Echo...... $(ECHO)
+	@$(ECHO)  Shell..... $(SHELL)
+	@$(ECHO)  Date...... $(DATE)
+	@$(ECHO)  FPCMake... $(FPCMAKE)
+	@$(ECHO)  PPUMove... $(PPUMOVE)
+	@$(ECHO)  Upx....... $(UPXPROG)
+	@$(ECHO)  Zip....... $(ZIPPROG)
+	@$(ECHO)
+	@$(ECHO)  == Object info ==
+	@$(ECHO)
+	@$(ECHO)  Target Loaders........ $(TARGET_LOADERS)
+	@$(ECHO)  Target Units.......... $(TARGET_UNITS)
+	@$(ECHO)  Target Implicit Units. $(TARGET_IMPLICITUNITS)
+	@$(ECHO)  Target Programs....... $(TARGET_PROGRAMS)
+	@$(ECHO)  Target Dirs........... $(TARGET_DIRS)
+	@$(ECHO)  Target Examples....... $(TARGET_EXAMPLES)
+	@$(ECHO)  Target ExampleDirs.... $(TARGET_EXAMPLEDIRS)
+	@$(ECHO)
+	@$(ECHO)  Clean Units......... $(CLEAN_UNITS)
+	@$(ECHO)  Clean Files......... $(CLEAN_FILES)
+	@$(ECHO)
+	@$(ECHO)  Install Units....... $(INSTALL_UNITS)
+	@$(ECHO)  Install Files....... $(INSTALL_FILES)
+	@$(ECHO)
+	@$(ECHO)  == Install info ==
+	@$(ECHO)
+	@$(ECHO)  DateStr.............. $(DATESTR)
+	@$(ECHO)  ZipName.............. $(ZIPNAME)
+	@$(ECHO)  ZipPrefix............ $(ZIPPREFIX)
+	@$(ECHO)  ZipCrossPrefix....... $(ZIPCROSSPREFIX)
+	@$(ECHO)  ZipSuffix............ $(ZIPSUFFIX)
+	@$(ECHO)  FullZipName.......... $(FULLZIPNAME)
+	@$(ECHO)  Install FPC Package.. $(INSTALL_FPCPACKAGE)
+	@$(ECHO)
+	@$(ECHO)  Install base dir..... $(INSTALL_BASEDIR)
+	@$(ECHO)  Install binary dir... $(INSTALL_BINDIR)
+	@$(ECHO)  Install library dir.. $(INSTALL_LIBDIR)
+	@$(ECHO)  Install units dir.... $(INSTALL_UNITDIR)
+	@$(ECHO)  Install source dir... $(INSTALL_SOURCEDIR)
+	@$(ECHO)  Install doc dir...... $(INSTALL_DOCDIR)
+	@$(ECHO)  Install example dir.. $(INSTALL_EXAMPLEDIR)
+	@$(ECHO)  Install data dir..... $(INSTALL_DATADIR)
+	@$(ECHO)
+	@$(ECHO)  Dist destination dir. $(DIST_DESTDIR)
+	@$(ECHO)  Dist zip name........ $(DIST_ZIPNAME)
+	@$(ECHO)
+.PHONY: fpc_info
+fpc_info: $(INFORULES)
+.PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2 \
+	fpc_makefile_dirs
+fpc_makefile:
+	$(FPCMAKE) -w -T$(OS_TARGET) Makefile.fpc
+fpc_makefile_sub1:
+ifdef TARGET_DIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_DIRS))
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS))
+endif
+fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
+fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
+fpc_makefiles: fpc_makefile fpc_makefile_dirs
+ifeq ($(FULL_TARGET),i386-linux)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),i386-sunos)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),sparc-sunos)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+TARGET_DIRS_HELLOWORLD=1
+TARGET_DIRS_HELLOWORLD2=1
+TARGET_DIRS_GTK_DEMO=1
+TARGET_DIRS_GETTINGSTARTED=1
+TARGET_DIRS_PLUGINS=1
+TARGET_DIRS_SCRIBBLE_SIMPLE=1
+endif
+ifdef TARGET_DIRS_HELLOWORLD
+helloworld_all:
+	$(MAKE) -C helloworld all
+helloworld_debug:
+	$(MAKE) -C helloworld debug
+helloworld_smart:
+	$(MAKE) -C helloworld smart
+helloworld_release:
+	$(MAKE) -C helloworld release
+helloworld_units:
+	$(MAKE) -C helloworld units
+helloworld_examples:
+	$(MAKE) -C helloworld examples
+helloworld_shared:
+	$(MAKE) -C helloworld shared
+helloworld_install:
+	$(MAKE) -C helloworld install
+helloworld_sourceinstall:
+	$(MAKE) -C helloworld sourceinstall
+helloworld_exampleinstall:
+	$(MAKE) -C helloworld exampleinstall
+helloworld_distinstall:
+	$(MAKE) -C helloworld distinstall
+helloworld_zipinstall:
+	$(MAKE) -C helloworld zipinstall
+helloworld_zipsourceinstall:
+	$(MAKE) -C helloworld zipsourceinstall
+helloworld_zipexampleinstall:
+	$(MAKE) -C helloworld zipexampleinstall
+helloworld_zipdistinstall:
+	$(MAKE) -C helloworld zipdistinstall
+helloworld_clean:
+	$(MAKE) -C helloworld clean
+helloworld_distclean:
+	$(MAKE) -C helloworld distclean
+helloworld_cleanall:
+	$(MAKE) -C helloworld cleanall
+helloworld_info:
+	$(MAKE) -C helloworld info
+helloworld_makefiles:
+	$(MAKE) -C helloworld makefiles
+helloworld:
+	$(MAKE) -C helloworld all
+.PHONY: helloworld_all helloworld_debug helloworld_smart helloworld_release helloworld_units helloworld_examples helloworld_shared helloworld_install helloworld_sourceinstall helloworld_exampleinstall helloworld_distinstall helloworld_zipinstall helloworld_zipsourceinstall helloworld_zipexampleinstall helloworld_zipdistinstall helloworld_clean helloworld_distclean helloworld_cleanall helloworld_info helloworld_makefiles helloworld
+endif
+ifdef TARGET_DIRS_HELLOWORLD2
+helloworld2_all:
+	$(MAKE) -C helloworld2 all
+helloworld2_debug:
+	$(MAKE) -C helloworld2 debug
+helloworld2_smart:
+	$(MAKE) -C helloworld2 smart
+helloworld2_release:
+	$(MAKE) -C helloworld2 release
+helloworld2_units:
+	$(MAKE) -C helloworld2 units
+helloworld2_examples:
+	$(MAKE) -C helloworld2 examples
+helloworld2_shared:
+	$(MAKE) -C helloworld2 shared
+helloworld2_install:
+	$(MAKE) -C helloworld2 install
+helloworld2_sourceinstall:
+	$(MAKE) -C helloworld2 sourceinstall
+helloworld2_exampleinstall:
+	$(MAKE) -C helloworld2 exampleinstall
+helloworld2_distinstall:
+	$(MAKE) -C helloworld2 distinstall
+helloworld2_zipinstall:
+	$(MAKE) -C helloworld2 zipinstall
+helloworld2_zipsourceinstall:
+	$(MAKE) -C helloworld2 zipsourceinstall
+helloworld2_zipexampleinstall:
+	$(MAKE) -C helloworld2 zipexampleinstall
+helloworld2_zipdistinstall:
+	$(MAKE) -C helloworld2 zipdistinstall
+helloworld2_clean:
+	$(MAKE) -C helloworld2 clean
+helloworld2_distclean:
+	$(MAKE) -C helloworld2 distclean
+helloworld2_cleanall:
+	$(MAKE) -C helloworld2 cleanall
+helloworld2_info:
+	$(MAKE) -C helloworld2 info
+helloworld2_makefiles:
+	$(MAKE) -C helloworld2 makefiles
+helloworld2:
+	$(MAKE) -C helloworld2 all
+.PHONY: helloworld2_all helloworld2_debug helloworld2_smart helloworld2_release helloworld2_units helloworld2_examples helloworld2_shared helloworld2_install helloworld2_sourceinstall helloworld2_exampleinstall helloworld2_distinstall helloworld2_zipinstall helloworld2_zipsourceinstall helloworld2_zipexampleinstall helloworld2_zipdistinstall helloworld2_clean helloworld2_distclean helloworld2_cleanall helloworld2_info helloworld2_makefiles helloworld2
+endif
+ifdef TARGET_DIRS_GTK_DEMO
+gtk_demo_all:
+	$(MAKE) -C gtk_demo all
+gtk_demo_debug:
+	$(MAKE) -C gtk_demo debug
+gtk_demo_smart:
+	$(MAKE) -C gtk_demo smart
+gtk_demo_release:
+	$(MAKE) -C gtk_demo release
+gtk_demo_units:
+	$(MAKE) -C gtk_demo units
+gtk_demo_examples:
+	$(MAKE) -C gtk_demo examples
+gtk_demo_shared:
+	$(MAKE) -C gtk_demo shared
+gtk_demo_install:
+	$(MAKE) -C gtk_demo install
+gtk_demo_sourceinstall:
+	$(MAKE) -C gtk_demo sourceinstall
+gtk_demo_exampleinstall:
+	$(MAKE) -C gtk_demo exampleinstall
+gtk_demo_distinstall:
+	$(MAKE) -C gtk_demo distinstall
+gtk_demo_zipinstall:
+	$(MAKE) -C gtk_demo zipinstall
+gtk_demo_zipsourceinstall:
+	$(MAKE) -C gtk_demo zipsourceinstall
+gtk_demo_zipexampleinstall:
+	$(MAKE) -C gtk_demo zipexampleinstall
+gtk_demo_zipdistinstall:
+	$(MAKE) -C gtk_demo zipdistinstall
+gtk_demo_clean:
+	$(MAKE) -C gtk_demo clean
+gtk_demo_distclean:
+	$(MAKE) -C gtk_demo distclean
+gtk_demo_cleanall:
+	$(MAKE) -C gtk_demo cleanall
+gtk_demo_info:
+	$(MAKE) -C gtk_demo info
+gtk_demo_makefiles:
+	$(MAKE) -C gtk_demo makefiles
+gtk_demo:
+	$(MAKE) -C gtk_demo all
+.PHONY: gtk_demo_all gtk_demo_debug gtk_demo_smart gtk_demo_release gtk_demo_units gtk_demo_examples gtk_demo_shared gtk_demo_install gtk_demo_sourceinstall gtk_demo_exampleinstall gtk_demo_distinstall gtk_demo_zipinstall gtk_demo_zipsourceinstall gtk_demo_zipexampleinstall gtk_demo_zipdistinstall gtk_demo_clean gtk_demo_distclean gtk_demo_cleanall gtk_demo_info gtk_demo_makefiles gtk_demo
+endif
+ifdef TARGET_DIRS_GETTINGSTARTED
+gettingstarted_all:
+	$(MAKE) -C gettingstarted all
+gettingstarted_debug:
+	$(MAKE) -C gettingstarted debug
+gettingstarted_smart:
+	$(MAKE) -C gettingstarted smart
+gettingstarted_release:
+	$(MAKE) -C gettingstarted release
+gettingstarted_units:
+	$(MAKE) -C gettingstarted units
+gettingstarted_examples:
+	$(MAKE) -C gettingstarted examples
+gettingstarted_shared:
+	$(MAKE) -C gettingstarted shared
+gettingstarted_install:
+	$(MAKE) -C gettingstarted install
+gettingstarted_sourceinstall:
+	$(MAKE) -C gettingstarted sourceinstall
+gettingstarted_exampleinstall:
+	$(MAKE) -C gettingstarted exampleinstall
+gettingstarted_distinstall:
+	$(MAKE) -C gettingstarted distinstall
+gettingstarted_zipinstall:
+	$(MAKE) -C gettingstarted zipinstall
+gettingstarted_zipsourceinstall:
+	$(MAKE) -C gettingstarted zipsourceinstall
+gettingstarted_zipexampleinstall:
+	$(MAKE) -C gettingstarted zipexampleinstall
+gettingstarted_zipdistinstall:
+	$(MAKE) -C gettingstarted zipdistinstall
+gettingstarted_clean:
+	$(MAKE) -C gettingstarted clean
+gettingstarted_distclean:
+	$(MAKE) -C gettingstarted distclean
+gettingstarted_cleanall:
+	$(MAKE) -C gettingstarted cleanall
+gettingstarted_info:
+	$(MAKE) -C gettingstarted info
+gettingstarted_makefiles:
+	$(MAKE) -C gettingstarted makefiles
+gettingstarted:
+	$(MAKE) -C gettingstarted all
+.PHONY: gettingstarted_all gettingstarted_debug gettingstarted_smart gettingstarted_release gettingstarted_units gettingstarted_examples gettingstarted_shared gettingstarted_install gettingstarted_sourceinstall gettingstarted_exampleinstall gettingstarted_distinstall gettingstarted_zipinstall gettingstarted_zipsourceinstall gettingstarted_zipexampleinstall gettingstarted_zipdistinstall gettingstarted_clean gettingstarted_distclean gettingstarted_cleanall gettingstarted_info gettingstarted_makefiles gettingstarted
+endif
+ifdef TARGET_DIRS_PLUGINS
+plugins_all:
+	$(MAKE) -C plugins all
+plugins_debug:
+	$(MAKE) -C plugins debug
+plugins_smart:
+	$(MAKE) -C plugins smart
+plugins_release:
+	$(MAKE) -C plugins release
+plugins_units:
+	$(MAKE) -C plugins units
+plugins_examples:
+	$(MAKE) -C plugins examples
+plugins_shared:
+	$(MAKE) -C plugins shared
+plugins_install:
+	$(MAKE) -C plugins install
+plugins_sourceinstall:
+	$(MAKE) -C plugins sourceinstall
+plugins_exampleinstall:
+	$(MAKE) -C plugins exampleinstall
+plugins_distinstall:
+	$(MAKE) -C plugins distinstall
+plugins_zipinstall:
+	$(MAKE) -C plugins zipinstall
+plugins_zipsourceinstall:
+	$(MAKE) -C plugins zipsourceinstall
+plugins_zipexampleinstall:
+	$(MAKE) -C plugins zipexampleinstall
+plugins_zipdistinstall:
+	$(MAKE) -C plugins zipdistinstall
+plugins_clean:
+	$(MAKE) -C plugins clean
+plugins_distclean:
+	$(MAKE) -C plugins distclean
+plugins_cleanall:
+	$(MAKE) -C plugins cleanall
+plugins_info:
+	$(MAKE) -C plugins info
+plugins_makefiles:
+	$(MAKE) -C plugins makefiles
+plugins:
+	$(MAKE) -C plugins all
+.PHONY: plugins_all plugins_debug plugins_smart plugins_release plugins_units plugins_examples plugins_shared plugins_install plugins_sourceinstall plugins_exampleinstall plugins_distinstall plugins_zipinstall plugins_zipsourceinstall plugins_zipexampleinstall plugins_zipdistinstall plugins_clean plugins_distclean plugins_cleanall plugins_info plugins_makefiles plugins
+endif
+ifdef TARGET_DIRS_SCRIBBLE_SIMPLE
+scribble_simple_all:
+	$(MAKE) -C scribble_simple all
+scribble_simple_debug:
+	$(MAKE) -C scribble_simple debug
+scribble_simple_smart:
+	$(MAKE) -C scribble_simple smart
+scribble_simple_release:
+	$(MAKE) -C scribble_simple release
+scribble_simple_units:
+	$(MAKE) -C scribble_simple units
+scribble_simple_examples:
+	$(MAKE) -C scribble_simple examples
+scribble_simple_shared:
+	$(MAKE) -C scribble_simple shared
+scribble_simple_install:
+	$(MAKE) -C scribble_simple install
+scribble_simple_sourceinstall:
+	$(MAKE) -C scribble_simple sourceinstall
+scribble_simple_exampleinstall:
+	$(MAKE) -C scribble_simple exampleinstall
+scribble_simple_distinstall:
+	$(MAKE) -C scribble_simple distinstall
+scribble_simple_zipinstall:
+	$(MAKE) -C scribble_simple zipinstall
+scribble_simple_zipsourceinstall:
+	$(MAKE) -C scribble_simple zipsourceinstall
+scribble_simple_zipexampleinstall:
+	$(MAKE) -C scribble_simple zipexampleinstall
+scribble_simple_zipdistinstall:
+	$(MAKE) -C scribble_simple zipdistinstall
+scribble_simple_clean:
+	$(MAKE) -C scribble_simple clean
+scribble_simple_distclean:
+	$(MAKE) -C scribble_simple distclean
+scribble_simple_cleanall:
+	$(MAKE) -C scribble_simple cleanall
+scribble_simple_info:
+	$(MAKE) -C scribble_simple info
+scribble_simple_makefiles:
+	$(MAKE) -C scribble_simple makefiles
+scribble_simple:
+	$(MAKE) -C scribble_simple all
+.PHONY: scribble_simple_all scribble_simple_debug scribble_simple_smart scribble_simple_release scribble_simple_units scribble_simple_examples scribble_simple_shared scribble_simple_install scribble_simple_sourceinstall scribble_simple_exampleinstall scribble_simple_distinstall scribble_simple_zipinstall scribble_simple_zipsourceinstall scribble_simple_zipexampleinstall scribble_simple_zipdistinstall scribble_simple_clean scribble_simple_distclean scribble_simple_cleanall scribble_simple_info scribble_simple_makefiles scribble_simple
+endif
+all: $(addsuffix _all,$(TARGET_DIRS))
+debug: $(addsuffix _debug,$(TARGET_DIRS))
+smart: $(addsuffix _smart,$(TARGET_DIRS))
+release: $(addsuffix _release,$(TARGET_DIRS))
+units: $(addsuffix _units,$(TARGET_DIRS))
+examples: $(addsuffix _examples,$(TARGET_DIRS))
+shared: $(addsuffix _shared,$(TARGET_DIRS))
+install: $(addsuffix _install,$(TARGET_DIRS))
+sourceinstall: $(addsuffix _sourceinstall,$(TARGET_DIRS))
+exampleinstall: $(addsuffix _exampleinstall,$(TARGET_DIRS))
+distinstall: $(addsuffix _distinstall,$(TARGET_DIRS))
+zipinstall: $(addsuffix _zipinstall,$(TARGET_DIRS))
+zipsourceinstall: $(addsuffix _zipsourceinstall,$(TARGET_DIRS))
+zipexampleinstall: $(addsuffix _zipexampleinstall,$(TARGET_DIRS))
+zipdistinstall: $(addsuffix _zipdistinstall,$(TARGET_DIRS))
+clean: $(addsuffix _clean,$(TARGET_DIRS))
+distclean: $(addsuffix _distclean,$(TARGET_DIRS))
+cleanall: $(addsuffix _cleanall,$(TARGET_DIRS))
+info: fpc_info
+makefiles: fpc_makefiles $(addsuffix _makefiles,$(TARGET_DIRS))
+.PHONY: all debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall clean distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif

+ 16 - 0
packages/extra/gtk2/examples/Makefile.fpc

@@ -0,0 +1,16 @@
+#
+#   Makefile.fpc for Free Pascal GTK 2.x.y Examples
+#
+
+[target]
+dirs=helloworld helloworld2 gtk_demo gettingstarted plugins scribble_simple
+#filechooser - doesn't work yet
+
+[require]
+packages=gtk2
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../../../..

+ 1731 - 0
packages/extra/gtk2/examples/filechooser/Makefile

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

+ 15 - 0
packages/extra/gtk2/examples/filechooser/Makefile.fpc

@@ -0,0 +1,15 @@
+#
+#   Makefile.fpc for Free Pascal GTK 2.x.y Examples
+#
+
+[target]
+programs=simple glade
+
+[require]
+packages=gtk2
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../../../../..

+ 106 - 0
packages/extra/gtk2/examples/filechooser/beipiel.glade

@@ -0,0 +1,106 @@
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+<glade-interface>
+<requires lib="gnome"/>
+
+<widget class="GtkWindow" id="MainWindow">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">FileChooser and Glade2 example</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+
+  <child>
+    <widget class="GtkVBox" id="vbox1">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">6</property>
+
+      <child>
+	<widget class="GtkLabel" id="label1">
+	  <property name="visible">True</property>
+	  <property name="label" translatable="yes">Hello! What do you want to do today?</property>
+	  <property name="use_underline">False</property>
+	  <property name="use_markup">False</property>
+	  <property name="justify">GTK_JUSTIFY_LEFT</property>
+	  <property name="wrap">False</property>
+	  <property name="selectable">False</property>
+	  <property name="xalign">0.5</property>
+	  <property name="yalign">0.5</property>
+	  <property name="xpad">0</property>
+	  <property name="ypad">0</property>
+	</widget>
+	<packing>
+	  <property name="padding">10</property>
+	  <property name="expand">False</property>
+	  <property name="fill">False</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkCalendar" id="calendar1">
+	  <property name="visible">True</property>
+	  <property name="can_focus">True</property>
+	  <property name="display_options">GTK_CALENDAR_SHOW_HEADING|GTK_CALENDAR_SHOW_DAY_NAMES</property>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkHButtonBox" id="hbuttonbox1">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_SPREAD</property>
+	  <property name="spacing">3</property>
+
+	  <child>
+	    <widget class="GtkButton" id="exit">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-quit</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="open">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-open</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkStatusbar" id="statusbar1">
+	  <property name="visible">True</property>
+	  <property name="has_resize_grip">True</property>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">False</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+</glade-interface>

+ 164 - 0
packages/extra/gtk2/examples/filechooser/glade.pas

@@ -0,0 +1,164 @@
+program glade_test;
+{$mode objfpc} {$H+}
+
+{$IFDEF GTK2_0}{$FATAL this demo needs gtk 2.4}{$ENDIF}
+{$IFDEF GTK2_2}{$FATAL this demo needs gtk 2.4}{$ENDIF}
+
+uses
+  cmem,   { because of: ... ld.so: dl-minimal.c: 134: realloc: Assertion `ptr == alloc_last_block' failed! }
+  Glib2, Gdk2, Gtk2, LibGlade2;
+
+procedure open_callback (widget : PGtkWidget;
+                         data   : gpointer); cdecl; forward;
+
+
+function delete_event (widget: PGtkWidget;
+                       event : PGdkEvent;
+                       data  : gpointer): gboolean;cdecl; forward;
+
+
+procedure show_glade_file (filename : Pgchar);
+var
+    xml         : PGladeXML;
+    fatal_mask  : TGLogLevelFlags;
+    toplevel    : PGtkWidget;
+    open        : PGtkWidget;
+    exit        : PGtkWidget;
+
+begin
+    fatal_mask := g_log_set_always_fatal (G_LOG_FATAL_MASK);
+
+    g_log_set_always_fatal (fatal_mask or G_LOG_LEVEL_WARNING or G_LOG_LEVEL_CRITICAL);
+
+    if filename <> NULL  then begin
+        { read the glade xml file }
+        xml := glade_xml_new (filename, NULL, NULL);
+
+        { get the pointers to the widgets }
+
+        toplevel := glade_xml_get_widget (xml, 'MainWindow');
+
+        exit := glade_xml_get_widget (xml, 'exit');
+        open := glade_xml_get_widget (xml, 'open');
+
+        { If the widgets where found in the xml code... }
+
+        { ... connect the signals to the buttons }
+        if open <> NULL then
+                g_signal_connect (G_OBJECT (open), 'clicked',
+                                  G_CALLBACK (@open_callback), toplevel);
+
+        if exit <> NULL then
+                g_signal_connect (G_OBJECT (exit), 'clicked',
+                                  G_CALLBACK (@delete_event), NULL);
+
+        { and show them all }
+
+        if toplevel <> NULL then
+                gtk_widget_show_all (toplevel);
+
+        g_object_unref (G_OBJECT (xml));
+
+   end; { filename }
+end;
+
+
+procedure open_callback (widget : PGtkWidget;
+                         data   : gpointer); cdecl;
+var
+  dialog   : PGtkWidget;
+  window   : PGtkWindow;
+  action   : gint;
+  filename : Pgchar;
+  filter   : PGtkFileFilter;
+
+begin
+  { Get a pointer to the main window }
+  window := GTK_WINDOW (data);
+
+  { create the filechooser dialog }
+  dialog := gtk_file_chooser_dialog_new ('Open Glade XML',
+                                          window,
+                                         GTK_FILE_CHOOSER_ACTION_OPEN,
+                                         GTK_STOCK_OPEN, [GTK_RESPONSE_ACCEPT,
+                                         GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                                         NULL]);
+
+  filter := gtk_file_filter_new; { creates a new GtkFileFilter }
+
+  gtk_file_filter_add_pattern (filter, '*.glade'); { and allow only *.glade files }
+
+  { We now use this filter to display only *.glade files in the filechooser }
+
+  gtk_file_chooser_add_filter ( GTK_FILE_CHOOSER(dialog), filter);
+
+  if gtk_dialog_run (GTK_DIALOG (dialog)) = GTK_RESPONSE_ACCEPT then
+  begin
+     { get selected file }
+     filename := gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
+
+     { and do something with it }
+     show_glade_file (filename);
+
+     g_free (filename);
+  end;
+
+  gtk_widget_destroy (dialog);
+end;
+
+
+
+
+function delete_event (widget: PGtkWidget;
+                       event : PGdkEvent;
+                       data  : gpointer): gboolean;cdecl;
+begin
+  gtk_main_quit;
+  delete_event := FALSE;
+end;
+
+
+var
+  window,
+  button,
+  box1     : PGtkWidget;      (* GtkWidget is the storage type for widgets *)
+
+begin
+
+    gtk_init (@argc, @argv);
+
+    window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+    gtk_window_set_title (GTK_WINDOW (window), 'GtkFileChooser and LibGlade  Demo');
+
+    g_signal_connect (G_OBJECT (window), 'delete_event',
+                              G_CALLBACK (@delete_event), NULL);
+
+
+    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+
+    box1 := gtk_hbox_new (FALSE, 0);
+
+    (* Put the box into the main window. *)
+    gtk_container_add (GTK_CONTAINER (window), box1);
+
+    button := gtk_button_new_from_stock (GTK_STOCK_OPEN);
+
+
+    g_signal_connect (G_OBJECT (button), 'clicked',
+                              G_CALLBACK (@open_callback), window);
+
+    gtk_box_pack_start (GTK_BOX(box1), button, TRUE, TRUE, 10);
+
+    (* Always remember this step, this tells GTK that our preparation for
+     * this button is complete, and it can now be displayed. *)
+    gtk_widget_show (button);
+
+
+    gtk_widget_show (box1);
+
+    gtk_widget_show (window);
+
+
+    gtk_main ();
+end.

+ 166 - 0
packages/extra/gtk2/examples/filechooser/simple.pas

@@ -0,0 +1,166 @@
+program simple_filechooser;
+
+(* basing upon helloworld2 example*)
+{$mode objfpc} {$H+}
+
+{$IFDEF GTK2_0}{$FATAL this demo needs gtk 2.4}{$ENDIF}
+{$IFDEF GTK2_2}{$FATAL this demo needs gtk 2.4}{$ENDIF}
+
+uses
+  Glib2, Gdk2, Gtk2;
+
+const
+   ACTION_OPEN = 1;
+   ACTION_SAVE = 2;
+
+   MAIN_WINDOW_KEY = 'main_window';     { uses with g_object_(get/set)_data as key }
+
+
+(* File dialog-callback. *)
+procedure dialog_callback (widget : PGtkWidget;
+                           data   : gpointer); cdecl;
+var
+  dialog   : PGtkWidget;
+  window   : PGtkWindow;
+  action   : gint;
+  filename : Pgchar;
+
+begin
+  { Get a pointer to the main window }
+  window := g_object_get_data (G_OBJECT(widget), MAIN_WINDOW_KEY);
+
+  action := gint (data);
+
+  case action of
+        ACTION_OPEN:
+                begin
+                  dialog := gtk_file_chooser_dialog_new ('Open File',
+                                                         window,
+                                                         GTK_FILE_CHOOSER_ACTION_OPEN,
+                                                         GTK_STOCK_OPEN, [GTK_RESPONSE_ACCEPT,
+                                                         GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                                                         NULL]);
+
+                end; { ACTION_OPEN}
+        ACTION_SAVE:
+                begin
+                  dialog := gtk_file_chooser_dialog_new ('Save File',
+                                                         window,
+                                                         GTK_FILE_CHOOSER_ACTION_SAVE,
+                                                         GTK_STOCK_SAVE, [GTK_RESPONSE_ACCEPT,
+                                                         GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                                                         NULL]);
+
+                end; { ACTION_SAVE }
+        else begin
+                 { This should never happen }
+                g_print ('Something is wrong here!!!.'#13#10);
+                g_print ('No dialog created.'#13#10);
+                {writeln crashes on my system running linux --- check why }
+                exit;
+             end;
+  end; { case }
+
+
+  if gtk_dialog_run (GTK_DIALOG (dialog)) = GTK_RESPONSE_ACCEPT then
+  begin
+     filename := gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
+     g_print ('Filename %s selected.'#13#10, [filename]);
+ //    writeln ('File ', filename, ' selected.');
+ //  ToDO:
+ //  writeln crashes... check why
+
+     g_free (filename);
+  end;
+
+  gtk_widget_destroy (dialog);
+end;
+
+
+
+
+(* another callback *)
+function delete_event (widget: PGtkWidget;
+                       event : PGdkEvent;
+                       data  : gpointer): gboolean;cdecl;
+begin
+  gtk_main_quit;
+  delete_event := FALSE;
+end;
+
+
+var
+  window,
+  button,
+  box1     : PGtkWidget;      (* GtkWidget is the storage type for widgets *)
+
+begin
+
+    (* This is called in all GTK applications. Arguments are parsed
+     * from the command line and are returned to the application. *)
+
+    gtk_init (@argc, @argv);
+
+    (* Create a new window *)
+    window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+    (* This is a new call, which just sets the title of our
+     * new window to "Hello Buttons!" *)
+    gtk_window_set_title (GTK_WINDOW (window), 'GtkFileChooser Demo');
+
+    (* Here we just set a handler for delete_event that immediately
+     * exits GTK. *)
+    g_signal_connect (G_OBJECT (window), 'delete_event',
+                              G_CALLBACK (@delete_event), NULL);
+
+    (* Sets the border width of the window. *)
+    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+
+    (* We create a box to pack widgets into.  This is described in detail
+     * in the "packing" section. The box is not really visible, it
+     * is just used as a tool to arrange widgets. *)
+    box1 := gtk_hbox_new (FALSE, 0);
+
+    (* Put the box into the main window. *)
+    gtk_container_add (GTK_CONTAINER (window), box1);
+
+
+    button := gtk_button_new_with_label ('Open');
+
+    (* Now when the button is clicked, we call the "callback" function
+     * with a pointer to the main window as its argument *)
+    g_object_set_data (G_OBJECT(button), MAIN_WINDOW_KEY, window);
+
+    g_signal_connect (G_OBJECT (button), 'clicked',
+                              G_CALLBACK (@dialog_callback), pointer(ACTION_OPEN));
+
+    (* Instead of gtk_container_add, we pack this button into the invisible
+     * box, which has been packed into the window. *)
+    gtk_box_pack_start (GTK_BOX(box1), button, TRUE, TRUE, 0);
+
+    (* Always remember this step, this tells GTK that our preparation for
+     * this button is complete, and it can now be displayed. *)
+    gtk_widget_show (button);
+
+    (* Do these same steps again to create a second button *)
+    button := gtk_button_new_with_label ('Save');
+
+    g_object_set_data (G_OBJECT(button), MAIN_WINDOW_KEY, window);
+
+    g_signal_connect (G_OBJECT (button), 'clicked',
+                              G_CALLBACK (@dialog_callback), pointer(ACTION_SAVE));
+
+    gtk_box_pack_start(GTK_BOX (box1), button, TRUE, TRUE, 0);
+
+    (* The order in which we show the buttons is not really important, but I
+     * recommend showing the window last, so it all pops up at once. *)
+    gtk_widget_show (button);
+
+    gtk_widget_show (box1);
+
+    gtk_widget_show (window);
+
+
+    (* Rest in gtk_main and wait for the fun to begin! *)
+    gtk_main ();
+end.

+ 1731 - 0
packages/extra/gtk2/examples/gettingstarted/Makefile

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

+ 15 - 0
packages/extra/gtk2/examples/gettingstarted/Makefile.fpc

@@ -0,0 +1,15 @@
+#
+#   Makefile.fpc for Free Pascal GTK 2.x.y Examples
+#
+
+[target]
+programs=gettingstarted
+
+[require]
+packages=gtk2
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../../../../..

+ 19 - 0
packages/extra/gtk2/examples/gettingstarted/gettingstarted.pas

@@ -0,0 +1,19 @@
+program GettingStarted;
+
+{$mode objfpc}{$H+}
+
+uses
+  GTK2;
+
+var
+  MainWindow: PGtkWidget;
+
+begin
+  gtk_init (@argc, @argv);
+
+  MainWindow := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_widget_show  (MainWindow);
+
+  gtk_main;
+end.
+

+ 1731 - 0
packages/extra/gtk2/examples/gtk_demo/Makefile

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

+ 15 - 0
packages/extra/gtk2/examples/gtk_demo/Makefile.fpc

@@ -0,0 +1,15 @@
+#
+#   Makefile.fpc for Free Pascal GTK 2.x.y Examples
+#
+
+[target]
+programs=gtk_demo
+
+[require]
+packages=gtk2
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../../../../..

+ 399 - 0
packages/extra/gtk2/examples/gtk_demo/appwindow.inc

@@ -0,0 +1,399 @@
+(* Application main window
+ *
+ * Demonstrates a typical application window, with menubar, toolbar, statusbar.
+ *)
+
+var
+  appwindow_registered : gboolean;
+
+procedure menuitem_cb (callback_data   : gpointer;
+                       callback_action : guint;
+                       widget          : PGtkWidget);cdecl;
+var
+  dialog : PGtkWidget;
+
+
+begin
+  dialog := gtk_message_dialog_new (GTK_WINDOW (callback_data),
+                                    GTK_DIALOG_DESTROY_WITH_PARENT,
+                                    GTK_MESSAGE_INFO,
+                                    GTK_BUTTONS_CLOSE,
+                                    'You selected or toggled the menu item: "%s"',
+                                    [gtk_item_factory_path_from_widget (widget)]);
+
+  // Close dialog on user response
+  g_signal_connect (G_OBJECT (dialog),
+                    'response',
+                    G_CALLBACK (@gtk_widget_destroy),
+                    NULL);
+
+  gtk_widget_show (dialog);
+end;
+
+
+
+procedure toolbar_cb (button : PGtkWidget;
+                      data   : gpointer); cdecl;
+var
+  dialog: PGtkWidget;
+begin
+
+  dialog := gtk_message_dialog_new (GTK_WINDOW (data),
+                                    GTK_DIALOG_DESTROY_WITH_PARENT,
+                                    GTK_MESSAGE_INFO,
+                                    GTK_BUTTONS_CLOSE,
+                                    'You selected a toolbar button');
+
+  (* Close dialog on user response *)
+  g_signal_connect (G_OBJECT (dialog),
+                    'response',
+                    G_CALLBACK (@gtk_widget_destroy),
+                    NULL);
+
+  gtk_widget_show (dialog);
+end;
+
+const
+
+  menu_items :  array [1..18] of TGtkItemFactoryEntry = (
+  ( path: '/_File';     accelerator:  NULL;          callback: nil;
+    callback_action: 0;  item_type : '<Branch>'; extra_data: NULL),
+
+  ( path: '/File/_New'; accelerator:  '<control>N' ; callback: TGtkItemfactoryCallback(@menuitem_cb);
+    callback_action: 0;  item_type : '<StockItem>'; extra_data: NULL{GTK_STOCK_NEW}),
+
+  ( path: '/File/_Open'; accelerator:  '<control>O' ; callback: TGtkItemfactoryCallback(@menuitem_cb);
+    callback_action: 0;  item_type : '<StockItem>'; extra_data: NULL {GTK_STOCK_OPEN}),
+
+  ( path: '/File/_Save'; accelerator:  '<control>S' ; callback: TGtkItemfactoryCallback(@menuitem_cb);
+    callback_action: 0;  item_type : '<StockItem>'; extra_data: NULL {GTK_STOCK_SAVE}),
+
+  ( path: '/File/Save _As'; accelerator:  NULL ; callback: TGtkItemfactoryCallback(@menuitem_cb);
+    callback_action: 0;  item_type : '<StockItem>'; extra_data: NULL {GTK_STOCK_SAVE_AS}),
+
+  ( path: '/File/sep1'; accelerator:  NULL; callback: TGtkItemfactoryCallback(@menuitem_cb);
+    callback_action: 0;  item_type : '<Separator>'; extra_data: NULL),
+
+  ( path: '/File/_Quit'; accelerator:  '<control>Q' ; callback: TGtkItemfactoryCallback(@menuitem_cb);
+    callback_action: 0;  item_type : '<StockItem>'; extra_data: NULL),
+
+  ( path: '/Preferences'; accelerator:  NULL ; callback: nil;
+    callback_action: 0;  item_type : '<Branch>'; extra_data: NULL),
+
+  ( path: '/Preferences/_Color'; accelerator:  NULL ; callback: nil;
+    callback_action: 0;  item_type : '<Branch>'; extra_data: NULL),
+
+  ( path: '/Preferences/Color/_Red'; accelerator:  NULL ; callback: TGtkItemfactoryCallback(@menuitem_cb);
+    callback_action: 0;  item_type : '<RadioItem>'; extra_data: NULL),
+
+  ( path: '/Preferences/Color/_Green'; accelerator:  NULL ; callback: TGtkItemfactoryCallback(@menuitem_cb);
+    callback_action: 0;  item_type : '/Preferences/Color/Red'; extra_data: NULL),
+
+  ( path: '/Preferences/Color/_Blue'; accelerator:  NULL ; callback: TGtkItemfactoryCallback(@menuitem_cb);
+    callback_action: 0;  item_type : '/Preferences/Color/Red'; extra_data: NULL),
+
+  ( path: '/Preferences/_Shape'; accelerator:  NULL ; callback: nil;
+    callback_action: 0;  item_type : '<Branch>'; extra_data: NULL),
+
+  ( path: '/Preferences/Shape/_Square'; accelerator:  NULL ; callback: TGtkItemfactoryCallback(@menuitem_cb);
+    callback_action: 0;  item_type : '<RadioItem>'; extra_data: NULL),
+
+  ( path: '/Preferences/Shape/_Rectangle'; accelerator:  NULL ; callback: TGtkItemfactoryCallback(@menuitem_cb);
+    callback_action: 0;  item_type : '/Preferences/Shape/Square'; extra_data: NULL),
+
+  ( path: '/Preferences/Shape/_Oval'; accelerator:  NULL ; callback: TGtkItemfactoryCallback(@menuitem_cb);
+    callback_action: 0;  item_type : '/Preferences/Shape/Rectangle'; extra_data: NULL),
+
+
+  (* If you wanted this to be right justified you would use "<LastBranch>", not "<Branch>".
+   * Right justified help menu items are generally considered a bad idea now days.
+   *)
+
+  ( path: '/_Help'; accelerator:  NULL ; callback: nil;
+    callback_action: 0;  item_type : '<Branch>'; extra_data: NULL),
+
+  ( path: '/Help/_About'; accelerator:  NULL ; callback: nil;
+    callback_action: 0;  item_type : NULL; extra_data: NULL)
+
+    );
+
+
+var
+  application_window  : PGtkWidget;      // global variable (originally called window)
+
+
+
+(* This function registers our custom toolbar icons, so they can be themed.
+ *
+ * It's totally optional to do this, you could just manually insert icons
+ * and have them not be themeable, especially if you never expect people
+ * to theme your app.
+ *)
+
+const
+  items :array [1..1] of TGtkStockItem = (
+       ( stock_id: 'demo-gtk-logo'; _label: '_GTK!';
+         modifier: 0; keyval: 0; translation_domain : NULL)
+         );
+
+procedure register_stock_icons;
+
+var
+  pixbuf    : PGdkPixbuf;
+  factory   : PGtkIconFactory;
+  filename  : pgchar;
+
+  icon_set    : PGtkIconSet;
+  transparent : PGdkPixbuf;
+
+begin
+  if not appwindow_registered then
+  begin
+      appwindow_registered := TRUE;
+
+      (* Register our stock items *)
+      gtk_stock_add (@items[1], high(items));
+
+      (* Add our custom icon factory to the list of defaults *)
+      factory := gtk_icon_factory_new ();
+      gtk_icon_factory_add_default (factory);
+
+      (* demo_find_file() looks in the the current directory first,
+       * so you can run gtk-demo without installing GTK, then looks
+       * in the location where the file is installed.
+       *)
+      pixbuf := NULL;
+      filename := demo_find_file ('gtk-logo-rgb.gif', NULL);
+
+      if filename <> NULL then begin
+        pixbuf := gdk_pixbuf_new_from_file (filename, NULL);
+        g_free (filename);
+      end;
+
+      (* Register icon to accompany stock item *)
+      if pixbuf <> NULL then
+      begin
+          (* The gtk-logo-rgb icon has a white background, make it transparent *)
+          transparent := gdk_pixbuf_add_alpha (pixbuf, TRUE, $ff, $ff, $ff);
+
+          icon_set := gtk_icon_set_new_from_pixbuf (transparent);
+          gtk_icon_factory_add (factory, 'demo-gtk-logo', icon_set);
+          gtk_icon_set_unref (icon_set);
+          g_object_unref (G_OBJECT (pixbuf));
+          g_object_unref (G_OBJECT (transparent));
+      end
+      else
+        g_warning ('failed to load GTK logo for toolbar');
+
+      (* Drop our reference to the factory, GTK will hold a reference. *)
+      g_object_unref (G_OBJECT (factory));
+    end;
+end;
+
+procedure update_statusbar ( buffer    : PGtkTextBuffer;
+                             statusbar : PGtkStatusbar);
+var
+  msg   : pgchar;
+  row,
+  col   : gint;
+  count : gint;
+  iter  : TGtkTextIter;
+
+begin
+
+  gtk_statusbar_pop (statusbar, 0); (* clear any previous message, underflow is allowed *)
+
+  count := gtk_text_buffer_get_char_count (buffer);
+
+  gtk_text_buffer_get_iter_at_mark (buffer,
+                                    @iter,
+                                    gtk_text_buffer_get_insert (buffer));
+
+  row := gtk_text_iter_get_line (@iter);
+  col := gtk_text_iter_get_line_offset (@iter);
+
+  msg := g_strdup_printf ('Cursor at row %d column %d - %d chars in document',
+                         [row, col, count]);
+
+  gtk_statusbar_push (statusbar, 0, msg);
+
+  g_free (msg);
+end;
+
+procedure mark_set_callback (buffer       : PGtkTextBuffer;
+                             new_location : PGtkTextIter;
+                             mark         : PGtkTextMark;
+                             data         : gpointer); cdecl;
+begin
+  update_statusbar (buffer, GTK_STATUSBAR (data));
+end;
+
+function do_appwindow      : PGtkWidget;
+var
+  table,
+  toolbar,
+  statusbar,
+  contents,
+  sw           : PGtkWidget;
+
+  buffer       : PGtkTextBuffer;
+  accel_group  : PGtkAccelGroup;
+  item_factory : PGtkItemFactory;
+
+begin
+  if application_window  = NULL then
+  begin
+    register_stock_icons ();
+
+    (* Create the toplevel window
+     *)
+
+    application_window  := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_window_set_title (GTK_WINDOW (application_window ), 'Application Window');
+
+
+    (* NULL window variable when window is closed *)
+    g_signal_connect (G_OBJECT (application_window ), 'destroy',
+                        G_CALLBACK (@gtk_widget_destroyed),
+                        @application_window );
+
+    table := gtk_table_new (1, 4, FALSE);
+
+    gtk_container_add (GTK_CONTAINER (application_window ), table);
+
+    (* Create the menubar
+     *)
+
+    accel_group := gtk_accel_group_new ();
+    gtk_window_add_accel_group (GTK_WINDOW (application_window), accel_group);
+    g_object_unref (accel_group);
+
+    item_factory := gtk_item_factory_new (GTK_TYPE_MENU_BAR, '<main>', accel_group);
+
+    (* Set up item factory to go away with the window *)
+    g_object_ref (item_factory);
+    gtk_object_sink (GTK_OBJECT (item_factory));
+    g_object_set_data_full (G_OBJECT (application_window ),
+                              '<main>',
+                              item_factory,
+                              TGDestroyNotify (@g_object_unref));
+
+    (* create menu items *)
+    menu_items[2].extra_data:=Pointer(GTK_STOCK_NEW);
+    menu_items[3].extra_data:=Pointer(GTK_STOCK_OPEN);
+    menu_items[4].extra_data:=Pointer(GTK_STOCK_SAVE);
+    menu_items[5].extra_data:=Pointer(GTK_STOCK_SAVE_AS);
+    menu_items[7].extra_data:=Pointer(GTK_STOCK_QUIT);
+
+    gtk_item_factory_create_items (item_factory, high (menu_items),
+                                   @menu_items[1], application_window );
+
+    gtk_table_attach (GTK_TABLE (table),
+                        gtk_item_factory_get_widget (item_factory, '<main>'),
+                        (* X direction *)          (* Y direction *)
+                        0, 1,                      0, 1,
+                        GTK_EXPAND or GTK_FILL,    0,
+                        0,                         0);
+
+    (* Create the toolbar
+     *)
+    toolbar := gtk_toolbar_new ();
+
+    gtk_toolbar_insert_stock (GTK_TOOLBAR (toolbar),
+                              GTK_STOCK_OPEN,
+                              'This is a demo button with an ''open'' icon',
+                              NULL,
+                              G_CALLBACK (@toolbar_cb),
+                              application_window , (* user data for callback *)
+                              -1);  (* -1 means "append" *)
+
+    gtk_toolbar_insert_stock (GTK_TOOLBAR (toolbar),
+                              GTK_STOCK_QUIT,
+                              'This is a demo button with a ''quit'' icon',
+                              NULL,
+                              G_CALLBACK (@toolbar_cb),
+                              application_window , (* user data for callback *)
+                              -1);  (* -1 means "append" *)
+
+    gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+    gtk_toolbar_insert_stock (GTK_TOOLBAR (toolbar),
+                              'demo-gtk-logo',
+                              'This is a demo button with a ''gtk'' icon',
+                              NULL,
+                              G_CALLBACK (@toolbar_cb),
+                              application_window , (* user data for callback *)
+                              -1);  (* -1 means "append" *)
+
+    gtk_table_attach (GTK_TABLE (table),
+                      toolbar,
+                      (* X direction *)       (* Y direction *)
+                      0, 1,                   1, 2,
+                      GTK_EXPAND or GTK_FILL, 0,
+                      0,                      0);
+
+    (* Create document
+     *)
+
+    sw := gtk_scrolled_window_new (NULL, NULL);
+
+    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
+                                    GTK_POLICY_AUTOMATIC,
+                                    GTK_POLICY_AUTOMATIC);
+
+    gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
+                                         GTK_SHADOW_IN);
+
+    gtk_table_attach (GTK_TABLE (table),
+                      sw,
+                      (* X direction *)       (* Y direction *)
+                      0, 1,                   2, 3,
+                      GTK_EXPAND or GTK_FILL,  GTK_EXPAND or GTK_FILL,
+                      0,                      0);
+
+    gtk_window_set_default_size (GTK_WINDOW (application_window ),
+                                 200, 200);
+
+    contents := gtk_text_view_new ();
+
+    gtk_container_add (GTK_CONTAINER (sw),
+                       contents);
+
+    (* Create statusbar *)
+
+    statusbar := gtk_statusbar_new ();
+    gtk_table_attach (GTK_TABLE (table),
+                      statusbar,
+                      (* X direction *)       (* Y direction *)
+                        0, 1,                   3, 4,
+                        GTK_EXPAND or GTK_FILL,  0,
+                        0,                      0);
+
+    (* Show text widget info in the statusbar *)
+    buffer := gtk_text_view_get_buffer (GTK_TEXT_VIEW (contents));
+
+    g_signal_connect_object (buffer,
+                             'changed',
+                             G_CALLBACK (@update_statusbar),
+                             statusbar,
+                             0);
+
+    g_signal_connect_object (buffer,
+                             'mark_set', (* cursor moved *)
+                             G_CALLBACK (@mark_set_callback),
+                             statusbar,
+                             0);
+
+    update_statusbar (buffer, GTK_STATUSBAR (statusbar));
+  end;
+
+  if not (GTK_WIDGET_VISIBLE (application_window )) then
+    gtk_widget_show_all (application_window )
+  else begin
+    gtk_widget_destroy (application_window);
+    application_window  := NULL;
+  end;
+
+  do_appwindow := application_window ;
+end;
+
+

+ 124 - 0
packages/extra/gtk2/examples/gtk_demo/button_box.inc

@@ -0,0 +1,124 @@
+(* Button Boxes
+ *
+ * The Button Box widgets are used to arrange buttons with padding.
+ *)
+
+function create_bbox (horizontal : gboolean;
+                      title      : pgchar;
+                      spacing    : gint;
+                      layout     : TGtkButtonBoxStyle): PGtkWidget;
+var
+  frame,
+  bbox,
+  button  : PGtkWidget;
+
+begin
+  frame := gtk_frame_new (title);
+
+  if horizontal then
+    bbox := gtk_hbutton_box_new ()
+  else
+    bbox := gtk_vbutton_box_new ();
+
+  gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
+  gtk_container_add (GTK_CONTAINER (frame), bbox);
+
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
+  gtk_box_set_spacing (GTK_BOX (bbox), spacing);
+
+  button := gtk_button_new_from_stock (GTK_STOCK_OK);
+  gtk_container_add (GTK_CONTAINER (bbox), button);
+
+  button := gtk_button_new_from_stock (GTK_STOCK_CANCEL);
+  gtk_container_add (GTK_CONTAINER (bbox), button);
+
+  button := gtk_button_new_from_stock (GTK_STOCK_HELP);
+  gtk_container_add (GTK_CONTAINER (bbox), button);
+
+  create_bbox := frame;
+end;
+
+var bbox_window  : PGtkWidget;
+
+
+function do_button_box     : PGtkWidget;
+var
+  main_vbox,
+  vbox,
+  hbox,
+  frame_horz,
+  frame_vert    : PGtkWidget;
+
+begin
+
+  if bbox_window = NULL then
+  begin
+    bbox_window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_window_set_title (GTK_WINDOW (bbox_window), 'Button Boxes');
+
+    g_signal_connect (bbox_window, 'destroy',
+                      G_CALLBACK (@gtk_widget_destroyed),
+                      @bbox_window);
+
+    gtk_container_set_border_width (GTK_CONTAINER (bbox_window), 10);
+
+    main_vbox := gtk_vbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (bbox_window), main_vbox);
+
+    frame_horz := gtk_frame_new ('Horizontal Button Boxes');
+    gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
+
+    vbox := gtk_vbox_new (FALSE, 0);
+    gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
+    gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
+
+    gtk_box_pack_start (GTK_BOX (vbox),
+                        create_bbox (TRUE, 'Spread', 40, GTK_BUTTONBOX_SPREAD),
+                        TRUE, TRUE, 0);
+
+    gtk_box_pack_start (GTK_BOX (vbox),
+                        create_bbox (TRUE, 'Edge', 40, GTK_BUTTONBOX_EDGE),
+                        TRUE, TRUE, 5);
+
+    gtk_box_pack_start (GTK_BOX (vbox),
+                        create_bbox (TRUE, 'Start', 40, GTK_BUTTONBOX_START),
+                        TRUE, TRUE, 5);
+
+    gtk_box_pack_start (GTK_BOX (vbox),
+                        create_bbox (TRUE, 'End', 40, GTK_BUTTONBOX_END),
+                        TRUE, TRUE, 5);
+
+    frame_vert := gtk_frame_new ('Vertical Button Boxes');
+    gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
+
+    hbox := gtk_hbox_new (FALSE, 0);
+    gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
+    gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
+
+    gtk_box_pack_start (GTK_BOX (hbox),
+                        create_bbox (FALSE, 'Spread', 30, GTK_BUTTONBOX_SPREAD),
+                        TRUE, TRUE, 0);
+
+    gtk_box_pack_start (GTK_BOX (hbox),
+                        create_bbox (FALSE, 'Edge', 30, GTK_BUTTONBOX_EDGE),
+                        TRUE, TRUE, 5);
+
+    gtk_box_pack_start (GTK_BOX (hbox),
+                        create_bbox (FALSE, 'Start', 30, GTK_BUTTONBOX_START),
+                        TRUE, TRUE, 5);
+
+    gtk_box_pack_start (GTK_BOX (hbox),
+                        create_bbox (FALSE, 'End', 30, GTK_BUTTONBOX_END),
+                        TRUE, TRUE, 5);
+  end;
+
+  if not GTK_WIDGET_VISIBLE (bbox_window) then
+      gtk_widget_show_all (bbox_window)
+  else
+  begin
+      gtk_widget_destroy (bbox_window);
+      bbox_window := NULL;
+  end;
+
+  do_button_box := bbox_window;
+end;

+ 108 - 0
packages/extra/gtk2/examples/gtk_demo/colorsel.inc

@@ -0,0 +1,108 @@
+(* Color Selector
+ *
+ * GtkColorSelection lets the user choose a color. GtkColorSelectionDialog is
+ * a prebuilt dialog containing a GtkColorSelection.
+ *
+ *)
+
+var
+  colorsel_window,
+  colorsel_da,
+  colorsel_frame    : PGtkWidget;
+  colorsel_color    : TGdkColor;
+
+
+procedure change_color_callback (button : PGtkWidget;
+                                 data   : gpointer); cdecl;
+var
+  dialog    : PGtkWidget;
+  colorsel  : PGtkColorSelection;
+  response  : gint;
+
+begin
+  dialog := gtk_color_selection_dialog_new ('Changing color');
+
+  gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (colorsel_window));
+
+  colorsel := PGtkColorSelection ( PGtkColorSelectionDialog(dialog)^.colorsel );
+
+  gtk_color_selection_set_previous_color (colorsel, @colorsel_color);
+  gtk_color_selection_set_current_color (colorsel, @colorsel_color);
+  gtk_color_selection_set_has_palette (colorsel, TRUE);
+
+  response := gtk_dialog_run (GTK_DIALOG (dialog));
+
+  if response = GTK_RESPONSE_OK then
+  begin
+    gtk_color_selection_get_current_color (colorsel, @colorsel_color);
+
+    gtk_widget_modify_bg (colorsel_da, GTK_STATE_NORMAL, @colorsel_color);
+  end;
+
+  gtk_widget_destroy (dialog);
+end;
+
+
+function do_colorsel       : PGtkWidget;
+var
+  vbox,
+  button,
+  alignment  : PGtkWidget;
+
+
+ begin
+  if colorsel_window = NULL then
+  begin
+    colorsel_color.red   := $0;
+    colorsel_color.blue  := $ffff;
+    colorsel_color.green := $0;
+
+    colorsel_window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_window_set_title (GTK_WINDOW (colorsel_window), 'Color Selection');
+
+    g_signal_connect (colorsel_window, 'destroy',
+                          G_CALLBACK (@gtk_widget_destroyed), @colorsel_window);
+
+    gtk_container_set_border_width (GTK_CONTAINER (colorsel_window), 8);
+
+    vbox := gtk_vbox_new (FALSE, 8);
+    gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
+    gtk_container_add (GTK_CONTAINER (colorsel_window), vbox);
+
+    (*
+     * Create the color swatch area
+     *)
+
+
+    colorsel_frame := gtk_frame_new (NULL);
+    gtk_frame_set_shadow_type (GTK_FRAME (colorsel_frame), GTK_SHADOW_IN);
+    gtk_box_pack_start (GTK_BOX (vbox), colorsel_frame, TRUE, TRUE, 0);
+
+    colorsel_da := gtk_drawing_area_new ();
+    (* set a minimum size *)
+    gtk_widget_set_size_request (colorsel_da, 200, 200);
+    (* set the color *)
+    gtk_widget_modify_bg (colorsel_da, GTK_STATE_NORMAL, @colorsel_color);
+
+    gtk_container_add (GTK_CONTAINER (colorsel_frame), colorsel_da);
+
+    alignment := gtk_alignment_new (1.0, 0.5, 0.0, 0.0);
+
+    button := gtk_button_new_with_mnemonic ('_Change the above color');
+    gtk_container_add (GTK_CONTAINER (alignment), button);
+
+    gtk_box_pack_start (GTK_BOX (vbox), alignment, FALSE, FALSE, 0);
+
+    g_signal_connect (button, 'clicked',
+                        G_CALLBACK (@change_color_callback), NULL);
+  end;
+
+  if not GTK_WIDGET_VISIBLE (colorsel_window) then
+    gtk_widget_show_all (colorsel_window)
+  else begin
+    gtk_widget_destroy (colorsel_window);
+    colorsel_window := NULL;
+  end;
+
+  do_colorsel := colorsel_window;
+end;

BIN
packages/extra/gtk2/examples/gtk_demo/data/alphatest.png


BIN
packages/extra/gtk2/examples/gtk_demo/data/apple-red.png


BIN
packages/extra/gtk2/examples/gtk_demo/data/background.jpg


BIN
packages/extra/gtk2/examples/gtk_demo/data/floppybuddy.gif


BIN
packages/extra/gtk2/examples/gtk_demo/data/gnome-applets.png


BIN
packages/extra/gtk2/examples/gtk_demo/data/gnome-calendar.png


BIN
packages/extra/gtk2/examples/gtk_demo/data/gnome-foot.png


BIN
packages/extra/gtk2/examples/gtk_demo/data/gnome-gimp.png


BIN
packages/extra/gtk2/examples/gtk_demo/data/gnome-gmush.png


BIN
packages/extra/gtk2/examples/gtk_demo/data/gnome-gsame.png


BIN
packages/extra/gtk2/examples/gtk_demo/data/gnu-keys.png


BIN
packages/extra/gtk2/examples/gtk_demo/data/gtk-logo-rgb.gif


+ 189 - 0
packages/extra/gtk2/examples/gtk_demo/dialog.inc

@@ -0,0 +1,189 @@
+(* Dialog and Message Boxes
+ *
+ * Dialog widgets are used to pop up a transient window for user feedback.
+ *)
+
+
+
+
+var
+  dialog_entry1,
+  dialog_entry2,
+  dialog_window  : PGtkWidget;
+  dialog_i       : gint;
+
+procedure message_dialog_clicked (button    : PGtkButton;
+                                  user_data : gpointer);
+var
+  dialog : PGtkWidget;
+
+begin
+  dialog := gtk_message_dialog_new (GTK_WINDOW (dialog_window),
+                                   GTK_DIALOG_MODAL or GTK_DIALOG_DESTROY_WITH_PARENT,
+                                   GTK_MESSAGE_INFO,
+                                   GTK_BUTTONS_OK,
+                                   'This message box has been popped up the following'#13#10+
+                                   'number of times:'#13#10#13#10+
+                                   '%d', [dialog_i]);
+
+  gtk_dialog_run (GTK_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
+  inc(dialog_i);
+end;
+
+procedure  interactive_dialog_clicked ( button    : PGtkButton;
+                                        user_data : gpointer);
+var
+  dialog,
+  hbox,
+  stock,
+  table,
+  local_entry1,
+  local_entry2,
+  thelabel       : PGtkWidget;
+  response       : gint;
+
+begin
+
+  dialog := gtk_dialog_new_with_buttons ('Interactive Dialog',
+                                                             GTK_WINDOW (dialog_window),
+                                         GTK_DIALOG_MODAL or
+                                         GTK_DIALOG_DESTROY_WITH_PARENT,
+                                         GTK_STOCK_OK,
+                                        [ GTK_RESPONSE_OK,
+                                         '_Non-stock Button',
+                                          GTK_RESPONSE_CANCEL,
+                                        NULL]);
+
+  hbox := gtk_hbox_new (FALSE, 8);
+  gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)^.vbox), hbox, FALSE, FALSE, 0);
+
+  stock := gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG);
+  gtk_box_pack_start (GTK_BOX (hbox), stock, FALSE, FALSE, 0);
+
+  table := gtk_table_new (2, 2, FALSE);
+  gtk_table_set_row_spacings (GTK_TABLE (table), 4);
+  gtk_table_set_col_spacings (GTK_TABLE (table), 4);
+  gtk_box_pack_start (GTK_BOX (hbox), table, TRUE, TRUE, 0);
+  thelabel := gtk_label_new_with_mnemonic ('_Entry 1');
+  gtk_table_attach_defaults (GTK_TABLE (table),
+                                         thelabel,
+                                         0, 1, 0, 1);
+  local_entry1 := gtk_entry_new ();
+  gtk_entry_set_text (GTK_ENTRY (local_entry1), gtk_entry_get_text (GTK_ENTRY (dialog_entry1)));
+  gtk_table_attach_defaults (GTK_TABLE (table), local_entry1, 1, 2, 0, 1);
+  gtk_label_set_mnemonic_widget (GTK_LABEL (thelabel), local_entry1);
+
+  thelabel := gtk_label_new_with_mnemonic ('E_ntry 2');
+  gtk_table_attach_defaults (GTK_TABLE (table),
+                                         thelabel,
+                                         0, 1, 1, 2);
+
+  local_entry2 := gtk_entry_new ();
+  gtk_entry_set_text (GTK_ENTRY (local_entry2), gtk_entry_get_text (GTK_ENTRY (dialog_entry2)));
+  gtk_table_attach_defaults (GTK_TABLE (table), local_entry2, 1, 2, 1, 2);
+  gtk_label_set_mnemonic_widget (GTK_LABEL (thelabel), local_entry2);
+
+  gtk_widget_show_all (hbox);
+  response := gtk_dialog_run (GTK_DIALOG (dialog));
+
+  if response = GTK_RESPONSE_OK then
+  begin
+    gtk_entry_set_text (GTK_ENTRY (dialog_entry1), gtk_entry_get_text (GTK_ENTRY (local_entry1)));
+    gtk_entry_set_text (GTK_ENTRY (dialog_entry2), gtk_entry_get_text (GTK_ENTRY (local_entry2)));
+  end;
+
+  gtk_widget_destroy (dialog);
+end;
+
+
+function do_dialog         : PGtkWidget;
+
+var
+  frame,
+  vbox,
+  vbox2,
+  hbox,
+  button,
+  table,
+  thelabel  : PGtkWidget;
+
+begin
+  dialog_i := 1;
+
+  if dialog_window = NULL then
+  begin
+    dialog_window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_window_set_title (GTK_WINDOW (dialog_window), 'Dialogs');
+
+    g_signal_connect (dialog_window, 'destroy', G_CALLBACK (@gtk_widget_destroyed), @dialog_window);
+    gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 8);
+
+    frame := gtk_frame_new ('Dialogs');
+    gtk_container_add (GTK_CONTAINER (dialog_window), frame);
+
+    vbox := gtk_vbox_new (FALSE, 8);
+    gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
+    gtk_container_add (GTK_CONTAINER (frame), vbox);
+
+    (* Standard message dialog *)
+    hbox := gtk_hbox_new (FALSE, 8);
+    gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+
+    button := gtk_button_new_with_mnemonic ('_Message Dialog');
+    g_signal_connect (button, 'clicked',
+                        G_CALLBACK (@message_dialog_clicked), @dialog_window);
+
+    gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
+
+    gtk_box_pack_start (GTK_BOX (vbox), gtk_hseparator_new (), FALSE, FALSE, 0);
+
+    (* Interactive dialog*)
+    hbox := gtk_hbox_new (FALSE, 8);
+    gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+    vbox2 := gtk_vbox_new (FALSE, 0);
+
+    button := gtk_button_new_with_mnemonic ('_Interactive Dialog');
+    g_signal_connect (button, 'clicked',
+                        G_CALLBACK (@interactive_dialog_clicked), @dialog_window);
+    gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (vbox2), button, FALSE, FALSE, 0);
+
+    table := gtk_table_new (2, 2, FALSE);
+    gtk_table_set_row_spacings (GTK_TABLE (table), 4);
+    gtk_table_set_col_spacings (GTK_TABLE (table), 4);
+    gtk_box_pack_start (GTK_BOX (hbox), table, FALSE, FALSE, 0);
+
+    thelabel := gtk_label_new_with_mnemonic ('_Entry 1');
+    gtk_table_attach_defaults (GTK_TABLE (table),
+                                 thelabel,
+                                      0, 1, 0, 1);
+
+    dialog_entry1 := gtk_entry_new ();
+    gtk_table_attach_defaults (GTK_TABLE (table), dialog_entry1, 1, 2, 0, 1);
+    gtk_label_set_mnemonic_widget (GTK_LABEL (thelabel), dialog_entry1);
+
+    thelabel := gtk_label_new_with_mnemonic ('E_ntry 2');
+
+    gtk_table_attach_defaults (GTK_TABLE (table),
+                                 thelabel,
+                                 0, 1, 1, 2);
+
+    dialog_entry2 := gtk_entry_new ();
+    gtk_table_attach_defaults (GTK_TABLE (table), dialog_entry2, 1, 2, 1, 2);
+    gtk_label_set_mnemonic_widget (GTK_LABEL (thelabel), dialog_entry2);
+  end;
+
+  if not GTK_WIDGET_VISIBLE (dialog_window) then
+    gtk_widget_show_all (dialog_window)
+
+  else begin
+    gtk_widget_destroy (dialog_window);
+    dialog_window := NULL;
+  end;
+
+  do_dialog := dialog_window;
+end;
+
+

+ 320 - 0
packages/extra/gtk2/examples/gtk_demo/drawingarea.inc

@@ -0,0 +1,320 @@
+(* Drawing Area
+ *
+ * GtkDrawingArea is a blank area where you can draw custom displays
+ * of various kinds.
+ *
+ * This demo has two drawing areas. The checkerboard area shows
+ * how you can just draw something; all you have to do is write
+ * a signal handler for expose_event, as shown here.
+ *
+ * The "scribble" area is a bit more advanced, and shows how to handle
+ * events such as button presses and mouse motion. Click the mouse
+ * and drag in the scribble area to draw squiggles. Resize the window
+ * to clear the area.
+ *)
+
+
+var
+  da_window : PGtkWidget;
+
+(* Pixmap for scribble area, to store current scribbles *)
+  da_pixmap : PGdkPixmap;
+
+(* Create a new pixmap of the appropriate size to store our scribbles *)
+
+function scribble_configure_event (widget : PGtkWidget;
+                                   event  : PGdkEventConfigure;
+                                   data   : gpointer): gboolean; cdecl;
+
+begin
+  if da_pixmap <> NULL then
+    g_object_unref (G_OBJECT (da_pixmap));
+
+  da_pixmap := gdk_pixmap_new (widget^.window,
+                   widget^.allocation.width,
+                   widget^.allocation.height,
+                   -1);
+
+  (* Initialize the pixmap to white *)
+  gdk_draw_rectangle (da_pixmap,
+                      widget^.style^.white_gc,
+                      gTRUE,
+                      0, 0,
+                      widget^.allocation.width,
+                      widget^.allocation.height);
+
+  (* We've handled the configure event, no need for further processing. *)
+  scribble_configure_event := TRUE;
+
+end;
+
+(* Redraw the screen from the pixmap *)
+function scribble_expose_event (widget : PGtkWidget;
+                                event  : PGdkEventExpose;
+                                data   : gpointer): gboolean; cdecl;
+
+begin
+  (* We use the "foreground GC" for the widget since it already exists,
+   * but honestly any GC would work. The only thing to worry about
+   * is whether the GC has an inappropriate clip region set.
+   *)
+
+  gdk_draw_drawable (widget^.window,
+                     widget^.style^.fg_gc[GTK_WIDGET_STATE (widget)],
+                     da_pixmap,
+                     (* Only copy the area that was exposed. *)
+                     event^.area.x, event^.area.y,
+                     event^.area.x, event^.area.y,
+                     event^.area.width, event^.area.height);
+
+  scribble_expose_event := FALSE;
+end;
+
+(* Draw a rectangle on the screen *)
+procedure draw_brush (widget : PGtkWidget;
+                      x, y   : gdouble);
+var
+  update_rect : TGdkRectangle;
+
+begin
+  update_rect.x := round (x - 3);
+  update_rect.y := round (y - 3);
+  update_rect.width := 6;
+  update_rect.height := 6;
+
+  (* Paint to the pixmap, where we store our state *)
+  gdk_draw_rectangle (da_pixmap,
+              widget^.style^.black_gc,
+                      gTRUE,
+                      update_rect.x, update_rect.y,
+                      update_rect.width, update_rect.height);
+
+  (* Now invalidate the affected region of the drawing area. *)
+  gdk_window_invalidate_rect (widget^.window,
+                              @update_rect,
+                              FALSE);
+end;
+
+function scribble_button_press_event (widget : PGtkWidget;
+                                      event  : PGdkEventButton;
+                                      data   : gpointer): gboolean; cdecl;
+begin
+  if da_pixmap = NULL then
+    exit (FALSE); (* paranoia check, in case we haven't gotten a configure event *)
+
+  if event^.button = 1 then
+    draw_brush (widget, event^.x, event^.y);
+
+  (* We've handled the event, stop processing *)
+  exit (TRUE);
+end;
+
+function scribble_motion_notify_event (widget : PGtkWidget;
+                                       event  : PGdkEventButton;
+                                       data   : gpointer): gboolean; cdecl;
+var
+  x, y   : gint;
+  state  : TGdkModifierType;
+
+begin
+  if da_pixmap = NULL then
+    exit (FALSE);  (* paranoia check, in case we haven't gotten a configure event *)
+
+  (* This call is very important; it requests the next motion event.
+   * If you don't call gdk_window_get_pointer() you'll only get
+   * a single motion event. The reason is that we specified
+   * GDK_POINTER_MOTION_HINT_MASK to gtk_widget_set_events().
+   * If we hadn't specified that, we could just use event->x, event->y
+   * as the pointer location. But we'd also get deluged in events.
+   * By requesting the next event as we handle the current one,
+   * we avoid getting a huge number of events faster than we
+   * can cope.
+   *)
+
+  gdk_window_get_pointer (event^.window, @x, @y, @state);
+
+  if (state and GDK_BUTTON1_MASK) <> 0 then
+    draw_brush (widget, x, y);
+
+  (* We've handled it, stop processing *)
+  exit (TRUE);
+end;
+
+
+const
+  CHECK_SIZE = 10;
+  SPACING    =  2;
+
+function checkerboard_expose (da     : PGtkWidget;
+                              event  : PGdkEventButton;
+                              data   : gpointer): gboolean; cdecl;
+var
+  i, j,
+  xcount, ycount : gint;
+  gc1, gc2, gc   : PGdkGc;
+  color          : TGdkColor;
+
+begin
+  (* At the start of an expose handler, a clip region of event->area
+   * is set on the window, and event->area has been cleared to the
+   * widget's background color. The docs for
+   * gdk_window_begin_paint_region() give more details on how this
+   * works.
+   *)
+
+  (* It would be a bit more efficient to keep these
+   * GC's around instead of recreating on each expose, but
+   * this is the lazy/slow way.
+   *)
+  gc1 := gdk_gc_new (da^.window);
+  color.red   := $7530;
+  color.green := $0;
+  color.blue  := $7530;
+
+  gdk_gc_set_rgb_fg_color (gc1, @color);
+
+  gc2 := gdk_gc_new (da^.window);
+  color.red   := $ffff;
+  color.green := $ffff;
+  color.blue  := $ffff;
+
+  gdk_gc_set_rgb_fg_color (gc2, @color);
+
+  xcount := 0;
+  i := SPACING;
+  while i < da^.allocation.width do
+  begin
+    j := SPACING;
+    ycount := xcount mod 2; (* start with even/odd depending on row *)
+    while j < da^.allocation.height do
+    begin
+          if (ycount mod 2) <> 0 then
+            gc := gc1
+          else
+            gc := gc2;
+
+          (* If we're outside event->area, this will do nothing.
+           * It might be mildly more efficient if we handled
+           * the clipping ourselves, but again we're feeling lazy.
+           *)
+          gdk_draw_rectangle (da^.window,
+                              gc,
+                              gTRUE,
+                              i, j,
+                              CHECK_SIZE,
+                              CHECK_SIZE);
+
+          j := j + CHECK_SIZE + SPACING;
+          inc (ycount);
+    end;
+
+      i := i + CHECK_SIZE + SPACING;
+      inc (xcount);
+  end;
+
+  g_object_unref (G_OBJECT (gc1));
+  g_object_unref (G_OBJECT (gc2));
+
+  (* return TRUE because we've handled this event, so no
+   * further processing is required.
+   *)
+  checkerboard_expose := TRUE;
+end;
+
+function do_drawingarea    : PGtkWidget;
+var
+  frame,
+  vbox,
+  da,
+  thelabel  : PGtkWidget;
+
+begin
+  if da_window = NULL then
+  begin
+    da_window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_window_set_title (GTK_WINDOW (da_window), 'Drawing Area');
+
+    g_signal_connect (da_window, 'destroy', G_CALLBACK (@gtk_widget_destroyed), @da_window);
+
+    gtk_container_set_border_width (GTK_CONTAINER (da_window), 8);
+
+    vbox := gtk_vbox_new (FALSE, 8);
+    gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
+    gtk_container_add (GTK_CONTAINER (da_window), vbox);
+
+    (*
+     * Create the checkerboard area
+     *)
+
+    thelabel := gtk_label_new (NULL);
+    gtk_label_set_markup (GTK_LABEL (thelabel),
+                          '<u>Checkerboard pattern</u>');
+    gtk_box_pack_start (GTK_BOX (vbox), thelabel, FALSE, FALSE, 0);
+
+    frame := gtk_frame_new (NULL);
+    gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
+    gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0);
+
+    da := gtk_drawing_area_new ();
+    (* set a minimum size *)
+    gtk_widget_set_size_request (da, 100, 100);
+
+    gtk_container_add (GTK_CONTAINER (frame), da);
+
+    g_signal_connect (da, 'expose_event',
+                      G_CALLBACK (@checkerboard_expose), NULL);
+
+    (*
+     * Create the scribble area
+     *)
+
+    thelabel := gtk_label_new (NULL);
+    gtk_label_set_markup (GTK_LABEL (thelabel),
+                          '<u>Scribble area</u>');
+    gtk_box_pack_start (GTK_BOX (vbox), thelabel, FALSE, FALSE, 0);
+
+    frame := gtk_frame_new (NULL);
+    gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
+    gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0);
+
+    da := gtk_drawing_area_new ();
+    (* set a minimum size *)
+    gtk_widget_set_size_request (da, 100, 100);
+
+    gtk_container_add (GTK_CONTAINER (frame), da);
+
+    (* Signals used to handle backing pixmap *)
+
+    g_signal_connect (da, 'expose_event',
+                      G_CALLBACK (@scribble_expose_event), NULL);
+    g_signal_connect (da,'configure_event',
+                      G_CALLBACK (@scribble_configure_event), NULL);
+
+    (* Event signals *)
+
+    g_signal_connect (da, 'motion_notify_event',
+                        G_CALLBACK (@scribble_motion_notify_event), NULL);
+    g_signal_connect (da, 'button_press_event',
+                        G_CALLBACK (@scribble_button_press_event), NULL);
+
+
+    (* Ask to receive events the drawing area doesn't normally
+     * subscribe to
+     *)
+      gtk_widget_set_events (da, gtk_widget_get_events (da)
+                             or GDK_LEAVE_NOTIFY_MASK
+                             or GDK_BUTTON_PRESS_MASK
+                             or GDK_POINTER_MOTION_MASK
+                             or GDK_POINTER_MOTION_HINT_MASK);
+
+  end;
+
+  if not GTK_WIDGET_VISIBLE (da_window) then
+    gtk_widget_show_all (da_window)
+  else begin
+    gtk_widget_destroy (da_window);
+    da_window := NULL;
+  end;
+
+  do_drawingarea := da_window;
+end;

+ 314 - 0
packages/extra/gtk2/examples/gtk_demo/editable_cells.inc

@@ -0,0 +1,314 @@
+(* Tree View/Editable Cells
+ *
+ * This demo demonstrates the use of editable cells in a GtkTreeView. If
+ * you're new to the GtkTreeView widgets and associates, look into
+ * the GtkListStore example first.
+ *
+ *)
+
+ (*
+  * todo: translate to pascal
+  *)
+
+function do_editable_cells : PGtkWidget;
+begin
+  do_dummy ('Tree View / Editable Cells - Demo');
+  do_editable_cells := NULL;
+end;
+
+
+(*
+#include <gtk/gtk.h>
+#include <string.h>
+#include <stdlib.h>
+
+static GtkWidget *window = NULL;
+
+typedef struct
+{
+  gint     number;
+  gchar   *product;
+  gboolean editable;
+}
+Item;
+
+enum
+{
+  COLUMN_NUMBER,
+  COLUMN_PRODUCT,
+  COLUMN_EDITABLE,
+  NUM_COLUMNS
+};
+
+static GArray *articles = NULL;
+
+static void
+add_items (void)
+{
+  Item foo;
+
+  g_return_if_fail (articles != NULL);
+
+  foo.number = 3;
+  foo.product = g_strdup ("bottles of coke");
+  foo.editable = TRUE;
+  g_array_append_vals (articles, &foo, 1);
+
+  foo.number = 5;
+  foo.product = g_strdup ("packages of noodles");
+  foo.editable = TRUE;
+  g_array_append_vals (articles, &foo, 1);
+
+  foo.number = 2;
+  foo.product = g_strdup ("packages of chocolate chip cookies");
+  foo.editable = TRUE;
+  g_array_append_vals (articles, &foo, 1);
+
+  foo.number = 1;
+  foo.product = g_strdup ("can vanilla ice cream");
+  foo.editable = TRUE;
+  g_array_append_vals (articles, &foo, 1);
+
+  foo.number = 6;
+  foo.product = g_strdup ("eggs");
+  foo.editable = TRUE;
+  g_array_append_vals (articles, &foo, 1);
+}
+
+static GtkTreeModel *
+create_model (void)
+{
+  gint i = 0;
+  GtkListStore *model;
+  GtkTreeIter iter;
+
+  /* create array */
+  articles = g_array_sized_new (FALSE, FALSE, sizeof (Item), 1);
+
+  add_items ();
+
+  /* create list store */
+  model = gtk_list_store_new (NUM_COLUMNS, G_TYPE_INT, G_TYPE_STRING,
+                              G_TYPE_BOOLEAN);
+
+  /* add items */
+  for (i = 0; i < articles->len; i++)
+    {
+      gtk_list_store_append (model, &iter);
+
+      gtk_list_store_set (model, &iter,
+                          COLUMN_NUMBER,
+                          g_array_index (articles, Item, i).number,
+                          COLUMN_PRODUCT,
+                          g_array_index (articles, Item, i).product,
+                          COLUMN_EDITABLE,
+                          g_array_index (articles, Item, i).editable,
+                          -1);
+    }
+
+  return GTK_TREE_MODEL (model);
+}
+
+static void
+add_item (GtkWidget *button, gpointer data)
+{
+  Item foo;
+  GtkTreeIter iter;
+  GtkTreeModel *model = (GtkTreeModel * )data;
+
+  g_return_if_fail (articles != NULL);
+
+  foo.number = 0;
+  foo.product = g_strdup ("Description here");
+  foo.editable = TRUE;
+  g_array_append_vals (articles, &foo, 1);
+
+  gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+  gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+                      COLUMN_NUMBER, foo.number,
+                      COLUMN_PRODUCT, foo.product,
+                      COLUMN_EDITABLE, foo.editable,
+                      -1);
+}
+
+static void
+remove_item (GtkWidget *widget, gpointer data)
+{
+  GtkTreeIter iter;
+  GtkTreeView *treeview = (GtkTreeView * )data;
+  GtkTreeModel *model = gtk_tree_view_get_model (treeview);
+  GtkTreeSelection *selection = gtk_tree_view_get_selection (treeview);
+
+  if (gtk_tree_selection_get_selected (selection, NULL, &iter))
+    {
+      gint i;
+      GtkTreePath *path;
+
+      path = gtk_tree_model_get_path (model, &iter);
+      i = gtk_tree_path_get_indices (path)[0];
+      gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+
+      g_array_remove_index (articles, i);
+
+      gtk_tree_path_free (path);
+    }
+}
+
+static void
+cell_edited (GtkCellRendererText *cell,
+             const gchar         *path_string,
+             const gchar         *new_text,
+             gpointer             data)
+{
+  GtkTreeModel *model = (GtkTreeModel * )data;
+  GtkTreePath *path = gtk_tree_path_new_from_string (path_string);
+  GtkTreeIter iter;
+
+  gint *column;
+
+  column = g_object_get_data (G_OBJECT (cell), "column");
+
+  gtk_tree_model_get_iter (model, &iter, path);
+
+  switch (GPOINTER_TO_INT (column))
+    {
+    case COLUMN_NUMBER:
+      {
+        gint i;
+
+        i = gtk_tree_path_get_indices (path)[0];
+        g_array_index (articles, Item, i).number = atoi (new_text);
+
+        gtk_list_store_set (GTK_LIST_STORE (model), &iter, column,
+                            g_array_index (articles, Item, i).number, -1);
+      }
+      break;
+
+    case COLUMN_PRODUCT:
+      {
+        gint i;
+        gchar *old_text;
+
+        gtk_tree_model_get (model, &iter, column, &old_text, -1);
+        g_free (old_text);
+
+        i = gtk_tree_path_get_indices (path)[0];
+        g_free (g_array_index (articles, Item, i).product);
+        g_array_index (articles, Item, i).product = g_strdup (new_text);
+
+        gtk_list_store_set (GTK_LIST_STORE (model), &iter, column,
+                            g_array_index (articles, Item, i).product, -1);
+      }
+      break;
+    }
+
+  gtk_tree_path_free (path);
+}
+
+static void
+add_columns (GtkTreeView *treeview)
+{
+  GtkCellRenderer *renderer;
+  GtkTreeModel *model = gtk_tree_view_get_model (treeview);
+
+  /* number column */
+  renderer = gtk_cell_renderer_text_new ();
+  g_signal_connect (G_OBJECT (renderer), "edited",
+                    G_CALLBACK (cell_edited), model);
+  g_object_set_data (G_OBJECT (renderer), "column", (gint * )COLUMN_NUMBER);
+
+  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
+                                               -1, "Number", renderer,
+                                               "text", COLUMN_NUMBER,
+                                               "editable", COLUMN_EDITABLE,
+                                               NULL);
+
+  /* product column */
+  renderer = gtk_cell_renderer_text_new ();
+  g_signal_connect (G_OBJECT (renderer), "edited",
+                    G_CALLBACK (cell_edited), model);
+  g_object_set_data (G_OBJECT (renderer), "column", (gint * )COLUMN_PRODUCT);
+
+  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
+                                               -1, "Product", renderer,
+                                               "text", COLUMN_PRODUCT,
+                                               "editable", COLUMN_EDITABLE,
+                                               NULL);
+}
+
+GtkWidget *
+do_editable_cells (void)
+{
+  if (!window)
+    {
+      GtkWidget *vbox;
+      GtkWidget *hbox;
+      GtkWidget *sw;
+      GtkWidget *treeview;
+      GtkWidget *button;
+      GtkTreeModel *model;
+
+      /* create window, etc */
+      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_title (GTK_WINDOW (window), "Shopping list");
+      gtk_container_set_border_width (GTK_CONTAINER (window), 5);
+      g_signal_connect (G_OBJECT (window), "destroy",
+                        G_CALLBACK (gtk_widget_destroyed), &window);
+
+      vbox = gtk_vbox_new (FALSE, 5);
+      gtk_container_add (GTK_CONTAINER (window), vbox);
+
+      gtk_box_pack_start (GTK_BOX (vbox),
+                          gtk_label_new ("Shopping list (you can edit the cells!)"),
+                          FALSE, FALSE, 0);
+
+      sw = gtk_scrolled_window_new (NULL, NULL);
+      gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
+                                           GTK_SHADOW_ETCHED_IN);
+      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
+                                      GTK_POLICY_AUTOMATIC,
+                                      GTK_POLICY_AUTOMATIC);
+      gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0);
+
+      /* create model */
+      model = create_model ();
+
+      /* create tree view */
+      treeview = gtk_tree_view_new_with_model (model);
+      g_object_unref (G_OBJECT (model));
+      gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview), TRUE);
+      gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)),
+                                   GTK_SELECTION_SINGLE);
+
+      add_columns (GTK_TREE_VIEW (treeview));
+
+      gtk_container_add (GTK_CONTAINER (sw), treeview);
+
+      /* some buttons */
+      hbox = gtk_hbox_new (TRUE, 4);
+      gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+
+      button = gtk_button_new_with_label ("Add item");
+      g_signal_connect (G_OBJECT (button), "clicked",
+                        G_CALLBACK (add_item), model);
+      gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
+
+      button = gtk_button_new_with_label ("Remove item");
+      g_signal_connect (G_OBJECT (button), "clicked",
+                        G_CALLBACK (remove_item), treeview);
+      gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
+
+      gtk_window_set_default_size (GTK_WINDOW (window), 320, 200);
+    }
+
+  if (!GTK_WIDGET_VISIBLE (window))
+    gtk_widget_show_all (window);
+  else
+    {
+      gtk_widget_destroy (window);
+      window = NULL;
+    }
+
+  return window;
+}
+*)

+ 1092 - 0
packages/extra/gtk2/examples/gtk_demo/gtk_demo.pas

@@ -0,0 +1,1092 @@
+(* GTK Demo for Pascal
+ *
+ * Welcome to GTK Demo for Pascal.
+ *
+ *
+ * This demo is an adaption of the GTK Demo included in the GTK+-2.0 source.
+ * A new feature is syntax highligting for pascal.
+ *)
+
+program gtk_demo;
+
+{$mode objfpc} {$H+}
+uses glib2, pango, gdk2, gtk2, gdk2pixbuf, strings, math;
+
+var
+  info_buffer   : PGtkTextBuffer;
+  source_buffer : PGtkTextBuffer;
+  current_file  : pgchar;
+
+
+
+type
+  TFileOfChar = file of char;
+
+  TGDoDemoFunc = function : PGtkWidget;
+
+  PDemo = ^TDemo;
+  TDemo = record
+            title    : pgchar;
+            filename : pgchar;
+            func     : TGDoDemoFunc;
+            children : PDemo;
+          end;
+
+  PCallbackData = ^TCallbackData;
+  TCallbackData = record
+                    model : PGtkTreeModel;
+                    path  : PGtkTreePath;
+                  end;
+
+const
+
+  DEMO_DATA_DIR   = 'data';
+
+  TITLE_COLUMN    = 0;
+  FILENAME_COLUMN = 1;
+  FUNC_COLUMN     = 2;
+  ITALIC_COLUMN   = 3;
+  NUM_COLUMNS     = 4;
+
+  STATE_NORMAL     = 0;
+  STATE_IN_COMMENT = 1;
+
+  function demo_find_file (    base : pchar; err  : PPGError): pgchar; forward;
+
+  (* file_is_valid
+   *  a dirty little hack to find out if a file variable is assigned and the
+   *  file is opened.
+   *)
+  function file_is_valid (var f: file): boolean;
+  begin
+    {$I-}
+    if eof(f) then
+      exit (TRUE);
+    {$I+}
+    if IOResult <> 0 then
+      file_is_valid := FALSE
+    else
+      file_is_valid := TRUE;
+  end;
+
+  (* min, max
+   *  these two functions of the math unit are overloaded to understand double
+   *  values.
+   *)
+  function min (d1, d2: double): double;
+  begin
+    if d1 > d2 then  min := d2
+    else min := d1;
+  end;
+
+  function max (d1, d2: double): double;
+  begin
+    if d1 < d2 then max := d2
+    else max := d1;
+  end;
+
+  (* do_dummy
+   *  creates a widget informing the user that the demo isn't implemented, yet
+   *)
+
+  procedure do_dummy (demo : pgchar);
+  var
+    dialog : PGtkWidget;
+  begin
+   dialog := gtk_message_dialog_new (NULL, 0,
+                                       GTK_MESSAGE_INFO,
+                                       GTK_BUTTONS_CLOSE,
+                                       'Sorry, "%s" is''t implemented, yet.',
+                                       [demo]);
+
+    gtk_widget_show (dialog);
+
+    g_signal_connect (dialog, 'response',
+                        G_CALLBACK (@gtk_widget_destroy), NULL);
+  end;
+
+  (* include the modules here;
+   * if you'd like to add one add the include command and
+   * create a new entry in the testgtk_demos array
+   *)
+
+  {$include appwindow.inc}
+  {$include button_box.inc}
+  {$include colorsel.inc}
+  {$include dialog.inc}
+  {$include drawingarea.inc}
+  {$include editable_cells.inc}
+  {$include images.inc}
+  {$include item_factory.inc}
+  {$include list_store.inc}
+  {$include menus.inc}
+  {$include panes.inc}
+  {$include pixbufs.inc}
+  {$include sizegroup.inc}
+  {$include stock_browser.inc}
+  {$include textview.inc}
+  {$include tree_store.inc}
+
+
+const
+  child0 : array [1..4] of TDemo  = (
+      (title: 'Editable Cells'; filename: 'editable_cells.inc'; func: @do_editable_cells; children: nil),
+      (title: 'List Store';     filename: 'list_store.inc';     func: @do_list_store;     children: nil),
+      (title: 'Tree Store';     filename: 'tree_store.inc';     func: @do_tree_store;     children: nil),
+      (title: nil;              filename: nil;                  func: nil;                children: nil));
+
+  testgtk_demos: array [1..16] of TDemo  = (
+      (title: '* This Application *';        filename: 'gtk_demo.pas';      func: nil;               children: nil),
+      (title: 'Application main window';     filename: 'appwindow.inc';     func: @do_appwindow;     children: nil),
+      (title: 'Button Boxes';                filename: 'button_box.inc';    func: @do_button_box;    children: nil),
+      (title: 'Color Selector';              filename: 'colorsel.inc';      func: @do_colorsel;      children: nil),
+      (title: 'Dialog and Message Boxes';    filename: 'dialog.inc';        func: @do_dialog;        children: nil),
+      (title: 'Drawing Area';                filename: 'drawingarea.inc';   func: @do_drawingarea;   children: nil),
+      (title: 'Images';                      filename: 'images.inc';        func: @do_images;        children: nil),
+      (title: 'Item Factory';                filename: 'item_factory.inc';  func: @do_item_factory;  children: nil),
+      (title: 'Menus';                       filename: 'menus.inc';         func: @do_menus;         children: nil),
+      (title: 'Paned Widgets';               filename: 'panes.inc';         func: @do_panes;         children: nil),
+      (title: 'Pixbufs';                     filename: 'pixbufs.inc';       func: @do_pixbufs;       children: nil),
+      (title: 'Size Groups';                 filename: 'sizegroup.inc';     func: @do_sizegroup;     children: nil),
+      (title: 'Stock Item and Icon Browser'; filename: 'stock_browser.inc'; func: @do_stock_browser; children: nil),
+      (title: 'Text Widget';                 filename: 'textview.inc';      func: @do_textview;      children: nil),
+      (title: 'Tree View';                   filename: nil;                 func: nil;               children: @child0),
+      (title:  nil;                          filename: nil;                 func: nil;               children: nil));
+
+
+function demo_find_file (    base : pchar;
+                             err  : PPGError): pgchar;
+var
+  filename : pchar;
+
+begin
+
+  if g_file_test (base, G_FILE_TEST_EXISTS) then begin
+    demo_find_file := g_strdup (base);
+    exit;
+  end else
+  begin
+    filename := g_build_filename (DEMO_DATA_DIR, [ base, NULL ]);
+
+    if not (g_file_test (filename, G_FILE_TEST_EXISTS)) then
+    begin
+      g_set_error (err, G_FILE_ERROR, G_FILE_ERROR_NOENT,
+                  'Cannot find demo data file "%s"', [base]);
+      g_free (filename);
+      demo_find_file := NULL;
+    end else
+      demo_find_file := filename;
+  end;
+end;
+
+
+function create_text (var buffer : PGtkTextBuffer;
+                      is_source  : gboolean): PGtkWidget;
+var
+  scrolled_window,
+  text_view         : PGtkWidget;
+
+  font_desc         : PPangoFontDescription;
+
+begin
+  scrolled_window := gtk_scrolled_window_new (NULL, NULL);
+
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
+                                  GTK_POLICY_AUTOMATIC,
+                                  GTK_POLICY_AUTOMATIC);
+
+  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window),
+                                       GTK_SHADOW_IN);
+
+  text_view := gtk_text_view_new;
+
+  buffer := gtk_text_buffer_new (NULL);
+
+  gtk_text_view_set_buffer (GTK_TEXT_VIEW (text_view), buffer);
+  gtk_text_view_set_editable (GTK_TEXT_VIEW (text_view), FALSE);
+  gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (text_view), FALSE);
+
+  gtk_container_add (GTK_CONTAINER (scrolled_window), text_view);
+
+  if is_source then
+  begin
+      font_desc := pango_font_description_from_string ('Courier 12');
+      gtk_widget_modify_font (text_view, font_desc);
+      pango_font_description_free (font_desc);
+
+      gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (text_view),
+                                   GTK_WRAP_NONE);
+  end else
+  begin
+        (* Make it a bit nicer for text. *)
+      gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (text_view),
+                                   GTK_WRAP_WORD);
+      gtk_text_view_set_pixels_above_lines (GTK_TEXT_VIEW (text_view),  2);
+      gtk_text_view_set_pixels_below_lines (GTK_TEXT_VIEW (text_view),  2);
+  end;
+
+  create_text := scrolled_window;
+end;
+
+
+const
+  tokens: array [1..4] of pgchar =
+      ('(*',
+       '''',
+       '{',
+       '//');
+
+  types: array [1..57] of pgchar =
+      ('integer',
+       'gchar',
+       'pgchar',
+       'char',
+       'gfloat',
+       'real',
+       'gint8',
+       'gint16',
+       'gint32',
+       'gint',
+       'guint',
+       'guint8',
+       'guint16',
+       'guint32',
+       'guchar',
+       'glong',
+       'longint',
+       'gboolean' ,
+       'gshort',
+       'gushort',
+       'gulong',
+       'gdouble',
+       'double',
+       'gldouble',
+       'gpointer',
+       'pointer',
+       'NULL',
+       'nil',
+       'PGList',
+       'TGList',
+       'TGSList',
+       'PGSList',
+       'FALSE',
+       'TRUE',
+       'PGtkObject',
+       'TGtkObject',
+       'TGtkColorSelection',
+       'PGtkColorSelection',
+       'PGtkWidget',
+       'TGtkWidget',
+       'PGtkButton',
+       'TGtkButton',
+       'TGdkColor',
+       'PGdkColor',
+       'TGdkRectangle',
+       'PGdkRectangle',
+       'TGdkEventExpose',
+       'PGdkEventExpose',
+       'TGdkGC',
+       'PGdkGC',
+       'TGdkPixbufLoader',
+       'PGdkPixbufLoader',
+       'TGdkPixbuf',
+       'PGdkPixbuf',
+       'PPGError',
+       'PGError',
+       'array');
+
+  control: array [1..23] of pgchar = (
+       'if',
+       'then',
+       'case',
+       'while',
+       'else',
+       'do',
+       'for',
+       'begin',
+       'end',
+       'exit',
+       'goto',
+       'program',
+       'unit',
+       'library',
+       'procedure',
+       'function',
+       'type',
+       'var',
+       'const',
+       'record',
+       'uses',
+       'of',
+       'in');
+
+procedure parse_chars ( text        :  pgchar;
+                        var end_ptr :  pgchar;
+                        var state   :  gint;
+                        var tag     :  pgchar;
+                        start       :  gboolean);
+var
+  i          : gint;
+  next_token : pgchar;
+
+  maybe_escape : boolean;
+begin
+ (* leave out leading spaces *)
+  while (text^ <> #0) and (g_ascii_isspace (text^)) do
+    inc (text);
+
+  (* Handle comments first *)
+
+  if state = STATE_IN_COMMENT then
+  begin
+    end_ptr    := StrPos (text, '*)');
+    next_token := StrPos (text, '}');
+
+    if next_token > end_ptr then begin
+      end_ptr := next_token + 1;        // '}' comment type
+      state   := STATE_NORMAL;
+          tag     := 'comment';
+    end else
+      if end_ptr <> NULL then
+      begin
+            end_ptr := end_ptr + 2;         // '* )' comment type
+            state   := STATE_NORMAL;
+            tag     := 'comment';
+      end;
+
+    exit;
+  end;
+
+  tag := NULL;
+  end_ptr := NULL;
+
+  if text^ = #0 then
+    exit;
+
+  (* check for preprocessor defines *)
+
+  if (((StrLComp (text, '(*', 2)) = 0) and (text[2] = '$') ) or
+     (((StrLComp (text, '{', 1)) = 0) and (text[1] = '$') ) then
+  begin
+    end_ptr    := StrPos (text, '*)');
+    next_token := StrPos (text, '}');
+
+    if next_token > end_ptr then
+      end_ptr := next_token + 1
+    else
+      if end_ptr <> NULL then
+        end_ptr := end_ptr + 2;
+
+    tag := 'preprocessor';
+    exit;
+  end;
+
+
+
+  (* check for comment *)
+
+  if ((StrLComp (text, '(*', 2)) = 0) or
+     ((StrLComp (text, '{', 1)) = 0)  then
+  begin
+    end_ptr    := StrPos (text, '*)');
+    next_token := StrPos (text, '}');
+
+    if next_token > end_ptr then
+      end_ptr := next_token+1
+    else begin
+      if end_ptr <> NULL then
+        end_ptr := end_ptr + 2
+      else
+            state := STATE_IN_COMMENT;
+    end;
+    tag   := 'comment';
+    exit;
+  end;
+
+  if (StrLComp (text, '//', 2)) = 0 then
+  begin
+    end_ptr := NULL;
+    tag := 'comment';
+    exit;
+  end;
+
+  (* check for types *)
+
+  for i := 1 to high (types) do
+    if ((StrLComp (text, types[i], strlen (types[i]))) = 0 )  and
+        ((text+strlen(types[i]))^ in [#8, #32, #0, ';', #13, #10, ')', ']', ':']) then
+    begin
+          end_ptr := text + strlen (types[i]);
+          tag := 'type';
+      exit;
+    end;
+
+  (* check for control *)
+  for i := 1 to  high (control) do begin
+    if ((StrLComp (text, control[i], strlen (control[i]))) = 0) and
+         ((text+strlen(control[i]))^ in [#8, #32, #0, ';', #13, #10, ')', ']', ':'])  then
+    begin
+          end_ptr := text + strlen (control[i]);
+          tag := 'control';
+      exit;
+    end;
+  end;
+
+  (* check for string *)
+  if text^= '''' then
+  begin
+    maybe_escape := FALSE;
+
+    end_ptr := text + 1;
+    tag := 'string';
+
+    while end_ptr^ <> #0 do
+    begin
+          if (end_ptr^ = '''') and (maybe_escape = FALSE) then
+      begin
+        inc (end_ptr);
+        exit;
+      end;
+
+          if end_ptr^ = '\' then
+            maybe_escape := TRUE
+          else
+            maybe_escape := FALSE;
+
+          inc (end_ptr);
+    end;
+    exit;
+  end;
+
+
+  (* not at the start of a tag.  Find the next one. *)
+  for i := 1 to high(tokens) do
+  begin
+    next_token := StrPos (text, tokens[i]);
+    if next_token <> NULL then
+        begin
+          if end_ptr <> NULL then
+      begin
+            if end_ptr > next_token then
+          end_ptr := next_token;
+      end else
+            end_ptr := next_token;
+    end;
+  end;
+
+  for i := 1 to high(types) do
+  begin
+    next_token := StrPos (text, types[i]);
+    if next_token <> NULL then
+      if ( (next_token+strlen(types[i]))^
+          in [#8, #32, #0, ';', #13, #10, ')', ']', ':']) and
+          g_ascii_isspace ((next_token-1)^) then
+      begin
+            if end_ptr <> NULL then
+        begin
+              if end_ptr > next_token then
+            end_ptr := next_token;
+        end else
+              end_ptr := next_token;
+      end;
+  end;
+
+
+  for i := 1 to high(control) do
+  begin
+    next_token := StrPos (text, control[i]);
+    if next_token <> NULL then
+      if ( (next_token+strlen(control[i]))^
+          in [#8, #32, #0, ';', #13, #10, ')', ']', ':']) and
+          g_ascii_isspace ((next_token-1)^) then
+          begin
+            if end_ptr <> NULL then
+        begin
+              if end_ptr > next_token then
+            end_ptr := next_token;
+        end else
+              end_ptr := next_token;
+      end;
+  end;
+end;
+
+
+(* While not as cool as c-mode, this will do as a quick attempt at highlighting *)
+
+procedure fontify;
+
+var
+  start_iter,
+  next_iter,
+  tmp_iter    : TGtkTextIter;
+
+  state       : gint;
+  text        : pgchar;
+  start_ptr,
+
+  end_ptr     : pgchar;
+  tag         : pgchar;
+  start       : gboolean;
+
+begin
+  state := STATE_NORMAL;
+
+  gtk_text_buffer_get_iter_at_offset (source_buffer, @start_iter, 0);
+
+  next_iter := start_iter;
+
+  while (gtk_text_iter_forward_line (@next_iter)) do
+  begin
+    start := TRUE;
+    text  := gtk_text_iter_get_text ( @start_iter, @next_iter);
+    start_ptr := text;
+
+    repeat
+          parse_chars (start_ptr, end_ptr, state, tag, start);
+
+          start := FALSE;
+          if end_ptr <> NULL then begin
+        tmp_iter := start_iter;
+            gtk_text_iter_forward_chars (@tmp_iter, end_ptr - start_ptr);
+      end else
+        tmp_iter := next_iter;
+
+          if tag <> NULL then
+            gtk_text_buffer_apply_tag_by_name (source_buffer, tag, @start_iter, @tmp_iter);
+
+          start_iter := tmp_iter;
+          start_ptr  := end_ptr;
+    until end_ptr = NULL;
+
+    g_free (text);
+    start_iter := next_iter;
+  end;
+end;
+
+function read_line (var f: TFileOfChar; str: PGString): boolean;
+var
+  n_read : integer;
+  c,
+  next_c : char;
+
+begin
+  n_read := 0;
+
+  g_string_truncate (str, 0);
+
+  while not eof(f) do begin
+    read (f, c);
+
+        inc (n_read);
+
+    if (c = #10) or (c = #13) then
+    begin
+      if not eof(f) then
+      begin
+        read (f, next_c);
+
+        if not ((next_c in [#13, #10]) and (c <> next_c)) then
+          seek(f, filepos(f)-1);
+            break;
+      end;
+    end else
+          g_string_append_c (str, c);
+  end;
+
+  read_line := n_read > 0;
+end;
+
+
+
+(* opens a textfile and reads it into the TGtkTextBuffer *)
+procedure load_file (filename : pgchar);
+
+var
+  text_start,
+  text_end     : TGtkTextIter;
+
+  err          : PGError;
+  buffer       : PGString;
+  state,
+  len_chars,
+  len          : integer;
+
+  in_para      : gboolean;
+  f            : TFileOfChar;
+  full_name    : pchar;
+  p, q, r      : pgchar;
+
+begin
+
+  err     := NULL;
+  buffer  := g_string_new (NULL);
+  state   := 0;
+  in_para := FALSE;
+
+  if (current_file <> NULL) and  (StrComp (current_file, filename) = 0) then begin
+    g_string_free (buffer, TRUE);
+    exit;
+  end;
+
+  g_free (current_file);
+  current_file := g_strdup (filename);
+
+  gtk_text_buffer_get_bounds (info_buffer, @text_start, @text_end);
+  gtk_text_buffer_delete (info_buffer, @text_start, @text_end);
+
+  gtk_text_buffer_get_bounds (source_buffer, @text_start, @text_end);
+  gtk_text_buffer_delete (source_buffer, @text_start, @text_end);
+
+  full_name := demo_find_file (filename, @err);
+
+  if full_name = NULL then begin
+      g_warning ('%s', [err^.message]);
+      g_error_free (err);
+      exit;
+  end;
+
+  {$I-}
+  assign (f, full_name);
+  reset (f);
+  {$I+}
+
+  if IOResult <> 0 then
+    g_print ('Cannot open %s:  file not found'#13#10, [full_name]);
+
+  g_free (full_name);
+
+  if IOResult <> 0 then
+    exit;
+
+  gtk_text_buffer_get_iter_at_offset (info_buffer, @text_start, 0);
+
+  while read_line (f, buffer) do
+  begin
+    p := buffer^.str;
+
+    case state of
+          0 : begin (* Reading title *)
+
+                while (((p^ = '(') or  (p^ = '*')) or (p^ = '{'))  or  g_ascii_isspace (p^)  do
+                  inc (p);
+                r := p;
+
+                while (r^ <> ')')  and (strlen (r) > 0) do
+                  inc (r);
+
+                if strlen (r) > 0 then
+                  p := r + 1;
+
+                q := p + strlen (p);
+
+                while (q > p)  and  g_ascii_isspace ((q - 1)^) do
+                  dec(q);
+
+                if q > p then
+            begin
+                  len_chars := g_utf8_pointer_to_offset (p, q);
+
+                  text_end := text_start;
+
+//                g_assert (strlen (p) >= (q - p));
+
+                  gtk_text_buffer_insert (info_buffer, @text_end, p, q - p);
+                  text_start := text_end;
+
+                  gtk_text_iter_backward_chars (@text_start, len_chars);
+                  gtk_text_buffer_apply_tag_by_name (info_buffer, 'title', @text_start, @text_end);
+
+                  text_start := text_end;
+
+                  inc (state);
+             end; {of q > p }
+              end; {of state = 0}
+
+
+          1:  begin (* Reading body of info section *)
+                while g_ascii_isspace (p^) do
+                  inc(p);
+
+                if (p^ = '*') and ((p + 1)^ = ')') then
+                begin
+              gtk_text_buffer_get_iter_at_offset (source_buffer, @text_start, 0);
+                  inc(state);
+            end else
+            begin
+              while (p^ = '*') or  g_ascii_isspace (p^) do
+                        inc(p);
+
+                  len := strlen (p);
+
+                  while g_ascii_isspace ( (p + len - 1)^) do
+                        dec (len);
+
+                  if len > 0 then
+              begin
+
+                        if in_para then
+                          gtk_text_buffer_insert (info_buffer, @text_start, ' ', 1);
+
+//                      g_assert (strlen (p) >= len);
+
+                        gtk_text_buffer_insert (info_buffer, @text_start, p, len);
+
+                        in_para := TRUE;
+              end else
+              begin
+                gtk_text_buffer_insert (info_buffer, @text_start, #10, 1);
+                        in_para := FALSE;
+              end; {else len <= 0}
+            end;
+              end;
+          2: begin (* Skipping blank lines *)
+               while g_ascii_isspace (p^) do
+                 inc(p);
+
+               if p^ <> #0 then
+           begin
+             p := buffer^.str;
+             inc (state); (* Fall through *)
+
+             (* Reading program body *)
+             gtk_text_buffer_insert (source_buffer, @text_start, p, -1);
+                 gtk_text_buffer_insert (source_buffer, @text_start, #10, 1);
+           end;
+         end;
+
+          3: begin (* Reading program body *)
+           gtk_text_buffer_insert (source_buffer, @text_start, p, -1);
+               gtk_text_buffer_insert (source_buffer, @text_start, #10, 1);
+         end;
+    end;
+  end;
+
+ close (f);
+ fontify ();
+
+  g_string_free (buffer, TRUE);
+end;
+
+(* some callbacks *)
+
+procedure window_closed_cb (window :  PGtkWidget;
+                           data   :  gpointer); cdecl;
+var
+  cbdata   : PCallbackData;
+  iter     : TGtkTreeIter;
+  italic,
+  nitalic  : gboolean;
+
+begin
+  cbdata := data;
+
+  gtk_tree_model_get_iter (cbdata^.model, @iter, cbdata^.path);
+  gtk_tree_model_get (GTK_TREE_MODEL (cbdata^.model), @iter,
+                      [ ITALIC_COLUMN, @italic, -1] );
+  nitalic := not italic;
+
+  if italic then
+    gtk_tree_store_set (GTK_TREE_STORE (cbdata^.model), @iter,
+                        [ ITALIC_COLUMN, nitalic, -1] );
+
+  gtk_tree_path_free (cbdata^.path);
+  dispose (cbdata);
+
+end;
+
+
+
+procedure row_activated_cb (tree_view  : PGtkTreeView;
+                            path       : PGtkTreePath;
+                            column     : PGtkTreeViewColumn); cdecl;
+var
+  iter     : TGtkTreeIter;
+  italic,
+  nitalic  : gboolean;
+  func     : TGDoDemoFunc;
+  window   : PGtkWidget;
+  model    : PGtkTreeModel;
+  cbdata   : PCallbackData;
+
+begin
+  model := gtk_tree_view_get_model (tree_view);
+
+  gtk_tree_model_get_iter (model, @iter, path);
+  gtk_tree_model_get (GTK_TREE_MODEL (model),
+                      @iter,
+                    [ FUNC_COLUMN, @func,
+                      ITALIC_COLUMN, @italic, -1 ]);
+
+  if func <> NULL then
+  begin
+      nitalic := not italic;
+      gtk_tree_store_set (GTK_TREE_STORE (model),
+                          @iter,
+                         [ ITALIC_COLUMN, nitalic, -1 ] );
+
+      window := func();
+
+      if window <> NULL then
+          begin
+        new (cbdata);
+            cbdata^.model := model;
+
+            cbdata^.path  := gtk_tree_path_copy (path);
+
+            g_signal_connect (window, 'destroy',
+                          G_CALLBACK (@window_closed_cb), cbdata );
+          end;
+  end;
+end;
+
+
+procedure selection_cb ( selection : PGtkTreeSelection;
+                         model     : PGtkTreeModel); cdecl;
+var
+  iter   : TGtkTreeIter;
+// value  : TGValue;
+  str    : pgchar;
+
+begin
+
+(*  g_value_init(@value, G_TYPE_STRING);  //   added to test if TGValue works
+                                          // -- its seems not as if it does *)
+
+  if not gtk_tree_selection_get_selected (selection, NULL, @iter)  then
+    exit;
+
+(* The original code used TGValue but it seems not to work; check why *)
+
+(*
+  gtk_tree_model_get_value (model, @iter, FILENAME_COLUMN, @value);
+
+  if (g_value_get_string (@value)) <> NULL then
+    load_file (g_value_get_string (@value));
+
+  g_value_unset (@value);
+*)
+
+  gtk_tree_model_get (model, @iter, [FILENAME_COLUMN, @str, -1]);
+
+  if str <> NULL then
+    load_file (str);
+
+end;
+
+
+function create_tree: PGtkWidget;
+
+var
+  selection  : PGtkTreeSelection;
+  cell       : PGtkCellRenderer;
+  tree_view  : PGtkWidget;
+  column     : PGtkTreeViewColumn;
+  model      : PGtkTreeStore;
+
+  iter,
+  child_iter : TGtkTreeIter;
+
+  d,
+  children   : PDemo;
+
+begin
+  d := @testgtk_demos;
+
+  model := gtk_tree_store_new (NUM_COLUMNS, [G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_BOOLEAN]);
+
+  tree_view := gtk_tree_view_new ();
+
+  gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), GTK_TREE_MODEL (model));
+  selection := gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
+
+  gtk_tree_selection_set_mode (GTK_TREE_SELECTION (selection),
+                               GTK_SELECTION_BROWSE);
+
+  gtk_widget_set_size_request (tree_view, 200, -1);
+
+  (* this code only supports 1 level of children. If we
+   * want more we probably have to use a recursing function.
+   *)
+
+
+  while d^.title <> NULL do begin
+    children := d^.children;
+
+    gtk_tree_store_append (GTK_TREE_STORE (model), @iter, NULL);
+
+    gtk_tree_store_set (GTK_TREE_STORE (model),
+                          @iter,
+                          [ TITLE_COLUMN, d^.title,
+                            FILENAME_COLUMN, d^.filename,
+                            FUNC_COLUMN, d^.func,
+                            ITALIC_COLUMN, FALSE, -1 ] );
+
+    inc(d);
+
+    if children = NULL then
+          continue;
+
+    while children^.title <> NULL do begin
+
+          gtk_tree_store_append (GTK_TREE_STORE (model), @child_iter, @iter);
+
+          gtk_tree_store_set (GTK_TREE_STORE (model),
+                              @child_iter,
+                              [TITLE_COLUMN, children^.title,
+                              FILENAME_COLUMN, children^.filename,
+                              FUNC_COLUMN, children^.func,
+                              ITALIC_COLUMN, FALSE,  -1]);
+          inc (children);
+    end;
+  end;
+
+  cell := gtk_cell_renderer_text_new ();
+
+  g_object_set (G_OBJECT (cell),
+                'style', [ PANGO_STYLE_ITALIC, NULL ]);
+
+
+  column := gtk_tree_view_column_new_with_attributes ('Widget (double click for demo)',
+                                                     cell,
+                                                     [ 'text', TITLE_COLUMN,
+                                                       'style_set', ITALIC_COLUMN, NULL ] );
+
+  gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view),
+                               GTK_TREE_VIEW_COLUMN (column));
+
+  g_signal_connect (selection, 'changed', G_CALLBACK (@selection_cb), model);
+  g_signal_connect (tree_view, 'row_activated', G_CALLBACK (@row_activated_cb), model);
+
+  gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
+
+  create_tree := tree_view;
+end;
+
+
+procedure setup_default_icon;
+var
+  pixbuf      : PGdkPixbuf;
+  filename    : pchar;
+  err         : PGError;
+
+  dialog      : PGtkWidget;
+
+  list        : PGList;
+  transparent : PGdkPixbuf;
+
+begin
+  err := NULL;
+  pixbuf := NULL;
+  dialog := NULL;
+
+  filename := demo_find_file ('gtk-logo-rgb.gif', @err);
+
+  if filename <> NULL then
+  begin
+    pixbuf := gdk_pixbuf_new_from_file (filename, @err);
+    g_free (filename);
+  end;
+
+  (* Ignoring this error (passing NULL instead of &err above)
+   * would probably be reasonable for most apps.  We're just
+   * showing off.
+   *)
+
+  if err <> NULL then
+  begin
+    dialog := gtk_message_dialog_new (NULL, 0,
+                                       GTK_MESSAGE_ERROR,
+                                       GTK_BUTTONS_CLOSE,
+                                       'Failed to read icon file: %s',
+                                       [err^.message]);
+    gtk_widget_show (dialog);
+    g_error_free (err);
+
+    g_signal_connect (dialog, 'response',
+                        G_CALLBACK (@gtk_widget_destroy), NULL);
+  end;
+
+  if pixbuf <> NULL then
+  begin
+    (* The gtk-logo-rgb icon has a white background, make it transparent *)
+
+    transparent := gdk_pixbuf_add_alpha (pixbuf, TRUE, $ff, $ff, $ff);
+
+    list := NULL;
+    list := g_list_append (list, transparent);
+
+    gtk_window_set_default_icon_list (list);
+
+    g_list_free (list);
+    g_object_unref (G_OBJECT (pixbuf));
+    g_object_unref (G_OBJECT (transparent));
+  end;
+end;
+
+
+
+var
+  window,
+  notebook,
+  hbox,
+  tree       : PGtkWidget;
+
+begin
+  current_file := NULL;
+
+  {$include init.inc}  (* contains all variable inits of the demos *)
+
+  gtk_init (@argc, @argv);
+
+  setup_default_icon ();
+
+  window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+  gtk_window_set_title (GTK_WINDOW (window), 'GTK+ Code Demos');
+
+  g_signal_connect (window, 'destroy',
+                            G_CALLBACK (@gtk_main_quit), NULL);
+
+  hbox := gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (window), hbox);
+
+  tree := create_tree;
+
+  gtk_box_pack_start (GTK_BOX (hbox), tree, FALSE, FALSE, 0);
+
+  notebook := gtk_notebook_new;
+  gtk_box_pack_start (GTK_BOX (hbox), notebook, TRUE, TRUE, 0);
+
+  gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
+                            create_text (info_buffer, FALSE),
+                            gtk_label_new_with_mnemonic ('_Info'));
+
+
+  gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
+                            create_text (source_buffer, TRUE),
+                            gtk_label_new_with_mnemonic ('_Source'));
+
+  gtk_text_buffer_create_tag (info_buffer, 'title', 'font', ['Sans 18',  NULL ]);
+
+  gtk_text_buffer_create_tag (source_buffer, 'comment', 'foreground', ['red', NULL]);
+
+  gtk_text_buffer_create_tag (source_buffer, 'type', 'foreground', ['ForestGreen', NULL]);
+
+  gtk_text_buffer_create_tag (source_buffer, 'string', 'foreground',
+                                    ['RosyBrown', 'weight', PANGO_WEIGHT_BOLD, NULL]);
+
+  gtk_text_buffer_create_tag (source_buffer, 'control', 'foreground', ['purple', NULL]);
+
+  gtk_text_buffer_create_tag (source_buffer, 'preprocessor', 'style',
+                                     [ PANGO_STYLE_OBLIQUE, 'foreground', 'blue', NULL] );
+
+  gtk_text_buffer_create_tag (source_buffer, 'function', 'weight',
+                                     [ PANGO_WEIGHT_BOLD, 'foreground', 'DarkGoldenrod4', NULL]);
+
+  gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);
+  gtk_widget_show_all (window);
+
+  gtk_main;
+end.
+
+

+ 438 - 0
packages/extra/gtk2/examples/gtk_demo/images.inc

@@ -0,0 +1,438 @@
+(* Images
+ *
+ * GtkImage is used to display an image; the image can be in a number of formats.
+ * Typically, you load an image into a GdkPixbuf, then display the pixbuf.
+ *
+ * This demo code shows some of the more obscure cases, in the simple
+ * case a call to gtk_image_new_from_file() is all you need.
+ *
+ * If you want to put image data in your program as a C variable,
+ * use the make-inline-pixbuf program that comes with GTK+.
+ * This way you won't need to depend on loading external files, your
+ * application binary can be self-contained.
+ *)
+
+
+var
+  image_window        : PGtkWidget;
+  image_pixbuf_loader : PGdkPixbufLoader;
+  image_load_timeout  : guint;
+  image_stream        : file;
+
+type
+  TBuffer256  = array [0..255] of byte;
+
+procedure progressive_prepared_callback (loader : PGdkPixbufLoader;
+                                         data   : gpointer); cdecl;
+var
+  pixbuf : PGdkPixbuf;
+  image  : PGtkWidget;
+
+begin
+  image := PGtkWidget (data);
+
+  pixbuf := gdk_pixbuf_loader_get_pixbuf (loader);
+
+  (* Avoid displaying random memory contents, since the pixbuf
+   * isn't filled in yet.
+   *)
+  gdk_pixbuf_fill (pixbuf, $aaaaaaff);
+
+  gtk_image_set_from_pixbuf (pGtkImage (image), pixbuf);
+end;
+
+procedure progressive_updated_callback (loader : PGdkPixbufLoader;
+                                        x, y,
+                                        width,
+                                        height : gint;
+                                        data   : gpointer); cdecl;
+var
+  image : PGtkWidget;
+
+begin
+  image := PGtkWidget (data);
+
+  (* We know the pixbuf inside the GtkImage has changed, but the image
+   * itself doesn't know this; so queue a redraw.  If we wanted to be
+   * really efficient, we could use a drawing area or something
+   * instead of a GtkImage, so we could control the exact position of
+   * the pixbuf on the display, then we could queue a draw for only
+   * the updated area of the image.
+   *)
+
+  gtk_widget_queue_draw (image);
+end;
+
+function progressive_timeout (data : gpointer): gboolean; cdecl;
+var
+  image      : PGtkWidget;
+  buf        : TBuffer256;
+  bytes_read : integer;
+  error      : PGError;
+  dialog     : PGtkWidget;
+  error_msg,
+  filename   : pgchar;
+
+begin
+  image := PGtkWidget (data);
+
+  (* This shows off fully-paranoid error handling, so looks scary.
+   * You could factor out the error handling code into a nice separate
+   * function to make things nicer.
+   *)
+
+  if file_is_valid (image_stream)  then   // is there a better way???
+  begin
+    error := NULL;
+
+    blockread (image_stream, buf, sizeof(buf), bytes_read);
+
+    if not gdk_pixbuf_loader_write (image_pixbuf_loader,
+                                    @buf[0], bytes_read, @error) then
+    begin
+          dialog := gtk_message_dialog_new (GTK_WINDOW (image_window),
+                       GTK_DIALOG_DESTROY_WITH_PARENT,
+                                           GTK_MESSAGE_ERROR,
+                                           GTK_BUTTONS_CLOSE,
+                                           'Failed to load image: %s',
+                                           [error^.message]);
+
+          g_error_free (error);
+
+          g_signal_connect (dialog, 'response',
+                            G_CALLBACK (@gtk_widget_destroy), NULL);
+
+          close (image_stream);
+
+          gtk_widget_show (dialog);
+
+          image_load_timeout := 0;
+
+          exit (FALSE); (* uninstall the timeout *)
+    end; {of not gdk_pixbuf_loader_write}
+
+    if eof (image_stream) then
+    begin
+          close (image_stream);
+
+         (* Errors can happen on close, e.g. if the image
+          * file was truncated we'll know on close that
+          * it was incomplete.
+          *)
+          error := NULL;
+          if not gdk_pixbuf_loader_close (image_pixbuf_loader, @error) then
+      begin
+            dialog := gtk_message_dialog_new (GTK_WINDOW (image_window),
+                                               GTK_DIALOG_DESTROY_WITH_PARENT,
+                                               GTK_MESSAGE_ERROR,
+                                               GTK_BUTTONS_CLOSE,
+                                               'Failed to load image: %s',
+                                               [error^.message]);
+
+        g_error_free (error);
+
+        g_signal_connect (dialog, 'response',
+                                G_CALLBACK (@gtk_widget_destroy), NULL);
+
+        gtk_widget_show (dialog);
+
+        g_object_unref (G_OBJECT (image_pixbuf_loader));
+        image_pixbuf_loader := NULL;
+
+        image_load_timeout := 0;
+
+            exit(FALSE); (* uninstall the timeout *)
+      end;  {of not gdk_pixbuf_loader_close}
+
+          g_object_unref (G_OBJECT (image_pixbuf_loader));
+          image_pixbuf_loader := NULL;
+    end; {of eof}
+  end {of image_stream}
+  else begin
+    error_msg := NULL;
+
+    (* demo_find_file() looks in the the current directory first,
+     * so you can run gtk-demo without installing GTK, then looks
+     * in the location where the file is installed.
+     *)
+
+    filename := demo_find_file ('alphatest.png', @error);
+    if error <> NULL then
+    begin
+      error_msg := g_strdup (error^.message);
+          g_error_free (error);
+    end else
+    begin
+      {$I-}
+      assign (image_stream, filename);
+      reset (image_stream, 1);
+      {$I+}
+
+          if IOResult <> 0 then
+            error_msg := g_strdup_printf ('Error while opening file "%s"',
+                                                              [filename]);
+          g_free (filename);
+    end;
+
+    if not file_is_valid (image_stream) then
+    begin
+          dialog := gtk_message_dialog_new (GTK_WINDOW (image_window),
+                                           GTK_DIALOG_DESTROY_WITH_PARENT,
+                                           GTK_MESSAGE_ERROR,
+                                           GTK_BUTTONS_CLOSE,
+                                           '%s', [error_msg]);
+          g_free (error_msg);
+
+          g_signal_connect (dialog, 'response',
+                            G_CALLBACK (@gtk_widget_destroy), NULL);
+
+          gtk_widget_show (dialog);
+
+          image_load_timeout := 0;
+
+          exit (FALSE); (* uninstall the timeout *)
+    end;
+
+    if image_pixbuf_loader <> NULL then
+    begin
+          gdk_pixbuf_loader_close (image_pixbuf_loader, NULL);
+          g_object_unref (G_OBJECT (image_pixbuf_loader));
+          image_pixbuf_loader := NULL;
+    end;
+
+    image_pixbuf_loader := gdk_pixbuf_loader_new ();
+
+    g_signal_connect (G_OBJECT (image_pixbuf_loader), 'area_prepared',
+                        G_CALLBACK (@progressive_prepared_callback), image);
+
+    g_signal_connect (G_OBJECT (image_pixbuf_loader), 'area_updated',
+                        G_CALLBACK (@progressive_updated_callback), image);
+  end; {of else image_stream}
+
+  (* leave timeout installed *)
+  exit (TRUE);
+end;
+
+procedure start_progressive_loading (image  : PGtkWidget); cdecl;
+begin
+  (* This is obviously totally contrived (we slow down loading
+   * on purpose to show how incremental loading works).
+   * The real purpose of incremental loading is the case where
+   * you are reading data from a slow source such as the network.
+   * The timeout simply simulates a slow data source by inserting
+   * pauses in the reading process.
+   *)
+  image_load_timeout := g_timeout_add (150,
+                                @progressive_timeout,
+                                image);
+end;
+
+procedure images_cleanup_callback (theobject : PGtkObject;
+                            data      : gpointer); cdecl;
+begin
+  if image_load_timeout <> 0 then
+  begin
+    g_source_remove (image_load_timeout);
+    image_load_timeout := 0;
+  end;
+
+  if image_pixbuf_loader <> NULL then
+  begin
+    gdk_pixbuf_loader_close (image_pixbuf_loader, NULL);
+    g_object_unref (G_OBJECT (image_pixbuf_loader));
+    image_pixbuf_loader := NULL;
+  end;
+
+  if  file_is_valid (image_stream) then
+    close (image_stream);
+end;
+
+procedure toggle_sensitivity_callback (togglebutton : PGtkWidget;
+                                       user_data    : gpointer);cdecl;
+var
+  container : PGtkContainer;
+  list,
+  tmp       : PGList;
+
+begin
+  container := PGtkContainer (user_data);
+
+  list := gtk_container_get_children (container);
+
+  tmp := list;
+
+  while tmp <> NULL do
+  begin
+    (* don't disable our toggle *)
+    if pGtkWidget (tmp^.data) <> togglebutton then
+      gtk_widget_set_sensitive (pGtkWidget (tmp^.data),
+                                not gtk_toggle_button_get_active (pGtkToggleButton (togglebutton)));
+
+      tmp := tmp^.next;
+  end;
+
+  g_list_free (list);
+end;
+
+
+function do_images         : PGtkWidget;
+var
+  frame,
+  vbox,
+  image,
+  thelabel,
+  align,
+  dialog,
+  button     : PGtkWidget;
+
+  pixbuf     : PGdkPixbuf;
+  error      : PGError;
+  filename   : pgchar;
+
+begin
+  error := NULL;
+
+  if image_window = NULL then
+  begin
+    image_window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_window_set_title (GTK_WINDOW (image_window), 'Images');
+
+    g_signal_connect (image_window, 'destroy',
+                        G_CALLBACK (@gtk_widget_destroyed), @image_window);
+    g_signal_connect (image_window, 'destroy',
+                        G_CALLBACK (@images_cleanup_callback), NULL);
+
+    gtk_container_set_border_width (GTK_CONTAINER (image_window), 8);
+
+    vbox := gtk_vbox_new (FALSE, 8);
+    gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
+    gtk_container_add (GTK_CONTAINER (image_window), vbox);
+
+    thelabel := gtk_label_new (NULL);
+    gtk_label_set_markup (GTK_LABEL (thelabel),
+                            '<u>Image loaded from a file</u>');
+
+    gtk_box_pack_start (GTK_BOX (vbox), thelabel, FALSE, FALSE, 0);
+
+    frame := gtk_frame_new (NULL);
+    gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
+
+    (* The alignment keeps the frame from growing when users resize
+     * the window
+     *)
+    align := gtk_alignment_new (0.5, 0.5, 0, 0);
+    gtk_container_add (GTK_CONTAINER (align), frame);
+    gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
+
+    (* demo_find_file() looks in the the current directory first,
+     * so you can run gtk-demo without installing GTK, then looks
+     * in the location where the file is installed.
+     *)
+
+    pixbuf := NULL;
+    filename := demo_find_file ('gtk-logo-rgb.gif', @error);
+    if filename <> NULL then
+    begin
+          pixbuf := gdk_pixbuf_new_from_file (filename, @error);
+          g_free (filename);
+    end;
+
+    if error <> NULL then
+    begin
+          (* This code shows off error handling. You can just use
+           * gtk_image_new_from_file() instead if you don't want to report
+           * errors to the user. If the file doesn't load when using
+           * gtk_image_new_from_file(), a "missing image" icon will
+           * be displayed instead.
+           *)
+
+          dialog := gtk_message_dialog_new (GTK_WINDOW (image_window),
+                                           GTK_DIALOG_DESTROY_WITH_PARENT,
+                                           GTK_MESSAGE_ERROR,
+                                           GTK_BUTTONS_CLOSE,
+                                           'Unable to open image file "gtk-logo-rgb.gif": %s',
+                                           [error^.message]);
+          g_error_free (error);
+
+          g_signal_connect (dialog, 'response',
+                            G_CALLBACK (@gtk_widget_destroy), NULL);
+
+          gtk_widget_show (dialog);
+    end;
+
+    image := gtk_image_new_from_pixbuf (pixbuf);
+
+    gtk_container_add (GTK_CONTAINER (frame), image);
+
+
+    (* Animation *)
+
+    thelabel := gtk_label_new (NULL);
+    gtk_label_set_markup (GTK_LABEL (thelabel),
+                            '<u>Animation loaded from a file</u>');
+    gtk_box_pack_start (GTK_BOX (vbox), thelabel, FALSE, FALSE, 0);
+
+    frame := gtk_frame_new (NULL);
+    gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
+
+    (* The alignment keeps the frame from growing when users resize
+     * the window
+     *)
+    align := gtk_alignment_new (0.5, 0.5, 0, 0);
+    gtk_container_add (GTK_CONTAINER (align), frame);
+    gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
+
+    filename := demo_find_file ('floppybuddy.gif', NULL);
+    image := gtk_image_new_from_file (filename);
+    g_free (filename);
+
+    gtk_container_add (GTK_CONTAINER (frame), image);
+
+
+    (* Progressive *)
+
+
+    thelabel := gtk_label_new (NULL);
+    gtk_label_set_markup (GTK_LABEL (thelabel),
+                            '<u>Progressive image loading</u>');
+    gtk_box_pack_start (GTK_BOX (vbox), thelabel, FALSE, FALSE, 0);
+
+    frame := gtk_frame_new (NULL);
+    gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
+
+    (* The alignment keeps the frame from growing when users resize
+     * the window
+     *)
+    align := gtk_alignment_new (0.5, 0.5, 0, 0);
+    gtk_container_add (GTK_CONTAINER (align), frame);
+    gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
+
+    (* Create an empty image for now; the progressive loader
+     * will create the pixbuf and fill it in.
+     *)
+
+    image := gtk_image_new_from_pixbuf (NULL);
+    gtk_container_add (GTK_CONTAINER (frame), image);
+
+    start_progressive_loading (image);
+
+    (* Sensitivity control *)
+    button := gtk_toggle_button_new_with_mnemonic ('_Insensitive');
+    gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
+
+    g_signal_connect (G_OBJECT (button), 'toggled',
+                        G_CALLBACK (@toggle_sensitivity_callback),
+                        vbox);
+  end;
+
+  if not GTK_WIDGET_VISIBLE (image_window) then
+    gtk_widget_show_all (image_window)
+  else
+  begin
+    gtk_widget_destroy (image_window);
+    image_window := NULL;
+  end;
+
+  do_images := image_window;
+end;
+

+ 52 - 0
packages/extra/gtk2/examples/gtk_demo/init.inc

@@ -0,0 +1,52 @@
+(* this file contains all inits of variables used in the demo *)
+
+(* appwindow.inc *)
+  appwindow_registered := FALSE;
+  application_window   := NULL;
+
+
+(* button_box.inc *)
+  bbox_window := NULL;
+
+(* colorsel.inc *)
+  colorsel_window := NULL;
+  colorsel_da     := NULL;
+  colorsel_frame  := NULL;
+
+(* drawingarea.inc *)
+  da_window  := NULL;
+
+(* images.inc *)
+  image_window        := NULL;
+  image_pixbuf_loader := NULL;
+  image_load_timeout  := 0;
+
+(* item_factory *)
+  if_window  := NULL;
+
+(* menus.inc *)
+  menu_window := NULL;
+
+(* panes.inc *)
+  panes_window := NULL;
+
+(* pixbufs.inc *)
+  pixbufs_window      := NULL;
+  pixbufs_frame       := NULL;
+  pixbufs_background  := NULL;
+  pixbufs_back_width  := 0;
+  pixbufs_back_height := 0;
+  pixbufs_da          := NULL;
+
+(* sizegroup.inc *)
+  sg_window           := NULL;
+
+(* stock_browser.inc *)
+  stock_window        := NULL;
+
+(* textview.inc *)
+  text_window         := NULL;
+  text_egg_window     := NULL;
+
+
+

+ 169 - 0
packages/extra/gtk2/examples/gtk_demo/item_factory.inc

@@ -0,0 +1,169 @@
+(* Item Factory
+ *
+ * The GtkItemFactory object allows the easy creation of menus
+ * from an array of descriptions of menu items.
+ *)
+
+var
+  if_window : PGtkWidget;
+
+procedure gtk_ifactory_cb (callback_data   : gpointer;
+                           callback_action : guint;
+                           widget          : PGTkWidget); cdecl;
+begin
+  g_message ('ItemFactory: activated "%s"',
+             [gtk_item_factory_path_from_widget (widget) ]);
+end;
+
+
+const
+  if_menu_items : array [1..19] of TGtkItemFactoryEntry = (
+  ( path: '/_File';     accelerator:  NULL;          callback: nil;
+    callback_action: 0;  item_type : '<Branch>'; extra_data: NULL),
+
+  ( path: '/File/tearoff1'; accelerator:  NULL;  callback: TGtkItemfactoryCallback(@gtk_ifactory_cb);
+    callback_action: 0;  item_type : '<Tearoff>'; extra_data: NULL),
+
+  ( path: '/File/_New'; accelerator: '<control>N'; callback: TGtkItemfactoryCallback(@gtk_ifactory_cb);
+    callback_action: 0;  item_type : NULL; extra_data: NULL),
+
+  ( path: '/File/_Open'; accelerator: '<control>O'; callback: TGtkItemfactoryCallback(@gtk_ifactory_cb);
+    callback_action: 0;  item_type : NULL; extra_data: NULL),
+
+  ( path: '/File/_Save'; accelerator: '<control>S'; callback: TGtkItemfactoryCallback(@gtk_ifactory_cb);
+    callback_action: 0;  item_type : NULL; extra_data: NULL),
+
+  ( path: '/File/Save _As'; accelerator: NULL; callback: TGtkItemfactoryCallback(@gtk_ifactory_cb);
+    callback_action: 0;  item_type : NULL; extra_data: NULL),
+
+  ( path: '/File/sep1'; accelerator: NULL; callback: TGtkItemfactoryCallback(@gtk_ifactory_cb);
+    callback_action: 0;  item_type : '<Separator>'; extra_data: NULL),
+
+  ( path: '/File/_Quit'; accelerator: '<control>Q'; callback: TGtkItemfactoryCallback(@gtk_ifactory_cb);
+    callback_action: 0;  item_type : NULL; extra_data: NULL),
+
+  ( path: '/_Preferences'; accelerator:  NULL ; callback: nil;
+    callback_action: 0;  item_type : '<Branch>'; extra_data: NULL),
+
+  ( path: '/Preferences/_Color'; accelerator:  NULL ; callback: nil;
+    callback_action: 0;  item_type : '<Branch>'; extra_data: NULL),
+
+  ( path: '/Preferences/Color/_Red'; accelerator:  NULL ; callback: TGtkItemfactoryCallback(@gtk_ifactory_cb);
+    callback_action: 0;  item_type : '<RadioItem>'; extra_data: NULL),
+
+  ( path: '/Preferences/Color/_Green'; accelerator:  NULL ; callback:TGtkItemfactoryCallback(@gtk_ifactory_cb);
+    callback_action: 0;  item_type : '/Preferences/Color/Red'; extra_data: NULL),
+
+  ( path: '/Preferences/Color/_Blue'; accelerator:  NULL ; callback: TGtkItemfactoryCallback(@gtk_ifactory_cb);
+    callback_action: 0;  item_type : '/Preferences/Color/Red'; extra_data: NULL),
+
+  ( path: '/Preferences/_Shape'; accelerator:  NULL ; callback: nil;
+    callback_action: 0;  item_type : '<Branch>'; extra_data: NULL),
+
+  ( path: '/Preferences/Shape/_Square'; accelerator:  NULL ; callback: TGtkItemfactoryCallback(@gtk_ifactory_cb);
+    callback_action: 0;  item_type : '<RadioItem>'; extra_data: NULL),
+
+  ( path: '/Preferences/Shape/_Rectangle'; accelerator:  NULL ; callback: TGtkItemfactoryCallback(@gtk_ifactory_cb);
+    callback_action: 0;  item_type : '/Preferences/Shape/Square'; extra_data: NULL),
+
+  ( path: '/Preferences/Shape/_Oval'; accelerator:  NULL ; callback: TGtkItemfactoryCallback(@gtk_ifactory_cb);
+    callback_action: 0;  item_type : '/Preferences/Shape/Rectangle'; extra_data: NULL),
+
+
+  (* If you wanted this to be right justified you would use "<LastBranch>", not "<Branch>".
+   * Right justified help menu items are generally considered a bad idea now days.
+   *)
+
+  ( path: '/_Help'; accelerator:  NULL ; callback: nil;
+    callback_action: 0;  item_type : '<Branch>'; extra_data: NULL),
+
+  ( path: '/Help/_About'; accelerator:  NULL ; callback: nil;
+    callback_action: 0;  item_type : NULL; extra_data: NULL)
+    );
+
+const
+  nmenu_items = sizeof (if_menu_items) div sizeof (if_menu_items[1]);
+
+
+function do_item_factory   : PGtkWidget;
+var
+  box1,
+  box2,
+  separator,
+  thelabel,
+  button       : PGtkWidget;
+
+  accel_group  : PGtkAccelGroup;
+  item_factory : PGtkItemFactory;
+
+begin
+
+  if if_window = NULL then
+  begin
+    if_window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+    g_signal_connect (if_window, 'destroy',
+                        G_CALLBACK (@gtk_widget_destroyed), @if_window);
+
+    g_signal_connect (if_window, 'delete-event',
+                        G_CALLBACK (@gtk_true), NULL);
+
+    accel_group := gtk_accel_group_new ();
+
+    item_factory := gtk_item_factory_new (GTK_TYPE_MENU_BAR, '<main>', accel_group);
+
+    g_object_set_data_full (G_OBJECT (if_window), '<main>',
+                              item_factory, @g_object_unref);
+    gtk_window_add_accel_group (GTK_WINDOW (if_window), accel_group);
+
+    gtk_window_set_title (GTK_WINDOW (if_window), 'Item Factory');
+    gtk_container_set_border_width (GTK_CONTAINER (if_window), 0);
+    gtk_item_factory_create_items (item_factory, nmenu_items, @if_menu_items[1], NULL);
+
+    (* preselect /Preferences/Shape/Oval over the other radios
+     *)
+    gtk_check_menu_item_set_active
+                (GTK_CHECK_MENU_ITEM (gtk_item_factory_get_item (item_factory,
+                 '/Preferences/Shape/Oval')),
+                 TRUE);
+
+    box1 := gtk_vbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (if_window), box1);
+
+    gtk_box_pack_start (GTK_BOX (box1),
+                          gtk_item_factory_get_widget (item_factory, '<main>'),
+                          FALSE, FALSE, 0);
+
+    thelabel := gtk_label_new ('Type'#13#10'<alt>'#13#10'to start');
+    gtk_widget_set_size_request (thelabel, 200, 200);
+    gtk_misc_set_alignment (GTK_MISC (thelabel), 0.5, 0.5);
+    gtk_box_pack_start (GTK_BOX (box1), thelabel, TRUE, TRUE, 0);
+
+
+    separator := gtk_hseparator_new ();
+    gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
+
+    box2 := gtk_vbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
+    gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
+
+    button := gtk_button_new_with_label ('close');
+    g_signal_connect_swapped (button, 'clicked',
+                                G_CALLBACK (@gtk_widget_destroy), if_window);
+
+
+    gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
+
+    GTK_WIDGET_SET_FLAGS  (button, GTK_CAN_DEFAULT);
+
+    gtk_widget_grab_default (button);
+
+    gtk_widget_show_all (if_window);
+  end else
+  begin
+    gtk_widget_destroy (if_window);
+    if_window := NULL;
+  end;
+
+  do_item_factory := if_window;
+end;

+ 232 - 0
packages/extra/gtk2/examples/gtk_demo/list_store.inc

@@ -0,0 +1,232 @@
+(* Tree View/List Store
+ *
+ * The GtkListStore is used to store data in list form, to be used
+ * later on by a GtkTreeView to display it. This demo builds a
+ * simple GtkListStore and displays it. See the Stock Browser
+ * demo for a more advanced example.
+ *
+ *)
+
+ (*
+  * todo: translate to pascal
+  *)
+
+function do_list_store     : PGtkWidget;
+begin
+  do_dummy ('Tree View / List Store - Demo');
+  do_list_store := NULL;
+end;
+
+(*
+#include <gtk/gtk.h>
+
+static GtkWidget *window = NULL;
+
+typedef struct
+{
+  const gboolean  fixed;
+  const guint     number;
+  const gchar    *severity;
+  const gchar    *description;
+}
+Bug;
+
+enum
+{
+  COLUMN_FIXED,
+  COLUMN_NUMBER,
+  COLUMN_SEVERITY,
+  COLUMN_DESCRIPTION,
+  NUM_COLUMNS
+};
+
+static Bug data[] =
+{
+  { FALSE, 60482, "Normal",     "scrollable notebooks and hidden tabs" },
+  { FALSE, 60620, "Critical",   "gdk_window_clear_area (gdkwindow-win32.c) is not thread-safe" },
+  { FALSE, 50214, "Major",      "Xft support does not clean up correctly" },
+  { TRUE,  52877, "Major",      "GtkFileSelection needs a refresh method. " },
+  { FALSE, 56070, "Normal",     "Can't click button after setting in sensitive" },
+  { TRUE,  56355, "Normal",     "GtkLabel - Not all changes propagate correctly" },
+  { FALSE, 50055, "Normal",     "Rework width/height computations for TreeView" },
+  { FALSE, 58278, "Normal",     "gtk_dialog_set_response_sensitive () doesn't work" },
+  { FALSE, 55767, "Normal",     "Getters for all setters" },
+  { FALSE, 56925, "Normal",     "Gtkcalender size" },
+  { FALSE, 56221, "Normal",     "Selectable label needs right-click copy menu" },
+  { TRUE,  50939, "Normal",     "Add shift clicking to GtkTextView" },
+  { FALSE, 6112,  "Enhancement","netscape-like collapsable toolbars" },
+  { FALSE, 1,     "Normal",     "First bug :=)" },
+};
+
+static GtkTreeModel *
+create_model (void)
+{
+  gint i = 0;
+  GtkListStore *store;
+  GtkTreeIter iter;
+
+  /* create list store */
+  store = gtk_list_store_new (NUM_COLUMNS,
+                              G_TYPE_BOOLEAN,
+                              G_TYPE_UINT,
+                              G_TYPE_STRING,
+                              G_TYPE_STRING);
+
+  /* add data to the list store */
+  for (i = 0; i < G_N_ELEMENTS (data); i++)
+    {
+      gtk_list_store_append (store, &iter);
+      gtk_list_store_set (store, &iter,
+                          COLUMN_FIXED, data[i].fixed,
+                          COLUMN_NUMBER, data[i].number,
+                          COLUMN_SEVERITY, data[i].severity,
+                          COLUMN_DESCRIPTION, data[i].description,
+                          -1);
+    }
+
+  return GTK_TREE_MODEL (store);
+}
+
+static void
+fixed_toggled (GtkCellRendererToggle *cell,
+               gchar                 *path_str,
+               gpointer               data)
+{
+  GtkTreeModel *model = (GtkTreeModel * )data;
+  GtkTreeIter  iter;
+  GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
+  gboolean fixed;
+
+  /* get toggled iter */
+  gtk_tree_model_get_iter (model, &iter, path);
+  gtk_tree_model_get (model, &iter, COLUMN_FIXED, &fixed, -1);
+
+  /* do something with the value */
+  fixed ^= 1;
+
+  /* set new value */
+  gtk_list_store_set (GTK_LIST_STORE (model), &iter, COLUMN_FIXED, fixed, -1);
+
+  /* clean up */
+  gtk_tree_path_free (path);
+}
+
+static void
+add_columns (GtkTreeView *treeview)
+{
+  GtkCellRenderer *renderer;
+  GtkTreeViewColumn *column;
+  GtkTreeModel *model = gtk_tree_view_get_model (treeview);
+
+  /* column for fixed toggles */
+  renderer = gtk_cell_renderer_toggle_new ();
+  g_signal_connect (G_OBJECT (renderer), "toggled",
+                    G_CALLBACK (fixed_toggled), model);
+
+  column = gtk_tree_view_column_new_with_attributes ("Fixed?",
+                                                     renderer,
+                                                     "active", COLUMN_FIXED,
+                                                     NULL);
+
+  /* set this column to a fixed sizing (of 50 pixels) */
+  gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column),
+                                   GTK_TREE_VIEW_COLUMN_FIXED);
+  gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
+  gtk_tree_view_append_column (treeview, column);
+
+  /* column for bug numbers */
+  renderer = gtk_cell_renderer_text_new ();
+  column = gtk_tree_view_column_new_with_attributes ("Bug number",
+                                                     renderer,
+                                                     "text",
+                                                     COLUMN_NUMBER,
+                                                     NULL);
+  gtk_tree_view_column_set_sort_column_id (column, COLUMN_NUMBER);
+  gtk_tree_view_append_column (treeview, column);
+
+  /* column for severities */
+  renderer = gtk_cell_renderer_text_new ();
+  column = gtk_tree_view_column_new_with_attributes ("Severity",
+                                                     renderer,
+                                                     "text",
+                                                     COLUMN_SEVERITY,
+                                                     NULL);
+  gtk_tree_view_column_set_sort_column_id (column, COLUMN_SEVERITY);
+  gtk_tree_view_append_column (treeview, column);
+
+  /* column for description */
+  renderer = gtk_cell_renderer_text_new ();
+  column = gtk_tree_view_column_new_with_attributes ("Description",
+                                                     renderer,
+                                                     "text",
+                                                     COLUMN_DESCRIPTION,
+                                                     NULL);
+  gtk_tree_view_column_set_sort_column_id (column, COLUMN_DESCRIPTION);
+  gtk_tree_view_append_column (treeview, column);
+}
+
+GtkWidget *
+do_list_store (void)
+{
+  if (!window)
+    {
+      GtkWidget *vbox;
+      GtkWidget *label;
+      GtkWidget *sw;
+      GtkTreeModel *model;
+      GtkWidget *treeview;
+
+      /* create window, etc */
+      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_title (GTK_WINDOW (window), "GtkListStore demo");
+
+      g_signal_connect (G_OBJECT (window), "destroy",
+                        G_CALLBACK (gtk_widget_destroyed), &window);
+      gtk_container_set_border_width (GTK_CONTAINER (window), 8);
+
+      vbox = gtk_vbox_new (FALSE, 8);
+      gtk_container_add (GTK_CONTAINER (window), vbox);
+
+      label = gtk_label_new ("This is the bug list (note: not based on real data, it would be nice to have a nice ODBC interface to bugzilla or so, though).");
+      gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+
+      sw = gtk_scrolled_window_new (NULL, NULL);
+      gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
+                                           GTK_SHADOW_ETCHED_IN);
+      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
+                                      GTK_POLICY_NEVER,
+                                      GTK_POLICY_AUTOMATIC);
+      gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0);
+
+      /* create tree model */
+      model = create_model ();
+
+      /* create tree view */
+      treeview = gtk_tree_view_new_with_model (model);
+      gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview), TRUE);
+      gtk_tree_view_set_search_column (GTK_TREE_VIEW (treeview),
+                                       COLUMN_DESCRIPTION);
+
+      g_object_unref (G_OBJECT (model));
+
+      gtk_container_add (GTK_CONTAINER (sw), treeview);
+
+      /* add columns to the tree view */
+      add_columns (GTK_TREE_VIEW (treeview));
+
+      /* finish & show */
+      gtk_window_set_default_size (GTK_WINDOW (window), 280, 250);
+    }
+
+  if (!GTK_WIDGET_VISIBLE (window))
+    gtk_widget_show_all (window);
+  else
+    {
+      gtk_widget_destroy (window);
+      window = NULL;
+    }
+
+  return window;
+}
+
+*)

+ 220 - 0
packages/extra/gtk2/examples/gtk_demo/menus.inc

@@ -0,0 +1,220 @@
+(* Menus
+ *
+ * There are several widgets involved in displaying menus. The
+ * GtkMenuBar widget is a horizontal menu bar, which normally appears
+ * at the top of an application. The GtkMenu widget is the actual menu
+ * that pops up. Both GtkMenuBar and GtkMenu are subclasses of
+ * GtkMenuShell; a GtkMenuShell contains menu items
+ * (GtkMenuItem). Each menu item contains text and/or images and can
+ * be selected by the user.
+ *
+ * There are several kinds of menu item, including plain GtkMenuItem,
+ * GtkCheckMenuItem which can be checked/unchecked, GtkRadioMenuItem
+ * which is a check menu item that's in a mutually exclusive group,
+ * GtkSeparatorMenuItem which is a separator bar, GtkTearoffMenuItem
+ * which allows a GtkMenu to be torn off, and GtkImageMenuItem which
+ * can place a GtkImage or other widget next to the menu text.
+ *
+ * A GtkMenuItem can have a submenu, which is simply a GtkMenu to pop
+ * up when the menu item is selected. Typically, all menu items in a menu bar
+ * have submenus.
+ *
+ * The GtkOptionMenu widget is a button that pops up a GtkMenu when clicked.
+ * It's used inside dialogs and such.
+ *
+ * GtkItemFactory provides a higher-level interface for creating menu bars
+ * and menus; while you can construct menus manually, most people don't
+ * do that. There's a separate demo for GtkItemFactory.
+ *
+ *)
+
+
+var
+  menu_window : PGtkWidget;
+
+function create_menu (depth   : gint;
+                      tearoff : gboolean): PGtkWidget;
+var
+  menu,
+  menuitem : PGtkWidget;
+
+  group    : PGSList;
+  buf      : pgchar;
+  i, j     : gint;
+
+begin
+
+  if depth < 1 then
+    exit (NULL);
+
+  menu  := gtk_menu_new ();
+  group := NULL;
+
+  if tearoff then
+  begin
+    menuitem := gtk_tearoff_menu_item_new ();
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+    gtk_widget_show (menuitem);
+  end;
+
+  j:=1;
+  for i:=0 to 4 do
+  begin
+    buf := g_strdup_printf ('item %2d - %d', [depth, j]);
+    menuitem := gtk_radio_menu_item_new_with_label (group, buf);
+    group := gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem));
+
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+    gtk_widget_show (menuitem);
+
+    if i = 3 then
+      gtk_widget_set_sensitive (menuitem, FALSE);
+
+    gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1, TRUE));
+
+    g_free (buf);
+    inc (j);
+  end;
+
+  create_menu := menu;
+end;
+
+function do_menus          : PGtkWidget;
+var
+  box1,
+  box2,
+  button,
+  optionmenu,
+  separator,
+  menubar,
+  menu,
+  menuitem     : PGtkWidget;
+
+  accel_group  : PGtkAccelGroup;
+
+begin
+  if menu_window = NULL then
+  begin
+    menu_window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+    g_signal_connect (menu_window, 'destroy',
+                        G_CALLBACK(@gtk_widget_destroyed), @menu_window);
+    g_signal_connect (menu_window, 'delete-event',
+                        G_CALLBACK (@gtk_true), NULL);
+
+    accel_group := gtk_accel_group_new ();
+    gtk_window_add_accel_group (GTK_WINDOW (menu_window), accel_group);
+
+    gtk_window_set_title (GTK_WINDOW (menu_window), 'Menus');
+    gtk_container_set_border_width (GTK_CONTAINER (menu_window), 0);
+
+
+    box1 := gtk_vbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (menu_window), box1);
+    gtk_widget_show (box1);
+
+    menubar := gtk_menu_bar_new ();
+    gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
+    gtk_widget_show (menubar);
+
+    menu := create_menu (2, TRUE);
+
+    menuitem := gtk_menu_item_new_with_label ('test'#13#10'line2');
+    gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
+    gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem);
+    gtk_widget_show (menuitem);
+
+    menuitem := gtk_menu_item_new_with_label ('foo');
+    gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (3, TRUE));
+    gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem);
+    gtk_widget_show (menuitem);
+
+    menuitem := gtk_menu_item_new_with_label ('bar');
+    gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (4, TRUE));
+    gtk_menu_item_set_right_justified (GTK_MENU_ITEM (menuitem), TRUE);
+    gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem);
+    gtk_widget_show (menuitem);
+
+    box2 := gtk_vbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
+    gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
+    gtk_widget_show (box2);
+
+    menu := create_menu (1, FALSE);
+    gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
+
+    menuitem := gtk_separator_menu_item_new ();
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+    gtk_widget_show (menuitem);
+
+    menuitem := gtk_check_menu_item_new_with_label ('Accelerate Me');
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+    gtk_widget_show (menuitem);
+    gtk_widget_add_accelerator (menuitem,
+                 'activate',
+                  accel_group,
+                  GDK_KEY_F1,
+                  0,
+                  GTK_ACCEL_VISIBLE);
+
+    menuitem := gtk_check_menu_item_new_with_label ('Accelerator Locked');
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+    gtk_widget_show (menuitem);
+    gtk_widget_add_accelerator (menuitem,
+                 'activate',
+                  accel_group,
+                  GDK_KEY_F2,
+                  0,
+                  GTK_ACCEL_VISIBLE or GTK_ACCEL_LOCKED);
+
+    menuitem := gtk_check_menu_item_new_with_label ('Accelerators Frozen');
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+    gtk_widget_show (menuitem);
+    gtk_widget_add_accelerator (menuitem,
+                 'activate',
+                  accel_group,
+                  GDK_KEY_F2,
+                  0,
+                  GTK_ACCEL_VISIBLE);
+
+    gtk_widget_add_accelerator (menuitem,
+                 'activate',
+                  accel_group,
+                  GDK_KEY_F3,
+                  0,
+                  GTK_ACCEL_VISIBLE);
+
+    optionmenu := gtk_option_menu_new ();
+    gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), menu);
+    gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 3);
+    gtk_box_pack_start (GTK_BOX (box2), optionmenu, TRUE, TRUE, 0);
+    gtk_widget_show (optionmenu);
+
+    separator := gtk_hseparator_new ();
+    gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
+    gtk_widget_show (separator);
+
+    box2 := gtk_vbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
+    gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
+    gtk_widget_show (box2);
+
+    button := gtk_button_new_with_label ('close');
+    g_signal_connect_swapped (button, 'clicked',
+                                G_CALLBACK(@gtk_widget_destroy), menu_window);
+
+    gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
+    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+    gtk_widget_grab_default (button);
+    gtk_widget_show (button);
+  end;
+
+  if not GTK_WIDGET_VISIBLE (menu_window) then
+    gtk_widget_show (menu_window)
+  else begin
+    gtk_widget_destroy (menu_window);
+    menu_window := NULL;
+  end;
+
+  do_menus := menu_window;
+end;

+ 212 - 0
packages/extra/gtk2/examples/gtk_demo/panes.inc

@@ -0,0 +1,212 @@
+(* Paned Widgets
+ *
+ * The GtkHPaned and GtkVPaned Widgets divide their content
+ * area into two panes with a divider in between that the
+ * user can adjust. A separate child is placed into each
+ * pane.
+ *
+ * There are a number of options that can be set for each pane.
+ * This test contains both a horizontal (HPaned) and a vertical
+ * (VPaned) widget, and allows you to adjust the options for
+ * each side of each widget.
+ *)
+
+var
+  panes_window  : PGtkWidget;
+
+
+procedure toggle_resize (widget  : PGtkWidget;
+                         child   : PGtkWidget); cdecl;
+var
+  paned      : PGtkPaned;
+  is_child1,
+  resize,
+  shrink     : gboolean;
+
+begin
+  paned := PGtkPaned (child^.parent);
+  is_child1 := (child = paned^.child1);
+
+  if is_child1 then
+  begin
+    resize := child1_resize (paned^) <> 0;
+    shrink := child1_shrink (paned^) <> 0;
+  end else
+  begin
+    resize := child2_resize (paned^) <> 0;
+    shrink := child2_shrink (paned^) <> 0;
+  end;
+
+  gtk_widget_ref (child);
+  gtk_container_remove (pGtkContainer (child^.parent), child);
+
+  if is_child1 then
+    gtk_paned_pack1 (paned, child, not resize, shrink)
+  else
+    gtk_paned_pack2 (paned, child, not resize, shrink);
+
+  gtk_widget_unref (child);
+end;
+
+
+
+procedure toggle_shrink (widget  : PGtkWidget;
+                         child   : PGtkWidget); cdecl;
+var
+  paned      : PGtkPaned;
+  is_child1,
+  resize,
+  shrink     : gboolean;
+
+begin
+  paned := PGtkPaned (child^.parent);
+  is_child1 := (child = paned^.child1);
+
+  if is_child1 then
+  begin
+    resize := child1_resize (paned^) <> 0;
+    shrink := child1_shrink (paned^) <> 0;
+  end else
+  begin
+    resize := child2_resize (paned^) <> 0;
+    shrink := child2_shrink (paned^) <> 0;
+  end;
+
+  gtk_widget_ref (child);
+  gtk_container_remove (pGtkContainer (child^.parent), child);
+  if is_child1 then
+    gtk_paned_pack1 (paned, child, resize, not shrink)
+  else
+    gtk_paned_pack2 (paned, child, resize, not shrink);
+
+  gtk_widget_unref (child);
+end;
+
+function create_pane_options (paned       : PGtkPaned;
+                              frame_label : pgchar;
+                              label1      : pgchar;
+                              label2      : pgchar): PGtkWidget; cdecl;
+var
+  frame,
+  table,
+  thelabel,
+  check_button : PGtkWidget;
+
+begin
+  frame := gtk_frame_new (frame_label);
+  gtk_container_set_border_width (pGtkContainer(frame), 4);
+
+  table := gtk_table_new (3, 2, TRUE);
+  gtk_container_add (pGtkContainer(frame), table);
+
+  thelabel := gtk_label_new (label1);
+  gtk_table_attach_defaults (pGtkTable(table), thelabel, 0, 1, 0, 1);
+
+  check_button := gtk_check_button_new_with_mnemonic ('_Resize');
+  gtk_table_attach_defaults (pGtkTable(table), check_button,  0, 1, 1, 2);
+
+  g_signal_connect (check_button, 'toggled',
+                    TGCallback (@toggle_resize), paned^.child1);
+
+  check_button := gtk_check_button_new_with_mnemonic ('_Shrink');
+  gtk_table_attach_defaults (pGtkTable(table), check_button,  0, 1, 2, 3);
+
+  gtk_toggle_button_set_active (pGtkToggleButton(check_button), TRUE);
+
+  g_signal_connect (check_button, 'toggled', TGCallback(@toggle_shrink), paned^.child1);
+
+  thelabel := gtk_label_new (label2);
+  gtk_table_attach_defaults (pGtkTable(table), thelabel, 1, 2, 0, 1);
+
+  check_button := gtk_check_button_new_with_mnemonic ('_Resize');
+  gtk_table_attach_defaults (pGtkTable(table), check_button, 1, 2, 1, 2);
+
+  gtk_toggle_button_set_active (pGtkToggleButton(check_button), TRUE);
+
+  g_signal_connect (check_button, 'toggled', TGCallback(@toggle_resize), paned^.child2);
+
+  check_button := gtk_check_button_new_with_mnemonic ('_Shrink');
+  gtk_table_attach_defaults (pGtkTable(table), check_button, 1, 2, 2, 3);
+
+  gtk_toggle_button_set_active (pGtkToggleButton(check_button), TRUE);
+  g_signal_connect (check_button, 'toggled', TGCallback(@toggle_shrink), paned^.child2);
+
+  create_pane_options := frame;
+end;
+
+function do_panes          : PGtkWidget;
+var
+  frame,
+  hpaned,
+  vpaned,
+  button,
+  vbox      : PGtkWidget;
+
+begin
+  if panes_window = NULL then
+  begin
+    panes_window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+    g_signal_connect (panes_window, 'destroy',
+                        TGCallback(@gtk_widget_destroyed), @panes_window);
+
+    gtk_window_set_title (pGtkWindow(panes_window), 'Panes');
+    gtk_container_set_border_width (pGtkContainer(panes_window), 0);
+
+    vbox := gtk_vbox_new (FALSE, 0);
+    gtk_container_add (pGtkContainer(panes_window), vbox);
+
+    vpaned := gtk_vpaned_new ();
+    gtk_box_pack_start (pGtkBox(vbox), vpaned, TRUE, TRUE, 0);
+    gtk_container_set_border_width (pGtkContainer(vpaned), 5);
+
+    hpaned := gtk_hpaned_new ();
+    gtk_paned_add1 (pGtkPaned(vpaned), hpaned);
+
+    frame := gtk_frame_new (NULL);
+    gtk_frame_set_shadow_type (pGtkFrame(frame), GTK_SHADOW_IN);
+    gtk_widget_set_size_request (frame, 60, 60);
+    gtk_paned_add1 (pGtkPaned(hpaned), frame);
+
+    button := gtk_button_new_with_mnemonic ('_Hi there');
+    gtk_container_add (pGtkContainer(frame), button);
+
+    frame := gtk_frame_new (NULL);
+    gtk_frame_set_shadow_type (pGtkFrame(frame), GTK_SHADOW_IN);
+    gtk_widget_set_size_request (frame, 80, 60);
+    gtk_paned_add2 (pGtkPaned(hpaned), frame);
+
+    frame := gtk_frame_new (NULL);
+    gtk_frame_set_shadow_type (pGtkFrame(frame), GTK_SHADOW_IN);
+    gtk_widget_set_size_request (frame, 60, 80);
+    gtk_paned_add2 (pGtkPaned(vpaned), frame);
+
+    (* Now create toggle buttons to control sizing *)
+
+    gtk_box_pack_start (pGtkBox(vbox),
+              create_pane_options (pGtkPaned(hpaned),
+                        'Horizontal',
+                        'Left',
+                        'Right'),
+              FALSE, FALSE, 0);
+
+    gtk_box_pack_start (pGtkBox(vbox),
+                          create_pane_options (pGtkPaned(vpaned),
+                           'Vertical',
+                           'Top',
+                           'Bottom'),
+              FALSE, FALSE, 0);
+
+    gtk_widget_show_all (vbox);
+  end;
+
+  if not GTK_WIDGET_VISIBLE (panes_window) then
+    gtk_widget_show (panes_window)
+  else begin
+    gtk_widget_destroy (panes_window);
+    panes_window := NULL;
+  end;
+
+  do_panes  := panes_window;
+end;
+

+ 293 - 0
packages/extra/gtk2/examples/gtk_demo/pixbufs.inc

@@ -0,0 +1,293 @@
+(* Pixbufs
+ *
+ * A GdkPixbuf represents an image, normally in RGB or RGBA format.
+ * Pixbufs are normally used to load files from disk and perform
+ * image scaling.
+ *
+ * This demo is not all that educational, but looks cool. It was written
+ * by Extreme Pixbuf Hacker Federico Mena Quintero. It also shows
+ * off how to use GtkDrawingArea to do a simple animation.
+ *
+ * Look at the Image demo for additional pixbuf usage examples.
+ *
+ *)
+
+
+const
+  FRAME_DELAY = 50;
+
+  BACKGROUND_NAME = 'background.jpg';
+
+  image_names : array [1..8] of pchar = (
+    'apple-red.png',
+    'gnome-applets.png',
+    'gnome-calendar.png',
+    'gnome-foot.png',
+    'gnome-gmush.png',
+    'gnome-gimp.png',
+    'gnome-gsame.png',
+    'gnu-keys.png');
+
+  N_IMAGES = high(image_names);
+
+(* demo window *)
+var
+  pixbufs_window      : PGtkWidget;
+
+(* Current frame *)
+  pixbufs_frame       : PGdkPixbuf;
+
+(* Background image *)
+  pixbufs_background  : PGdkPixbuf;
+
+  pixbufs_back_width,
+  pixbufs_back_height : gint;
+
+
+(* Images *)
+  images              : array [1..N_IMAGES] of PGdkPixbuf;
+
+(* Widgets *)
+  pixbufs_da          : PGtkWidget;
+
+(* Loads the images for the demo and returns whether the operation succeeded *)
+function load_pixbufs (error : PPGError): gboolean;
+var
+  i        :   gint;
+  filename :   pgchar;
+
+begin
+
+  if pixbufs_background <> NULL then  begin
+    load_pixbufs := TRUE;  (* already loaded earlier *)
+    exit;
+  end;
+
+  (* demo_find_file() looks in the the current directory first,
+   * so you can run gtk-demo without installing GTK, then looks
+   * in the location where the file is installed.
+   *)
+
+  filename := demo_find_file (BACKGROUND_NAME, error);
+  if filename = NULL then begin
+    load_pixbufs := FALSE;     (* note that "error" was filled in and returned *)
+    exit;
+  end;
+
+  pixbufs_background := gdk_pixbuf_new_from_file (filename, error);
+  g_free (filename);
+
+  if pixbufs_background = NULL then begin
+    load_pixbufs := FALSE; (* Note that "error" was filled with a GError *)
+    exit;
+  end;
+
+  pixbufs_back_width  := gdk_pixbuf_get_width (pixbufs_background);
+  pixbufs_back_height := gdk_pixbuf_get_height (pixbufs_background);
+
+  for i := 1 to N_IMAGES do
+  begin
+      filename := demo_find_file (image_names[i], error);
+
+      if filename = NULL then begin
+        load_pixbufs := FALSE; (* Note that "error" was filled with a GError *)
+        exit
+      end;
+
+      images[i] := gdk_pixbuf_new_from_file (filename, error);
+      g_free (filename);
+
+      if images[i] = NULL then begin
+        load_pixbufs := FALSE;      (* Note that "error" was filled with a GError *)
+        exit;
+      end;
+
+  end;
+
+  load_pixbufs := TRUE;
+end;
+
+(* Expose callback for the drawing area *)
+function expose_cb (widget : PGtkWidget;
+                    event  : PGdkEventExpose;
+                    data   : gpointer): gint; cdecl;
+var
+  pixels     : pguchar;
+  rowstride  : gint;
+
+begin
+  rowstride := gdk_pixbuf_get_rowstride (pixbufs_frame);
+
+  pixels := gdk_pixbuf_get_pixels (pixbufs_frame) + rowstride * event^.area.y + event^.area.x * 3;
+
+  gdk_draw_rgb_image_dithalign (widget^.window,
+                                widget^.style^.black_gc,
+                                event^.area.x, event^.area.y,
+                                event^.area.width, event^.area.height,
+                                GDK_RGB_DITHER_NORMAL,
+                                pixels, rowstride,
+                                event^.area.x, event^.area.y);
+
+  expose_cb := 1;
+end;
+
+const
+  CYCLE_LEN = 60;
+
+var
+  pixbufs_frame_num : integer;
+
+
+(* Timeout handler to regenerate the frame *)
+function timeout (data : gpointer): gboolean;  cdecl;
+var
+  f      : double;
+  i      : integer;
+  xmid,
+  ymid,
+  radius : double;
+
+  ang, r, k  : double;
+
+  alpha,
+  xpos, ypos,
+  iw, ih     : integer;
+
+  r1, r2,
+  dest       : TGdkRectangle;
+
+
+begin
+  gdk_pixbuf_copy_area (pixbufs_background, 0, 0, pixbufs_back_width,
+                        pixbufs_back_height, pixbufs_frame, 0, 0);
+
+  f := double(pixbufs_frame_num mod CYCLE_LEN) / CYCLE_LEN;
+
+  xmid := pixbufs_back_width / 2.0;
+  ymid := pixbufs_back_height / 2.0;
+
+
+  radius := min (ymid, xmid) / 2.0;
+
+  for i := 1 to N_IMAGES do
+  begin
+    ang := 2.0 * G_PI * double (i / N_IMAGES) - f * 2.0 * G_PI;
+
+    iw := gdk_pixbuf_get_width (images[i]);
+    ih := gdk_pixbuf_get_height (images[i]);
+
+    r := radius + (radius / 3.0) * sin (f * 2.0 * G_PI);
+
+    xpos :=  floor (xmid + r * cos (ang) - iw / 2.0 + 0.5);
+    ypos :=  floor (ymid + r * sin (ang) - ih / 2.0 + 0.5);
+
+    if (i and 1) <> 0 then k:= sin (f * 2.0 * G_PI)
+    else k:= cos (f * 2.0 * G_PI);
+
+    k := 2.0 * k * k;
+    k := MAX (0.25, k);
+
+    r1.x := xpos;
+    r1.y := ypos;
+    r1.width := round(iw * k);
+    r1.height := round(ih * k);
+
+    r2.x := 0;
+    r2.y := 0;
+    r2.width  := pixbufs_back_width;
+    r2.height := pixbufs_back_height;
+
+    if gdk_rectangle_intersect (@r1, @r2, @dest) then begin
+      if (i and 1) <> 0 then
+        alpha := round (MAX (127, abs (255 * sin (f * 2.0 * G_PI))))
+      else
+        alpha := round (MAX (127, abs (255 * cos (f * 2.0 * G_PI))));
+
+      gdk_pixbuf_composite (images[i],
+                              pixbufs_frame,
+                              dest.x, dest.y,
+                              dest.width, dest.height,
+                              xpos, ypos,
+                              k, k,
+                              GDK_INTERP_NEAREST,
+                  alpha);
+    end;
+  end;
+
+  gtk_widget_queue_draw (pixbufs_da);
+
+  inc(pixbufs_frame_num);
+  exit (TRUE);
+end;
+
+var
+  pixbufs_timeout_id : guint;
+
+procedure pixbufs_cleanup_callback (_object : PGtkObject;
+                            data    : gpointer);    cdecl;
+begin
+  g_source_remove (pixbufs_timeout_id);
+  pixbufs_timeout_id := 0;
+end;
+
+
+
+function do_pixbufs        : PGtkWidget;
+var
+  error  : PGError;
+  dialog : PGtkWidget;
+
+begin
+  if pixbufs_window = NULL then
+  begin
+
+    pixbufs_window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_window_set_title (GTK_WINDOW (pixbufs_window), 'Pixbufs');
+    gtk_window_set_resizable (GTK_WINDOW (pixbufs_window), FALSE);
+
+    g_signal_connect (pixbufs_window, 'destroy', G_CALLBACK (@gtk_widget_destroyed), @pixbufs_window);
+    g_signal_connect (pixbufs_window, 'destroy', G_CALLBACK (@pixbufs_cleanup_callback), NULL);
+
+
+    error := NULL;
+    if not load_pixbufs (@error) then
+    begin
+          dialog := gtk_message_dialog_new (GTK_WINDOW (pixbufs_window),
+                                           GTK_DIALOG_DESTROY_WITH_PARENT,
+                                           GTK_MESSAGE_ERROR,
+                                           GTK_BUTTONS_CLOSE,
+                                           'Failed to load an image: %s',
+                                           [error^.message]);
+
+          g_error_free (error);
+
+          g_signal_connect (dialog, 'response',
+                            G_CALLBACK (@gtk_widget_destroy), NULL);
+
+          gtk_widget_show (dialog);
+    end else
+    begin
+          gtk_widget_set_size_request (pixbufs_window, pixbufs_back_width, pixbufs_back_height);
+
+          pixbufs_frame := gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, pixbufs_back_width, pixbufs_back_height);
+
+          pixbufs_da := gtk_drawing_area_new ();
+
+          g_signal_connect (pixbufs_da, 'expose_event',
+                            G_CALLBACK (@expose_cb), NULL);
+
+          gtk_container_add (GTK_CONTAINER (pixbufs_window), pixbufs_da);
+
+          pixbufs_timeout_id := gtk_timeout_add (FRAME_DELAY, @timeout, NULL);
+    end;
+  end;
+
+  if not GTK_WIDGET_VISIBLE (pixbufs_window) then
+    gtk_widget_show_all (pixbufs_window)
+  else begin
+    gtk_widget_destroy (pixbufs_window);
+    pixbufs_window := NULL;
+  end;
+
+  do_pixbufs := pixbufs_window;
+end;

+ 182 - 0
packages/extra/gtk2/examples/gtk_demo/sizegroup.inc

@@ -0,0 +1,182 @@
+(* Size Groups
+ *
+ * GtkSizeGroup provides a mechanism for grouping a number of
+ * widgets together so they all request the same amount of space.
+ * This is typically useful when you want a column of widgets to
+ * have the same size, but you can't use a GtkTable widget.
+ *
+ * Note that size groups only affect the amount of space requested,
+ * not the size that the widgets finally receive. If you want the
+ * widgets in a GtkSizeGroup to actually be the same size, you need
+ * to pack them in such a way that they get the size they request
+ * and not more. For example, if you are packing your widgets
+ * into a table, you would not include the GTK_FILL flag.
+ *)
+
+var
+  sg_window : PGtkWidget;
+
+
+const
+  color_options : array [0..3] of pchar = ('Red', 'Green', 'Blue', NULL);
+
+  dash_options  : array [0..3] of pchar = ('Solid', 'Dashed', 'Dotted', NULL);
+
+  end_options   : array [0..3] of pchar = ('Square', 'Round', 'Arrow', NULL);
+
+
+(* Convenience function to create an option menu holding a number of strings
+ *)
+
+function create_option_menu (strings : ppchar): PGtkWidget;
+var
+  menu,
+  menu_item,
+  option_menu : PGtkWidget;
+
+  str         : ppchar;
+
+begin
+  menu := gtk_menu_new ();
+
+  str := strings;
+  while str^ <> NULL do
+  begin
+    menu_item := gtk_menu_item_new_with_label ( str[0]);
+    gtk_widget_show (menu_item);
+
+    gtk_menu_shell_append (pGtkMenuShell(menu), menu_item);
+    inc(str);
+  end;
+
+  option_menu := gtk_option_menu_new ();
+  gtk_option_menu_set_menu (pGtkOptionMenu(option_menu), menu);
+
+  create_option_menu := option_menu;
+end;
+
+procedure add_row (table      : PGtkTable;
+                   row        : integer;
+                   size_group : PGtkSizeGroup;
+                   label_text : pchar;
+                   options    : ppchar);
+var
+  option_menu : PGtkWidget;
+  thelabel    : PGtkWidget;
+
+begin
+  thelabel := gtk_label_new_with_mnemonic (label_text);
+  gtk_misc_set_alignment (pGtkMisc(thelabel), 0, 1);
+  gtk_table_attach (pGtkTable(table), thelabel,
+                    0, 1,                   row, row + 1,
+                    GTK_EXPAND or GTK_FILL, 0,
+                    0,                      0);
+
+  option_menu := create_option_menu (options);
+  gtk_label_set_mnemonic_widget (pGtkLabel(thelabel), option_menu);
+  gtk_size_group_add_widget (size_group, option_menu);
+  gtk_table_attach (pGtkTable(table), option_menu,
+                    1, 2,                  row, row + 1,
+                    0,                     0,
+                    0,                     0);
+end;
+
+procedure toggle_grouping (check_button : PGtkToggleButton;
+                           size_group   : PGtkSizeGroup); cdecl;
+var
+  new_mode  : TGtkSizeGroupMode;
+
+begin
+  (* GTK_SIZE_GROUP_NONE is not generally useful, but is useful
+   * here to show the effect of GTK_SIZE_GROUP_HORIZONTAL by
+   * contrast.
+   *)
+
+  if gtk_toggle_button_get_active (check_button) then
+    new_mode := GTK_SIZE_GROUP_HORIZONTAL
+  else
+    new_mode := GTK_SIZE_GROUP_NONE;
+
+  gtk_size_group_set_mode (size_group, new_mode);
+end;
+
+
+
+
+function do_sizegroup      : PGtkWidget;
+var
+  table,
+  frame,
+  vbox,
+  check_button  : PGtkWidget;
+
+  size_group    : PGtkSizeGroup;
+
+begin
+  if sg_window = NULL then
+  begin
+    sg_window := gtk_dialog_new_with_buttons ('Size Groups',
+                        NULL, 0,
+                                            GTK_STOCK_CLOSE,
+                                           [ GTK_RESPONSE_NONE,
+                                            NULL]);
+
+    gtk_window_set_resizable (pGtkWindow(sg_window), FALSE);
+
+    g_signal_connect (sg_window, 'response',
+                        TGCallback(@gtk_widget_destroy), NULL);
+    g_signal_connect (sg_window, 'destroy',
+                        TGCallback(@gtk_widget_destroyed), @sg_window);
+
+    vbox := gtk_vbox_new (FALSE, 5);
+    gtk_box_pack_start (pGtkBox(pGtkDialog (sg_window)^.vbox), vbox, TRUE, TRUE, 0);
+    gtk_container_set_border_width (pGtkContainer(vbox), 5);
+
+    size_group := gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+
+    (* Create one frame holding color options
+     *)
+    frame := gtk_frame_new ('Color Options');
+    gtk_box_pack_start (pGtkBox(vbox), frame, TRUE, TRUE, 0);
+
+    table := gtk_table_new (2, 2, FALSE);
+    gtk_container_set_border_width (pGtkContainer(table), 5);
+    gtk_table_set_row_spacings (pGtkTable(table), 5);
+    gtk_table_set_col_spacings (pGtkTable(table), 10);
+    gtk_container_add (pGtkContainer(frame), table);
+
+    add_row (pGtkTable(table), 0, size_group, '_Foreground', @color_options[0]);
+    add_row (pGtkTable(table), 1, size_group, '_Background', @color_options[0]);
+
+    (* And another frame holding line style options
+     *)
+    frame := gtk_frame_new ('Line Options');
+    gtk_box_pack_start (pGtkBox(vbox), frame, FALSE, FALSE, 0);
+
+    table := gtk_table_new (2, 2, FALSE);
+    gtk_container_set_border_width (pGtkContainer(table), 5);
+    gtk_table_set_row_spacings (pGtkTable(table), 5);
+    gtk_table_set_col_spacings (pGtkTable(table), 10);
+    gtk_container_add (pGtkContainer(frame), table);
+
+    add_row (pGtkTable(table), 0, size_group, '_Dashing', @dash_options[0]);
+    add_row (pGtkTable(table), 1, size_group, '_Line ends', @end_options[0]);
+
+    (* And a check button to turn grouping on and off *)
+    check_button := gtk_check_button_new_with_mnemonic ('_Enable grouping');
+    gtk_box_pack_start (pGtkBox(vbox), check_button, FALSE, FALSE, 0);
+
+    gtk_toggle_button_set_active (pGtkToggleButton(check_button), TRUE);
+    g_signal_connect (check_button, 'toggled',
+             TGCallback (@toggle_grouping), size_group);
+  end;
+
+  if not GTK_WIDGET_VISIBLE (sg_window) then
+    gtk_widget_show_all (sg_window)
+  else begin
+    gtk_widget_destroy (sg_window);
+    sg_window := NULL;
+  end;
+
+  do_sizegroup := sg_window;
+end;

+ 551 - 0
packages/extra/gtk2/examples/gtk_demo/stock_browser.inc

@@ -0,0 +1,551 @@
+(* Stock Item and Icon Browser
+ *
+ * This source code for this demo doesn't demonstrate anything
+ * particularly useful in applications. The purpose of the "demo" is
+ * just to provide a handy place to browse the available stock icons
+ * and stock items.
+ *)
+
+var
+  stock_window : PGtkWidget;
+
+type
+  PStockItemInfo = ^TStockItemInfo;
+  TStockItemInfo = record
+                     id         : pgchar;
+                     item       : TGtkStockItem;
+                     small_icon : PGdkPixbuf;
+                     macro      : pgchar;
+                     accel_str  : pgchar;
+                   end;
+
+
+(* Make StockItemInfo a boxed type so we can automatically
+ * manage memory
+ *)
+
+procedure stock_item_info_free (info : PStockItemInfo); cdecl;
+begin
+  g_free (info^.id);
+  g_free (info^.macro);
+  g_free (info^.accel_str);
+  if info^.small_icon <> NULL then
+    g_object_unref (pGObject(info^.small_icon));
+
+  g_free (info);
+end;
+
+function stock_item_info_copy (src  : PStockItemInfo): PStockItemInfo; cdecl;
+var
+  info : PStockItemInfo;
+
+begin
+  info := g_malloc0 (sizeof(TStockItemInfo));
+  info^.id := g_strdup (src^.id);
+  info^.macro := g_strdup (src^.macro);
+  info^.accel_str := g_strdup (src^.accel_str);
+
+  info^.item := src^.item;
+
+  info^.small_icon := src^.small_icon;
+  if info^.small_icon <> NULL then
+    g_object_ref (pGObject(info^.small_icon));
+
+  stock_item_info_copy := info;
+end;
+
+var
+  StockItemInfoType : GType;
+
+function stock_item_info_get_type: GType;
+begin
+
+  if StockItemInfoType = 0 then
+    StockItemInfoType := g_boxed_type_register_static ('StockItemInfo',
+                                             TGBoxedCopyFunc(@stock_item_info_copy),
+                                             TGBoxedFreeFunc (@stock_item_info_free));
+
+  stock_item_info_get_type := StockItemInfoType;
+end;
+
+function STOCK_ITEM_INFO_TYPE: GType; inline;
+begin
+  STOCK_ITEM_INFO_TYPE := stock_item_info_get_type;
+end;
+
+
+type
+  PStockItemDisplay = ^TStockItemDisplay;
+  TStockItemDisplay = record
+                        type_label        : PGtkWidget;
+                        macro_label       : PGtkWidget;
+                        id_label          : PGtkWidget;
+                        label_accel_label : PGtkWidget;
+                        icon_image        : PGtkWidget;
+                      end;
+
+
+function id_to_macro (id : pgchar): pgchar;
+var
+  macro : PGString;
+  cp    : pgchar;
+
+begin
+  (* gtk-foo-bar -> GTK_STOCK_FOO_BAR *)
+
+  macro := g_string_new (NULL);
+  cp := id;
+
+  if StrLComp (cp, 'gtk-', 4) = 0 then
+  begin
+    g_string_append (macro, 'GTK_STOCK_');
+    cp := cp + 4;
+  end;
+
+  while cp[0] <> #0 do
+  begin
+    if cp[0] = '-' then
+      g_string_append_c (macro, '_')
+    else if g_ascii_islower (cp[0]) then
+        g_string_append_c (macro, g_ascii_toupper (cp[0]))
+      else
+        g_string_append_c (macro, cp[0]);
+
+      inc(cp);
+  end;
+
+  id_to_macro := g_string_free (macro, FALSE);
+end;
+
+function CompareString (string1 : pgchar;
+                        string2 : pgchar): gint; cdecl;
+begin
+  CompareString := StrComp (string1, string2);  // maped to strcomp
+end;
+
+
+function create_model : PGtkTreeModel;
+var
+  store       : PGtkListStore;
+  ids,
+  tmp_list    : PGSList;
+
+  info        : TStockItemInfo;
+  item        : TGtkStockItem;
+  iter        : TGtkTreeIter;
+  icon_set    : PGtkIconSet;
+
+  sizes       : PGtkIconSize;
+  i, n_sizes  : gint;
+  size        : TGtkIconSize;
+
+  w, h        : gint;
+  scaled      : PGdkPixbuf;
+
+begin
+  store := gtk_list_store_new (1, [STOCK_ITEM_INFO_TYPE]);
+
+  ids := gtk_stock_list_ids ();
+  ids := g_slist_sort (ids, TGCompareFunc (@CompareString));
+  tmp_list := ids;
+
+  while tmp_list <> NULL do
+  begin
+    info.id := tmp_list^.data;
+
+    if gtk_stock_lookup (info.id, @item) then
+      info.item := item
+    else begin
+      info.item._label    := NULL;
+      info.item.stock_id := NULL;
+      info.item.modifier := 0;
+      info.item.keyval   := 0;
+      info.item.translation_domain := NULL;
+    end;
+
+    (* only show icons for stock IDs that have default icons *)
+    icon_set := gtk_icon_factory_lookup_default (info.id);
+    if icon_set <> NULL then
+    begin
+      sizes := NULL;
+      n_sizes := 0;
+
+      (* See what sizes this stock icon really exists at *)
+      gtk_icon_set_get_sizes (icon_set, @sizes, @n_sizes);
+
+      (* Use menu size if it exists, otherwise first size found *)
+      size := sizes[0];
+      i := 0;
+      while i < n_sizes do
+      begin
+        if sizes[i] = GTK_ICON_SIZE_MENU then
+        begin
+          size := GTK_ICON_SIZE_MENU;
+          break;
+        end; {of size[i] = GTK_ICON_SIZE_MENU}
+        inc(i);
+      end; {of while}
+
+      g_free (sizes);
+
+      info.small_icon := gtk_widget_render_icon (stock_window, info.id, size, NULL);
+
+      if size <> GTK_ICON_SIZE_MENU then
+      begin
+        (* Make the result the proper size for our thumbnail *)
+        gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, @w, @h);
+
+        scaled := gdk_pixbuf_scale_simple (info.small_icon,
+                                           w, h,
+                                           GDK_INTERP_BILINEAR);
+
+        g_object_unref (pGObject(info.small_icon));
+        info.small_icon := scaled;
+      end; {of size <> GTK_ICON_SIZE_MENU}
+    end else {icon_set = NULL}
+      info.small_icon := NULL;
+
+    if info.item.keyval <> 0 then
+
+      info.accel_str := gtk_accelerator_name (info.item.keyval,
+                                                 info.item.modifier)
+
+    else
+      info.accel_str := g_strdup ('');
+
+
+    info.macro := id_to_macro (info.id);
+
+    gtk_list_store_append (store, @iter);
+    gtk_list_store_set (store, @iter, [0, @info, -1]);
+
+    g_free (info.macro);
+    g_free (info.accel_str);
+
+    if info.small_icon <> NULL then
+      g_object_unref (pGObject(info.small_icon));
+
+    tmp_list := g_slist_next (tmp_list);
+  end; {of while tmp_list <> NULL}
+
+  g_slist_foreach (ids, TGFunc(@g_free), NULL);
+  g_slist_free (ids);
+
+  create_model := pGtkTreeModel(store);
+end;
+
+(* Finds the largest size at which the given image stock id is
+ * available. This would not be useful for a normal application
+ *)
+
+function get_largest_size (id : pgchar): TGtkIconSize;
+var
+  theset      : PGtkIconSet;
+  sizes       : PGtkIconSize;
+  n_sizes,
+  i           : gint;
+  best_size   : TGtkIconsize;
+  best_pixels : gint;
+
+  width,
+  height      : gint;
+
+begin
+  theset := gtk_icon_factory_lookup_default (id);
+  best_size := GTK_ICON_SIZE_INVALID;
+  best_pixels := 0;
+
+  gtk_icon_set_get_sizes (theset, @sizes, @n_sizes);
+
+  for i:=0 to n_sizes-1 do
+  begin
+    gtk_icon_size_lookup (sizes[i], @width, @height);
+
+    if (width * height) > best_pixels then
+    begin
+          best_size := sizes[i];
+          best_pixels := width * height;
+    end; {of if}
+  end; {of for}
+
+  g_free (sizes);
+
+  get_largest_size := best_size;
+end;
+
+procedure selection_changed (selection : PGtkTreeSelection); cdecl;
+var
+  treeview : PGtkTreeView;
+  display  : PStockItemDisplay;
+  model    : PGtkTreeModel;
+  iter     : TGtkTreeIter;
+
+  info     : PStockItemInfo;
+  str      : pgchar;
+
+begin
+
+  treeview := gtk_tree_selection_get_tree_view (selection);
+  display := g_object_get_data (pGObject(treeview), 'stock-display');
+
+  if gtk_tree_selection_get_selected (selection, @model, @iter) then
+  begin
+    gtk_tree_model_get (model, @iter, [0, @info, -1]);
+
+    if (info^.small_icon <> NULL)  and (info^.item._label <> NULL) then
+        gtk_label_set_text (pGtkLabel(display^.type_label), 'Icon and Item')
+      else if info^.small_icon <> NULL then
+        gtk_label_set_text (pGtkLabel(display^.type_label), 'Icon Only')
+      else if info^.item._label <> NULL then
+        gtk_label_set_text (pGtkLabel(display^.type_label), 'Item Only')
+      else
+        gtk_label_set_text (pGtkLabel(display^.type_label), '???????');
+
+    gtk_label_set_text (pGtkLabel(display^.macro_label), info^.macro);
+    gtk_label_set_text (pGtkLabel(display^.id_label), info^.id);
+
+    if info^.item._label <> NULL then
+    begin
+      str := g_strdup_printf ('%s %s', [info^.item._label, info^.accel_str] );
+      gtk_label_set_text_with_mnemonic (pGtkLabel(display^.label_accel_label), str);
+      g_free (str);
+    end else
+      gtk_label_set_text (pGtkLabel(display^.label_accel_label), '');
+
+    if info^.small_icon <> NULL then
+      gtk_image_set_from_stock (pGtkImage(display^.icon_image), info^.id,
+                                  get_largest_size (info^.id))
+    else
+      gtk_image_set_from_pixbuf (pGtkImage(display^.icon_image), NULL);
+
+    stock_item_info_free (info);
+  end { of if gtk_tree_selection_get_selected }
+  else
+  begin
+    gtk_label_set_text (pGtkLabel(display^.type_label), 'No selected item');
+    gtk_label_set_text (pGtkLabel(display^.macro_label), '');
+    gtk_label_set_text (pGtkLabel(display^.id_label), '');
+    gtk_label_set_text (pGtkLabel(display^.label_accel_label), '');
+    gtk_image_set_from_pixbuf (pGtkImage(display^.icon_image), NULL);
+  end;
+end;
+
+procedure macro_set_func_text (tree_column  : PGtkTreeViewColumn;
+                               cell         : PGtkCellRenderer;
+                               model        : PGtkTreeModel;
+                               iter         : PGtkTreeIter;
+                               data         : gpointer); cdecl;
+var
+  info : PStockItemInfo;
+
+begin
+  gtk_tree_model_get (model, iter, [0, @info, -1]);
+
+  g_object_set (pGtkCellRenderer(cell), 'text', [info^.macro, NULL]);
+
+  stock_item_info_free (info);
+end;
+
+procedure macro_set_func_pixbuf (tree_column  : PGtkTreeViewColumn;
+                                 cell         : PGtkCellRenderer;
+                                 model        : PGtkTreeModel;
+                                 iter         : PGtkTreeIter;
+                                 data         : gpointer); cdecl;
+var
+  info : PStockItemInfo;
+
+begin
+  gtk_tree_model_get (model, iter, [0, @info, -1]);
+
+  g_object_set (pGtkCellRenderer(cell), 'pixbuf', [info^.small_icon,  NULL]);
+
+  stock_item_info_free (info);
+end;
+
+procedure id_set_func (tree_column  : PGtkTreeViewColumn;
+                       cell         : PGtkCellRenderer;
+                       model        : PGtkTreeModel;
+                       iter         : PGtkTreeIter;
+                       data         : gpointer); cdecl;
+var
+  info : PStockItemInfo;
+
+begin
+  gtk_tree_model_get (model, iter, [0, @info, -1]);
+
+  g_object_set (pGtkCellRenderer(cell), 'text', [info^.id, NULL]);
+
+  stock_item_info_free (info);
+end;
+
+procedure accel_set_func (tree_column  : PGtkTreeViewColumn;
+                          cell         : PGtkCellRenderer;
+                          model        : PGtkTreeModel;
+                          iter         : PGtkTreeIter;
+                          data         : gpointer); cdecl;
+var
+  info : PStockItemInfo;
+
+begin
+  gtk_tree_model_get (model, iter, [0, @info, -1]);
+
+  g_object_set (pGtkCellRenderer(cell),'text', [info^.accel_str,   NULL]);
+
+  stock_item_info_free (info);
+end;
+
+procedure label_set_func (tree_column  : PGtkTreeViewColumn;
+                          cell         : PGtkCellRenderer;
+                          model        : PGtkTreeModel;
+                          iter         : PGtkTreeIter;
+                          data         : gpointer); cdecl;
+var
+  info : PStockItemInfo;
+
+begin
+  gtk_tree_model_get (model, iter, [0, @info, -1]);
+
+  g_object_set (pGtkCellRenderer(cell), 'text', [info^.item._label, NULL]);
+
+  stock_item_info_free (info);
+end;
+
+function do_stock_browser : PGtkWidget;
+var
+  frame,
+  vbox,
+  hbox,
+  sw,
+  treeview,
+  align         : PGtkWidget;
+  model         : PGtkTreeModel;
+  cell_renderer : PGtkCellRenderer;
+  display       : PStockItemDisplay;
+  selection     : PGtkTreeSelection;
+  column        : PGtkTreeViewColumn;
+
+begin
+  if stock_window = NULL then
+    begin
+      stock_window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_title (pGtkWindow(stock_window), 'Stock Icons and Items');
+      gtk_window_set_default_size (pGtkWindow(stock_window), -1, 500);
+
+      g_signal_connect (stock_window, 'destroy', TGCallback(@gtk_widget_destroyed), @stock_window);
+      gtk_container_set_border_width (pGtkContainer(stock_window), 8);
+
+      hbox := gtk_hbox_new (FALSE, 8);
+      gtk_container_add (pGtkContainer(stock_window), hbox);
+
+      sw := gtk_scrolled_window_new (NULL, NULL);
+      gtk_scrolled_window_set_policy (pGtkScrolledWindow(sw),
+                                      GTK_POLICY_NEVER,
+                                      GTK_POLICY_AUTOMATIC);
+      gtk_box_pack_start (pGtkBox(hbox), sw, FALSE, FALSE, 0);
+
+      model := create_model ();
+
+      treeview := gtk_tree_view_new_with_model (model);
+
+      g_object_unref (pGObject(model));
+
+      gtk_container_add (pGtkContainer(sw), treeview);
+
+      column := gtk_tree_view_column_new ();
+      gtk_tree_view_column_set_title (column, 'Macro');
+
+      cell_renderer := gtk_cell_renderer_pixbuf_new ();
+      gtk_tree_view_column_pack_start (column,
+                                       cell_renderer,
+                                       FALSE);
+      gtk_tree_view_column_set_cell_data_func (column, cell_renderer,
+                                               @macro_set_func_pixbuf, NULL, NULL);
+      cell_renderer := gtk_cell_renderer_text_new ();
+      gtk_tree_view_column_pack_start (column,
+                                       cell_renderer,
+                                       TRUE);
+      gtk_tree_view_column_set_cell_data_func (column, cell_renderer,
+                                               @macro_set_func_text, NULL, NULL);
+
+      gtk_tree_view_append_column (pGtkTreeView(treeview),  column);
+
+      cell_renderer := gtk_cell_renderer_text_new ();
+
+      gtk_tree_view_insert_column_with_data_func (pGtkTreeView(treeview),
+                                                  -1,
+                                                  'Label',
+                                                  cell_renderer,
+                                                  @label_set_func,
+                                                  NULL,
+                                                  NULL);
+
+      gtk_tree_view_insert_column_with_data_func (pGtkTreeView(treeview),
+                                                  -1,
+                                                  'Accel',
+                                                  cell_renderer,
+                                                  @accel_set_func,
+                                                  NULL,
+                                                  NULL);
+
+      gtk_tree_view_insert_column_with_data_func (pGtkTreeView(treeview),
+                                                  -1,
+                                                  'ID',
+                                                  cell_renderer,
+                                                  @id_set_func,
+                                                  NULL,
+                                                  NULL);
+
+      align := gtk_alignment_new (0.5, 0.0, 0.0, 0.0);
+      gtk_box_pack_end (pGtkBox(hbox), align, FALSE, FALSE, 0);
+
+      frame := gtk_frame_new ('Selected Item');
+      gtk_container_add (pGtkContainer(align), frame);
+
+      vbox := gtk_vbox_new (FALSE, 8);
+      gtk_container_set_border_width (pGtkContainer(vbox), 4);
+      gtk_container_add (pGtkContainer(frame), vbox);
+
+      display := g_malloc0 (sizeof(TStockItemDisplay));
+      g_object_set_data_full (pGObject(treeview),
+                              'stock-display',
+                              display,
+                              @g_free); (* free display with treeview *)
+
+      display^.type_label  := gtk_label_new (NULL);
+      display^.macro_label := gtk_label_new (NULL);
+      display^.id_label    := gtk_label_new (NULL);
+      display^.label_accel_label := gtk_label_new (NULL);
+      display^.icon_image  := gtk_image_new_from_pixbuf (NULL); (* empty image *)
+
+      gtk_box_pack_start (pGtkBox(vbox), display^.type_label,
+                          FALSE, FALSE, 0);
+
+      gtk_box_pack_start (pGtkBox(vbox), display^.icon_image,
+                          FALSE, FALSE, 0);
+
+      gtk_box_pack_start (pGtkBox(vbox), display^.label_accel_label,
+                          FALSE, FALSE, 0);
+      gtk_box_pack_start (pGtkBox(vbox), display^.macro_label,
+                          FALSE, FALSE, 0);
+      gtk_box_pack_start (pGtkBox(vbox), display^.id_label,
+                          FALSE, FALSE, 0);
+
+      selection := gtk_tree_view_get_selection (pGtkTreeView(treeview));
+      gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+
+      g_signal_connect (pGObject(selection),
+                        'changed',
+                        TGCallback(@selection_changed),
+                        NULL);
+    end;
+
+  if not GTK_WIDGET_VISIBLE (stock_window) then
+    gtk_widget_show_all (stock_window)
+  else begin
+    gtk_widget_destroy (stock_window);
+    stock_window := NULL;
+  end;
+
+  do_stock_browser := stock_window;
+end;
+

+ 643 - 0
packages/extra/gtk2/examples/gtk_demo/textview.inc

@@ -0,0 +1,643 @@
+// included by gt_demo.pas
+
+(* Text Widget
+ *
+ * The GtkTextView widget displays a GtkTextBuffer. One GtkTextBuffer
+ * can be displayed by multiple GtkTextViews. This demo has two views
+ * displaying a single buffer, and shows off the widget's text
+ * formatting features.
+ *
+ *)
+
+var
+  text_window,
+  text_egg_window : PGtkWidget;
+
+procedure easter_egg_callback (button  : PGtkWidget;
+                               data    : gpointer); forward; cdecl;
+
+const
+  gray50_width  = 2;
+  gray50_height = 2;
+
+  gray50_bits: array [0..1] of char = (#2, #1);
+
+procedure create_tags (buffer : PGtkTextBuffer);
+var
+  stipple : PGdkBitmap;
+
+begin
+  (* Create a bunch of tags. Note that it's also possible to
+   * create tags with gtk_text_tag_new() then add them to the
+   * tag table for the buffer, gtk_text_buffer_create_tag() is
+   * just a convenience function. Also note that you don't have
+   * to give tags a name; pass NULL for the name to create an
+   * anonymous tag.
+   *
+   * In any real app, another useful optimization would be to create
+   * a GtkTextTagTable in advance, and reuse the same tag table for
+   * all the buffers with the same tag set, instead of creating
+   * new copies of the same tags for every buffer.
+   *
+   * Tags are assigned default priorities in order of addition to the
+   * tag table.  That is, tags created later that affect the same text
+   * property affected by an earlier tag will override the earlier
+   * tag.  You can modify tag priorities with
+   * gtk_text_tag_set_priority().
+   *)
+
+  gtk_text_buffer_create_tag (buffer, 'heading',
+                              'weight', [ PANGO_WEIGHT_BOLD,
+                              'size', 15 * PANGO_SCALE,
+                              NULL] );
+
+  gtk_text_buffer_create_tag (buffer, 'italic',
+                              'style', [PANGO_STYLE_ITALIC, NULL]);
+
+  gtk_text_buffer_create_tag (buffer, 'bold',
+                              'weight', [ PANGO_WEIGHT_BOLD, NULL] );
+
+  gtk_text_buffer_create_tag (buffer, 'big',
+                              (* points times the PANGO_SCALE factor *)
+                              'size', [ 20 * PANGO_SCALE, NULL] );
+
+  gtk_text_buffer_create_tag (buffer, 'xx-small',
+                              'scale',[ PANGO_SCALE_XX_SMALL, NULL] );
+
+  gtk_text_buffer_create_tag (buffer, 'x-large',
+                              'scale', [ PANGO_SCALE_X_LARGE, NULL] );
+
+  gtk_text_buffer_create_tag (buffer, 'monospace',
+                              'family', [ 'monospace', NULL]);
+
+  gtk_text_buffer_create_tag (buffer, 'blue_foreground',
+                              'foreground', [ 'blue', NULL] );
+
+  gtk_text_buffer_create_tag (buffer, 'red_background',
+                              'background', [ 'red', NULL] );
+
+  stipple := gdk_bitmap_create_from_data (NULL,
+                                         gray50_bits, gray50_width,
+                                         gray50_height);
+
+  gtk_text_buffer_create_tag (buffer, 'background_stipple',
+                              'background_stipple',[  stipple, NULL] );
+
+  gtk_text_buffer_create_tag (buffer, 'foreground_stipple',
+                              'foreground_stipple', [stipple, NULL]);
+
+  g_object_unref (pGObject(stipple));
+
+  gtk_text_buffer_create_tag (buffer, 'big_gap_before_line',
+                              'pixels_above_lines', [30, NULL]);
+
+  gtk_text_buffer_create_tag (buffer, 'big_gap_after_line',
+                              'pixels_below_lines', [30, NULL]);
+
+  gtk_text_buffer_create_tag (buffer, 'double_spaced_line',
+                              'pixels_inside_wrap', [10, NULL]);
+
+  gtk_text_buffer_create_tag (buffer, 'not_editable',
+                              'editable', [FALSE, NULL]);
+
+  gtk_text_buffer_create_tag (buffer, 'word_wrap',
+                              'wrap_mode', [GTK_WRAP_WORD, NULL]);
+
+  gtk_text_buffer_create_tag (buffer, 'char_wrap',
+                              'wrap_mode', [GTK_WRAP_CHAR, NULL]);
+
+  gtk_text_buffer_create_tag (buffer, 'no_wrap',
+                              'wrap_mode', [GTK_WRAP_NONE, NULL]);
+
+  gtk_text_buffer_create_tag (buffer, 'center',
+                              'justification', [GTK_JUSTIFY_CENTER, NULL]);
+
+  gtk_text_buffer_create_tag (buffer, 'right_justify',
+                              'justification', [GTK_JUSTIFY_RIGHT, NULL]);
+
+  gtk_text_buffer_create_tag (buffer, 'wide_margins',
+                              'left_margin', [50, 'right_margin', 50,
+                              NULL]);
+
+  gtk_text_buffer_create_tag (buffer, 'strikethrough',
+                              'strikethrough', [TRUE, NULL]);
+
+  gtk_text_buffer_create_tag (buffer, 'underline',
+                              'underline', [PANGO_UNDERLINE_SINGLE, NULL]);
+
+  gtk_text_buffer_create_tag (buffer, 'double_underline',
+                              'underline', [PANGO_UNDERLINE_DOUBLE, NULL]);
+
+  gtk_text_buffer_create_tag (buffer, 'superscript',
+                              'rise', [10 * PANGO_SCALE,          (* 10 pixels *)
+                              'size',   8 * PANGO_SCALE,          (* 8 points *)
+                              NULL]);
+
+  gtk_text_buffer_create_tag (buffer, 'subscript',
+                              'rise', [-10 * PANGO_SCALE,   (* 10 pixels *)
+                              'size',    8 * PANGO_SCALE,   (* 8 points *)
+                              NULL]);
+
+  gtk_text_buffer_create_tag (buffer, 'rtl_quote',
+                              'wrap_mode', [ GTK_WRAP_WORD,
+                              'direction',   GTK_TEXT_DIR_RTL,
+                              'indent', 30,
+                              'left_margin', 20,
+                              'right_margin', 20,
+                              NULL]);
+end;
+
+procedure insert_text (buffer : PGtkTextBuffer);
+var
+  iter,
+  text_start,
+  text_end     : TGtkTextIter;
+  pixbuf,
+  scaled       : PGdkPixbuf;
+  filename     : pchar;
+
+begin
+  (* demo_find_file() looks in the the current directory first,
+   * so you can run gtk-demo without installing GTK, then looks
+   * in the location where the file is installed.
+   *)
+  pixbuf := NULL;
+  filename := demo_find_file ('gtk-logo-rgb.gif', NULL);
+
+  if filename <> NULL then
+    begin
+      pixbuf := gdk_pixbuf_new_from_file (filename, NULL);
+      g_free (filename);
+    end;
+
+  if pixbuf = NULL then
+  begin
+    g_error ('Failed to load image file gtk-logo-rgb.gif'#13#10);
+    exit;
+  end;
+
+  scaled := gdk_pixbuf_scale_simple (pixbuf, 32, 32, GDK_INTERP_BILINEAR);
+  g_object_unref (pGObject(pixbuf));
+  pixbuf := scaled;
+
+  (* get start of buffer; each insertion will revalidate the
+   * iterator to point to just after the inserted text.
+   *)
+  gtk_text_buffer_get_iter_at_offset (buffer, @iter, 0);
+
+  gtk_text_buffer_insert (buffer, @iter,
+      'The text widget can display text with all kinds of nifty attributes. '
+    + 'It also supports multiple views of the same buffer; '
+    + 'this demo is showing the same buffer in two places.'#13#10#13#10, -1);
+
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter, 'Font styles. ', -1,
+                                            'heading');
+
+  gtk_text_buffer_insert (buffer, @iter, 'For example, you can have ', -1);
+
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                                            'italic', -1,
+                                            'italic');     // test: left out last argument " NULL "
+  gtk_text_buffer_insert (buffer, @iter, ', ', -1);
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                                            'bold', -1,
+                                            'bold');
+  gtk_text_buffer_insert (buffer, @iter, ', or ', -1);
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                                            'monospace (typewriter)', -1,
+                                            'monospace');
+  gtk_text_buffer_insert (buffer, @iter, ', or ', -1);
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                                            'big', -1,
+                                            'big');
+  gtk_text_buffer_insert (buffer, @iter, ' text. ', -1);
+  gtk_text_buffer_insert (buffer, @iter,
+      'It''s best not to hardcode specific text sizes; '
+    + 'you can use relative sizes as with CSS, such as ', -1);
+
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                                            'xx-small', -1,
+                                            'xx-small');
+  gtk_text_buffer_insert (buffer, @iter, ' or ', -1);
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                                            'x-large', -1,
+                                            'x-large');
+  gtk_text_buffer_insert (buffer, @iter,
+      ' to ensure that your program properly adapts if the user '
+    + ' changes the default font size.'#13#10#13#10, -1);
+
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter, 'Colors. ', -1,
+                                            'heading');
+
+  gtk_text_buffer_insert (buffer, @iter, 'Colors such as ', -1);
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                                            'a blue foreground', -1,
+                                            'blue_foreground');
+  gtk_text_buffer_insert (buffer, @iter, ' or ', -1);
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                                            'a red background', -1,
+                                            'red_background');
+  gtk_text_buffer_insert (buffer, @iter, ' or even ', -1);
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                                            'a stippled red background', -1,
+                                            'red_background',
+                                            ['background_stipple',
+                                            NULL]);
+
+  gtk_text_buffer_insert (buffer, @iter, ' or ', -1);
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                                            'a stippled blue foreground on solid red background', -1,
+                                            'blue_foreground',
+                       ['red_background',
+                                            'foreground_stipple',
+                                            NULL]);
+  gtk_text_buffer_insert (buffer, @iter, ' (select that to read it) can be used.'#13#10#13#10, -1);
+
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter, 'Underline, strikethrough, and rise. ', -1,
+                                            'heading');
+
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                                            'Strikethrough', -1,
+                                            'strikethrough');
+  gtk_text_buffer_insert (buffer, @iter, ', ', -1);
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                                            'underline', -1,
+                                            'underline');
+  gtk_text_buffer_insert (buffer, @iter, ', ', -1);
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                                            'double underline', -1,
+                                            'double_underline');
+  gtk_text_buffer_insert (buffer, @iter, ', ', -1);
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                                            'superscript', -1,
+                                            'superscript');
+  gtk_text_buffer_insert (buffer, @iter, ', and ', -1);
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                                            'subscript', -1,
+                                            'subscript');
+  gtk_text_buffer_insert (buffer, @iter, ' are all supported.'#13#10#13#10, -1);
+
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter, 'Images. ', -1,
+                                            'heading');
+
+  gtk_text_buffer_insert (buffer, @iter, 'The buffer can have images in it: ', -1);
+  gtk_text_buffer_insert_pixbuf (buffer, @iter, pixbuf);
+  gtk_text_buffer_insert_pixbuf (buffer, @iter, pixbuf);
+  gtk_text_buffer_insert_pixbuf (buffer, @iter, pixbuf);
+  gtk_text_buffer_insert (buffer, @iter, ' for example.'#13#10, -1);
+
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter, 'Spacing. ', -1,
+                                            'heading', [NULL]);
+
+  gtk_text_buffer_insert (buffer, @iter, 'You can adjust the amount of space before each line.'#13#10, -1);
+
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                                            'This line has a whole lot of space before it.'#13#10, -1,
+                                            'big_gap_before_line', ['wide_margins', NULL]);
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                                            'You can also adjust the amount of space after each line; '
+                      + 'this line has a whole lot of space after it.'#13#10, -1,
+                                            'big_gap_after_line', ['wide_margins', NULL]);
+
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                                            'You can also adjust the amount of space between wrapped lines; '
+                      + 'this line has extra space between each wrapped line in the same paragraph. '
+                      + 'To show off wrapping, some filler text: the quick brown fox jumped over '
+                      + 'the lazy dog. Blah blah blah blah blah blah blah blah blah.'#13#10, -1,
+                                            'double_spaced_line', ['wide_margins', NULL]);
+
+  gtk_text_buffer_insert (buffer, @iter, 'Also note that those lines have extra-wide margins.'#13#10#13#10, -1);
+
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter, 'Editability. ', -1,
+                                            'heading', [NULL]);
+
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                                            'This line is ''locked down'' and can''t be edited by the user - '
+                      + 'just try it! You can''t delete this line.'#13#10#13#10, -1,
+                                            'not_editable', [NULL]);
+
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter, 'Wrapping. ', -1,
+                                            'heading', [NULL]);
+
+  gtk_text_buffer_insert (buffer, @iter,
+                          'This line (and most of the others in this buffer) is word-wrapped, '
+            + 'using the proper Unicode algorithm. Word wrap should work in all '
+            + 'scripts and languages that GTK+ supports. Let''s make this a long '
+            + 'paragraph to demonstrate: blah blah blah blah blah blah blah blah '
+            + 'blah blah blah blah blah blah blah blah blah blah blah'#13#10#13#10, -1);
+
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+              'This line has character-based wrapping, and can wrap between '
+            + 'any two character glyphs. Let''s make this a long paragraph to '
+            + 'demonstrate: blah blah blah blah blah blah blah blah blah blah '
+            + 'blah blah blah blah blah blah blah blah blah'#13#10#13#10, -1,
+                                            'char_wrap', [NULL]);
+
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+            + 'This line has all wrapping turned off, so it makes the horizontal '
+            + 'scrollbar appear.'#13#10#13#10#13#10, -1,
+                                            'no_wrap', [NULL]);
+
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter, 'Justification. ', -1,
+                                            'heading', [NULL]);
+
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                                            #13#10'This line has center justification.'#13#10, -1,
+                                            'center', [NULL]);
+
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                                            'This line has right justification.'#13#10, -1,
+                                            'right_justify', [NULL]);
+
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+                    #13#10'This line has big wide margins. Text text text text text text '
+        + 'text text text text text text text text text text text text text text '
+        + 'text text text text text text text text text text text text text text '
+        + 'text text.'#13#10, -1,'wide_margins', [NULL]);
+
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter, 'Internationalization. ', -1,
+                                            'heading', [NULL]);
+
+  gtk_text_buffer_insert (buffer, @iter,
+                  'You can put all sorts of Unicode text in the buffer.'#13#10#13#10
+        + 'German (Deutsch Süd) Grüß Gott'#13#10
+        + 'Greek (Ελληνικά) Γειά σας'#13#10
+        + 'Hebrew       שלום'#13#10
+        + 'Japanese (日本語)'#13#10#13#10
+        + 'The widget properly handles bidirectional text, word wrapping, '
+        + 'DOS/UNIX/Unicode paragraph separators, grapheme boundaries, '
+        + 'and so on using the Pango internationalization framework.'#13#10, -1);
+
+  gtk_text_buffer_insert (buffer, @iter, 'Here''s a word-wrapped quote in a right-to-left language:'#13#10, -1);
+  gtk_text_buffer_insert_with_tags_by_name (buffer, @iter,
+          'وقد بدأ ثلاث من أكثر المؤسسات تقدما في '
+        + 'شبكة اكسيون برامجها كمنظمات لا تسعى للربح، '
+        + 'ثم تحولت في السنوات الخمس الماضية إلى مؤسسات '
+        + 'مالية منظمة، وباتت جزءا من النظام المالي في '
+        + 'بلدانها، ولكنها تتخصص في خدمة قطاع المشروعات الصغيرة. '
+        + 'وأحد أكثر هذه المؤسسات نجاحا هو »بانكوسول« '
+        + 'في بوليفيا.'#13#10#13#10, -1,
+                                                'rtl_quote', [NULL]);
+
+  gtk_text_buffer_insert (buffer, @iter, 'You can put widgets in the buffer: Here''s a button: ', -1);
+  gtk_text_buffer_create_child_anchor (buffer, @iter);
+  gtk_text_buffer_insert (buffer, @iter, ' and a menu: ', -1);
+  gtk_text_buffer_create_child_anchor (buffer, @iter);
+  gtk_text_buffer_insert (buffer, @iter, ' and a scale: ', -1);
+  gtk_text_buffer_create_child_anchor (buffer, @iter);
+  gtk_text_buffer_insert (buffer, @iter, ' and an animation: ', -1);
+  gtk_text_buffer_create_child_anchor (buffer, @iter);
+  gtk_text_buffer_insert (buffer, @iter, ' finally a text entry: ', -1);
+  gtk_text_buffer_create_child_anchor (buffer, @iter);
+  gtk_text_buffer_insert (buffer, @iter, '.'#13#10, -1);
+
+  gtk_text_buffer_insert (buffer, @iter,
+       #13#10#13#10'This demo doesn''t demonstrate all the GtkTextBuffer features; '
+     + 'it leaves out, for example: invisible/hidden text (doesn''t work in GTK 2, but planned), '
+     + 'tab stops, application-drawn areas on the sides of the widget for displaying breakpoints and such...', -1);
+
+  (* Apply word_wrap tag to whole buffer *)
+  gtk_text_buffer_get_bounds (buffer, @text_start, @text_end);
+  gtk_text_buffer_apply_tag_by_name (buffer, 'word_wrap', @text_start, @text_end);
+
+  g_object_unref (pGObject(pixbuf));
+end;
+
+function find_anchor (iter : PGtkTextIter): gboolean; cdecl;
+
+begin
+  while gtk_text_iter_forward_char (iter) do
+  begin
+    if gtk_text_iter_get_child_anchor (iter)<> NULL then
+      exit (TRUE);
+  end;
+end;
+
+procedure attach_widgets (text_view : PGtkWidget);
+var
+  iter       : TGtkTextIter;
+  buffer     : PGtkTextBuffer;
+  i          : integer;
+
+  anchor     : PGtkTextChildAnchor;
+  widget,
+  menu,
+  menu_item  : PGtkWidget;
+
+  filename   : pgchar;
+
+begin
+  buffer := gtk_text_view_get_buffer (pGtkTextView(text_view));
+
+  gtk_text_buffer_get_start_iter (buffer, @iter);
+
+  i := 0;
+  while find_anchor (@iter) do
+  begin
+    anchor := gtk_text_iter_get_child_anchor (@iter);
+
+    case i of
+      0: begin
+           widget := gtk_button_new_with_label ('Click Me');
+
+           g_signal_connect (pGObject(widget), 'clicked',
+                        TGCallback(@easter_egg_callback),
+                        NULL);
+         end;
+      1: begin
+           menu := gtk_menu_new ();
+
+           widget := gtk_option_menu_new ();
+
+           menu_item := gtk_menu_item_new_with_label ('Option 1');
+           gtk_menu_shell_append (pGtkMenuShell(menu), menu_item);
+
+           menu_item := gtk_menu_item_new_with_label ('Option 2');
+           gtk_menu_shell_append (pGtkMenuShell(menu), menu_item);
+
+           menu_item := gtk_menu_item_new_with_label ('Option 3');
+           gtk_menu_shell_append (pGtkMenuShell(menu), menu_item);
+
+           gtk_option_menu_set_menu (pGtkOptionMenu(widget), menu);
+         end;
+      2: begin
+           widget := gtk_hscale_new (NULL);
+           gtk_range_set_range (pGtkRange(widget), 0, 100);
+           gtk_widget_set_size_request (widget, 70, -1);
+         end;
+      3: begin
+               filename := demo_find_file ('floppybuddy.gif', NULL);
+               widget := gtk_image_new_from_file (filename);
+               g_free (filename);
+         end;
+      4: begin
+          widget := gtk_entry_new ();
+         end;
+      else begin
+          widget := NULL; (* avoids a compiler warning *)
+          exit;
+         end;
+    end; {of case}
+
+    if widget <> NULL then
+    begin
+      gtk_text_view_add_child_at_anchor (pGtkTextView(text_view), widget, anchor);
+      gtk_widget_show_all (widget);
+    end;
+
+    inc(i);
+  end; {of while}
+end;
+
+
+function do_textview       : PGtkWidget;
+var
+  vpaned,
+  view1,
+  view2,
+  sw       : PGtkWidget;
+  buffer   : PGtkTextBuffer;
+
+begin
+  if text_window = NULL then
+  begin
+    text_window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_window_set_default_size (pGtkWindow(text_window), 450, 450);
+
+    g_signal_connect (text_window, 'destroy',
+                        TGCallback(@gtk_widget_destroyed), @text_window);
+
+    gtk_window_set_title (pGtkWindow(text_window), 'TextView');
+    gtk_container_set_border_width (pGtkContainer(text_window), 0);
+
+    vpaned := gtk_vpaned_new ();
+    gtk_container_set_border_width (pGtkContainer(vpaned), 5);
+    gtk_container_add (pGtkContainer(text_window), vpaned);
+
+    (* For convenience, we just use the autocreated buffer from
+     * the first text view; you could also create the buffer
+     * by itself with gtk_text_buffer_new(), then later create
+     * a view widget.
+     *)
+    view1  := gtk_text_view_new ();
+    buffer := gtk_text_view_get_buffer (pGtkTextView(view1));
+    view2  := gtk_text_view_new_with_buffer (buffer);
+
+    sw := gtk_scrolled_window_new (NULL, NULL);
+    gtk_scrolled_window_set_policy (pGtkScrolledWindow(sw),
+                      GTK_POLICY_AUTOMATIC,
+                                      GTK_POLICY_AUTOMATIC);
+
+    gtk_paned_add1 (pGtkPaned(vpaned), sw);
+
+    gtk_container_add (pGtkContainer(sw), view1);
+
+    sw := gtk_scrolled_window_new (NULL, NULL);
+    gtk_scrolled_window_set_policy (pGtkScrolledWindow(sw),
+                      GTK_POLICY_AUTOMATIC,
+                                      GTK_POLICY_AUTOMATIC);
+    gtk_paned_add2 (pGtkPaned(vpaned), sw);
+
+    gtk_container_add (pGtkContainer(sw), view2);
+
+    create_tags (buffer);
+    insert_text (buffer);
+
+    attach_widgets (view1);
+    attach_widgets (view2);
+
+    gtk_widget_show_all (vpaned);
+  end;
+
+  if not GTK_WIDGET_VISIBLE (text_window) then
+    gtk_widget_show (text_window)
+  else begin
+    gtk_widget_destroy (text_window);
+    text_window := NULL;
+  end;
+
+  do_textview := text_window;
+end;
+
+procedure recursive_attach_view (depth  : integer;
+                                 view   : PGtkTextView;
+                                 anchor : PGtkTextChildAnchor);
+var
+  child_view,
+  event_box,
+  align       : PGtkWidget;
+  color       : TGdkColor;
+
+begin
+  if depth > 4 then
+    exit;
+
+  child_view := gtk_text_view_new_with_buffer (gtk_text_view_get_buffer (view));
+
+  (* Event box is to add a black border around each child view *)
+  event_box := gtk_event_box_new ();
+  gdk_color_parse ('black', @color);
+  gtk_widget_modify_bg (event_box, GTK_STATE_NORMAL, @color);
+
+  align := gtk_alignment_new (0.5, 0.5, 1.0, 1.0);
+  gtk_container_set_border_width (pGtkContainer(align), 1);
+
+  gtk_container_add (pGtkContainer(event_box), align);
+  gtk_container_add (pGtkContainer(align), child_view);
+
+  gtk_text_view_add_child_at_anchor (view, event_box, anchor);
+
+  recursive_attach_view (depth + 1, pGtkTextView(child_view), anchor);
+end;
+
+procedure easter_egg_callback(button : PGtkWidget;
+                              data   : gpointer); cdecl;
+var
+  sw,
+  view   : PGtkWidget;
+  buffer : PGtkTextBuffer;
+  iter   : TGtkTextIter;
+  anchor : PGtkTextChildAnchor;
+
+begin
+  if text_egg_window <> NULL then
+  begin
+    gtk_window_present (pGtkWindow(text_egg_window));
+    exit;
+  end;
+
+  buffer := gtk_text_buffer_new (NULL);
+
+  gtk_text_buffer_get_start_iter (buffer, @iter);
+
+  gtk_text_buffer_insert (buffer, @iter,
+                          'This buffer is shared by a set of nested text views.'#13#10'Nested view:'#13#10, -1);
+  anchor := gtk_text_buffer_create_child_anchor (buffer, @iter);
+  gtk_text_buffer_insert (buffer, @iter,
+                          #13#10'Don''t do this in real applications, please.'#13#10, -1);
+
+  view := gtk_text_view_new_with_buffer (buffer);
+
+  recursive_attach_view (0, pGtkTextView(view), anchor);
+
+  g_object_unref (pGObject(buffer));
+
+  text_egg_window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  sw := gtk_scrolled_window_new (NULL, NULL);
+  gtk_scrolled_window_set_policy (pGtkScrolledWindow(sw),
+                                  GTK_POLICY_AUTOMATIC,
+                                  GTK_POLICY_AUTOMATIC);
+
+  gtk_container_add (pGtkContainer(text_egg_window), sw);
+  gtk_container_add (pGtkContainer(sw), view);
+
+  g_object_add_weak_pointer (pGObject(text_egg_window),
+                             gpointer (@text_egg_window));
+
+  gtk_window_set_default_size (pGtkWindow(text_egg_window), 300, 400);
+
+  gtk_widget_show_all (text_egg_window);
+end;
+
+// included by gt_demo.pas
+

+ 461 - 0
packages/extra/gtk2/examples/gtk_demo/tree_store.inc

@@ -0,0 +1,461 @@
+(* Tree View/Tree Store
+ *
+ * The GtkTreeStore is used to store data in tree form, to be
+ * used later on by a GtkTreeView to display it. This demo builds
+ * a simple GtkTreeStore and displays it. If you're new to the
+ * GtkTreeView widgets and associates, look into the GtkListStore
+ * example first.
+ *
+ *)
+ (*
+  * todo: translate to pascal
+  *)
+
+function do_tree_store     : PGtkWidget;
+begin
+  do_dummy ('Tree View / Tree Store - Demo');
+  do_tree_store := NULL;
+end;
+
+
+(*
+#include <gtk/gtk.h>
+
+static GtkWidget *window = NULL;
+
+/* TreeItem structure */
+typedef struct _TreeItem TreeItem;
+struct _TreeItem
+{
+  const gchar    *label;
+  gboolean        alex;
+  gboolean        havoc;
+  gboolean        tim;
+  gboolean        owen;
+  gboolean        dave;
+  gboolean        world_holiday; /* shared by the European hackers */
+  TreeItem       *children;
+};
+
+/* columns */
+enum
+{
+  HOLIDAY_NAME_COLUMN = 0,
+  ALEX_COLUMN,
+  HAVOC_COLUMN,
+  TIM_COLUMN,
+  OWEN_COLUMN,
+  DAVE_COLUMN,
+
+  VISIBLE_COLUMN,
+  WORLD_COLUMN,
+  NUM_COLUMNS
+};
+
+/* tree data */
+static TreeItem january[] =
+{
+  {"New Years Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
+  {"Presidential Inauguration", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
+  {"Martin Luther King Jr. day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
+  { NULL }
+};
+
+static TreeItem february[] =
+{
+  { "Presidents' Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
+  { "Groundhog Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Valentine's Day", FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, NULL },
+  { NULL }
+};
+
+static TreeItem march[] =
+{
+  { "National Tree Planting Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "St Patrick's Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+  { NULL }
+};
+static TreeItem april[] =
+{
+  { "April Fools' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+  { "Army Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Earth Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+  { "Administrative Professionals' Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { NULL }
+};
+
+static TreeItem may[] =
+{
+  { "Nurses' Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "National Day of Prayer", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Mothers' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+  { "Armed Forces Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Memorial Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
+  { NULL }
+};
+
+static TreeItem june[] =
+{
+  { "June Fathers' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+  { "Juneteenth (Liberation of Slaves)", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Flag Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
+  { NULL }
+};
+
+static TreeItem july[] =
+{
+  { "Parents' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+  { "Independence Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
+  { NULL }
+};
+
+static TreeItem august[] =
+{
+  { "Air Force Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Coast Guard Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Friendship Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { NULL }
+};
+
+static TreeItem september[] =
+{
+  { "Grandparents' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+  { "Citizenship Day or Constitution Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Labor Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
+  { NULL }
+};
+
+static TreeItem october[] =
+{
+  { "National Children's Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Bosses' Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Sweetest Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Mother-in-Law's Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Navy Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Columbus Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
+  { "Halloween", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+  { NULL }
+};
+
+static TreeItem november[] =
+{
+  { "Marine Corps Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Veterans' Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
+  { "Thanksgiving", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
+  { NULL }
+};
+
+static TreeItem december[] =
+{
+  { "Pearl Harbor Remembrance Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Christmas", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
+  { "Kwanzaa", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { NULL }
+};
+
+
+static TreeItem toplevel[] =
+{
+  {"January", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, january},
+  {"February", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, february},
+  {"March", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, march},
+  {"April", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, april},
+  {"May", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, may},
+  {"June", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, june},
+  {"July", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, july},
+  {"August", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, august},
+  {"September", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, september},
+  {"October", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, october},
+  {"November", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, november},
+  {"December", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, december},
+  {NULL}
+};
+
+
+static GtkTreeModel *
+create_model (void)
+{
+  GtkTreeStore *model;
+  GtkTreeIter iter;
+  TreeItem *month = toplevel;
+
+  /* create tree store */
+  model = gtk_tree_store_new (NUM_COLUMNS,
+                              G_TYPE_STRING,
+                              G_TYPE_BOOLEAN,
+                              G_TYPE_BOOLEAN,
+                              G_TYPE_BOOLEAN,
+                              G_TYPE_BOOLEAN,
+                              G_TYPE_BOOLEAN,
+                              G_TYPE_BOOLEAN,
+                              G_TYPE_BOOLEAN);
+
+  /* add data to the tree store */
+  while (month->label)
+    {
+      TreeItem *holiday = month->children;
+
+      gtk_tree_store_append (model, &iter, NULL);
+      gtk_tree_store_set (model, &iter,
+                          HOLIDAY_NAME_COLUMN, month->label,
+                          ALEX_COLUMN, FALSE,
+                          HAVOC_COLUMN, FALSE,
+                          TIM_COLUMN, FALSE,
+                          OWEN_COLUMN, FALSE,
+                          DAVE_COLUMN, FALSE,
+                          VISIBLE_COLUMN, FALSE,
+                          WORLD_COLUMN, FALSE,
+                          -1);
+
+      /* add children */
+      while (holiday->label)
+        {
+          GtkTreeIter child_iter;
+
+          gtk_tree_store_append (model, &child_iter, &iter);
+          gtk_tree_store_set (model, &child_iter,
+                              HOLIDAY_NAME_COLUMN, holiday->label,
+                              ALEX_COLUMN, holiday->alex,
+                              HAVOC_COLUMN, holiday->havoc,
+                              TIM_COLUMN, holiday->tim,
+                              OWEN_COLUMN, holiday->owen,
+                              DAVE_COLUMN, holiday->dave,
+                              VISIBLE_COLUMN, TRUE,
+                              WORLD_COLUMN, holiday->world_holiday,
+                              -1);
+
+          holiday++;
+        }
+
+      month++;
+    }
+
+  return GTK_TREE_MODEL (model);
+}
+
+static void
+item_toggled (GtkCellRendererToggle *cell,
+              gchar                 *path_str,
+              gpointer               data)
+{
+  GtkTreeModel *model = (GtkTreeModel * )data;
+  GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
+  GtkTreeIter iter;
+  gboolean toggle_item;
+
+  gint *column;
+
+  column = g_object_get_data (G_OBJECT (cell), "column");
+
+  /* get toggled iter */
+  gtk_tree_model_get_iter (model, &iter, path);
+  gtk_tree_model_get (model, &iter, column, &toggle_item, -1);
+
+  /* do something with the value */
+  toggle_item ^= 1;
+
+  /* set new value */
+  gtk_tree_store_set (GTK_TREE_STORE (model), &iter, column,
+                      toggle_item, -1);
+
+  /* clean up */
+  gtk_tree_path_free (path);
+}
+
+static void
+add_columns (GtkTreeView *treeview)
+{
+  gint col_offset;
+  GtkCellRenderer *renderer;
+  GtkTreeViewColumn *column;
+  GtkTreeModel *model = gtk_tree_view_get_model (treeview);
+
+  /* column for holiday names */
+  renderer = gtk_cell_renderer_text_new ();
+  g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
+
+  col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
+                                                            -1, "Holiday",
+                                                            renderer, "text",
+                                                            HOLIDAY_NAME_COLUMN,
+                                                            NULL);
+  column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), col_offset - 1);
+  gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
+
+  /* alex column */
+  renderer = gtk_cell_renderer_toggle_new ();
+  g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
+  g_object_set_data (G_OBJECT (renderer), "column", (gint * )ALEX_COLUMN);
+
+  g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (item_toggled),
+                    model);
+  col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
+                                                            -1, "Alex",
+                                                            renderer,
+                                                            "active",
+                                                            ALEX_COLUMN,
+                                                            "visible",
+                                                            VISIBLE_COLUMN,
+                                                            "activatable",
+                                                            WORLD_COLUMN, NULL);
+
+  column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), col_offset - 1);
+  gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column),
+                                   GTK_TREE_VIEW_COLUMN_FIXED);
+  gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
+  gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
+
+  /* havoc column */
+  renderer = gtk_cell_renderer_toggle_new ();
+  g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
+  g_object_set_data (G_OBJECT (renderer), "column", (gint * )HAVOC_COLUMN);
+
+  g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (item_toggled),
+                    model);
+  col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
+                                                            -1, "Havoc",
+                                                            renderer,
+                                                            "active",
+                                                            HAVOC_COLUMN,
+                                                            "visible",
+                                                            VISIBLE_COLUMN,
+                                                            NULL);
+
+  column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), col_offset - 1);
+  gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column),
+                                   GTK_TREE_VIEW_COLUMN_FIXED);
+  gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
+  gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
+
+  /* tim column */
+  renderer = gtk_cell_renderer_toggle_new ();
+  g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
+  g_object_set_data (G_OBJECT (renderer), "column", (gint * )TIM_COLUMN);
+
+  g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (item_toggled),
+                    model);
+  col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
+                                                            -1, "Tim",
+                                                            renderer,
+                                                            "active",
+                                                            TIM_COLUMN,
+                                                            "visible",
+                                                            VISIBLE_COLUMN,
+                                                            "activatable",
+                                                            WORLD_COLUMN, NULL);
+
+  column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), col_offset - 1);
+  gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column),
+                                   GTK_TREE_VIEW_COLUMN_FIXED);
+  gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
+  gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
+
+  /* owen column */
+  renderer = gtk_cell_renderer_toggle_new ();
+  g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
+  g_object_set_data (G_OBJECT (renderer), "column", (gint * )OWEN_COLUMN);
+
+  g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (item_toggled),
+                    model);
+  col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
+                                                            -1, "Owen",
+                                                            renderer,
+                                                            "active",
+                                                            OWEN_COLUMN,
+                                                            "visible",
+                                                            VISIBLE_COLUMN,
+                                                            NULL);
+
+  column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), col_offset - 1);
+  gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column),
+                                   GTK_TREE_VIEW_COLUMN_FIXED);
+  gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
+  gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
+
+  /* dave column */
+  renderer = gtk_cell_renderer_toggle_new ();
+  g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
+  g_object_set_data (G_OBJECT (renderer), "column", (gint * )DAVE_COLUMN);
+
+  g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (item_toggled),
+                    model);
+  col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
+                                                            -1, "Dave",
+                                                            renderer,
+                                                            "active",
+                                                            DAVE_COLUMN,
+                                                            "visible",
+                                                            VISIBLE_COLUMN,
+                                                            NULL);
+
+  column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), col_offset - 1);
+  gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column),
+                                   GTK_TREE_VIEW_COLUMN_FIXED);
+  gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
+  gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
+}
+
+GtkWidget *
+do_tree_store (void)
+{
+  if (!window)
+    {
+      GtkWidget *vbox;
+      GtkWidget *sw;
+      GtkWidget *treeview;
+      GtkTreeModel *model;
+
+      /* create window, etc */
+      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_title (GTK_WINDOW (window), "Card planning sheet");
+      g_signal_connect (G_OBJECT (window), "destroy",
+                        G_CALLBACK (gtk_widget_destroyed), &window);
+
+      vbox = gtk_vbox_new (FALSE, 8);
+      gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
+      gtk_container_add (GTK_CONTAINER (window), vbox);
+
+      gtk_box_pack_start (GTK_BOX (vbox),
+                          gtk_label_new ("Jonathan's Holiday Card Planning Sheet"),
+                          FALSE, FALSE, 0);
+
+      sw = gtk_scrolled_window_new (NULL, NULL);
+      gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
+                                           GTK_SHADOW_ETCHED_IN);
+      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
+                                      GTK_POLICY_AUTOMATIC,
+                                      GTK_POLICY_AUTOMATIC);
+      gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0);
+
+      /* create model */
+      model = create_model ();
+
+      /* create tree view */
+      treeview = gtk_tree_view_new_with_model (model);
+      g_object_unref (G_OBJECT (model));
+      gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview), TRUE);
+      gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)),
+                                   GTK_SELECTION_MULTIPLE);
+
+      add_columns (GTK_TREE_VIEW (treeview));
+
+      gtk_container_add (GTK_CONTAINER (sw), treeview);
+
+      /* expand all rows after the treeview widget has been realized */
+      g_signal_connect (G_OBJECT (treeview), "realize",
+                        G_CALLBACK (gtk_tree_view_expand_all), NULL);
+      gtk_window_set_default_size (GTK_WINDOW (window), 650, 400);
+    }
+
+  if (!GTK_WIDGET_VISIBLE (window))
+    gtk_widget_show_all (window);
+  else
+    {
+      gtk_widget_destroy (window);
+      window = NULL;
+    }
+
+  return window;
+}
+
+*)

+ 1731 - 0
packages/extra/gtk2/examples/helloworld/Makefile

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

+ 15 - 0
packages/extra/gtk2/examples/helloworld/Makefile.fpc

@@ -0,0 +1,15 @@
+#
+#   Makefile.fpc for Free Pascal GTK 2.x.y Examples
+#
+
+[target]
+programs=helloworld
+
+[require]
+packages=gtk2
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../../../../..

+ 96 - 0
packages/extra/gtk2/examples/helloworld/helloworld.pas

@@ -0,0 +1,96 @@
+program HelloWorld;
+
+{$mode objfpc}{$H+}
+
+uses
+  Glib2, Gdk2, Gtk2;
+
+(* This is a callback function. The data arguments are ignored
+ * in this example. More on callbacks below. *)
+procedure hello(Widget: PGtkWidget; Data: gpointer); cdecl;
+begin
+   g_print ('Hello World'#13#10);
+end;
+
+function delete_event( Widget: PGtkWidget; Event: PGdkEvent; Data: gpointer):gint; cdecl;
+begin
+  (* If you return FALSE in the "delete_event" signal handler,
+   * GTK will emit the "destroy" signal. Returning TRUE means
+   * you don't want the window to be destroyed.
+   * This is useful for popping up 'are you sure you want to quit?'
+   * type dialogs. *)
+
+  g_print ('delete event occurred'#13#10);
+
+  (* Change TRUE to FALSE and the main window will be destroyed with
+   * a "delete_event". *)
+
+  Result:=gTRUE;
+end;
+
+(* Another callback *)
+procedure destroy(Widget: PGtkWidget; Data: gpointer); cdecl;
+begin
+  gtk_main_quit;
+end;
+
+var
+  (* GtkWidget is the storage type for widgets *)
+  Window: PGtkWidget;
+  Button: PGtkWidget;
+begin
+
+  (* This is called in all GTK applications. Arguments are parsed
+   * from the command line and are returned to the application. *)
+  gtk_init (@argc, @argv);
+
+  (* create a new window *)
+  window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+  (* When the window is given the "delete_event" signal (this is given
+   * by the window manager, usually by the "close" option, or on the
+   * titlebar), we ask it to call the delete_event () function
+   * as defined above. The data passed to the callback
+   * function is NULL and is ignored in the callback function. *)
+  g_signal_connect (G_OBJECT (window), 'delete_event',
+                      G_CALLBACK (@delete_event), NULL);
+
+  (* Here we connect the "destroy" event to a signal handler.
+   * This event occurs when we call gtk_widget_destroy() on the window,
+   * or if we return FALSE in the "delete_event" callback. *)
+  g_signal_connect (G_OBJECT (window), 'destroy',
+                      G_CALLBACK (@destroy), NULL);
+
+  (* Sets the border width of the window. *)
+  gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+
+  (* Creates a new button with the label "Hello World". *)
+  button := gtk_button_new_with_label ('Hello World');
+
+  (* When the button receives the "clicked" signal, it will call the
+   * function hello() passing it NULL as its argument.  The hello()
+   * function is defined above. *)
+  g_signal_connect (G_OBJECT (button), 'clicked',
+                      G_CALLBACK (@hello), NULL);
+
+  (* This will cause the window to be destroyed by calling
+   * gtk_widget_destroy(window) when "clicked".  Again, the destroy
+   * signal could come from here, or the window manager. *)
+  g_signal_connect_swapped (G_OBJECT (button), 'clicked',
+                              G_CALLBACK (@gtk_widget_destroy), window);
+
+  (* This packs the button into the window (a gtk container). *)
+  gtk_container_add (GTK_CONTAINER (window), button);
+
+  (* The final step is to display this newly created widget. *)
+  gtk_widget_show (button);
+
+  (* and the window *)
+  gtk_widget_show (window);
+
+  (* All GTK applications must have a gtk_main(). Control ends here
+   * and waits for an event to occur (like a key press or
+   * mouse event). *)
+  gtk_main ();
+end.
+

+ 1731 - 0
packages/extra/gtk2/examples/helloworld2/Makefile

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

+ 15 - 0
packages/extra/gtk2/examples/helloworld2/Makefile.fpc

@@ -0,0 +1,15 @@
+#
+#   Makefile.fpc for Free Pascal GTK 2.x.y Examples
+#
+
+[target]
+programs=helloworld2
+
+[require]
+packages=gtk2
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../../../../..

+ 100 - 0
packages/extra/gtk2/examples/helloworld2/helloworld2.pas

@@ -0,0 +1,100 @@
+program helloworld2;
+
+{$mode objfpc} {$H+}
+
+uses
+  Glib2, Gdk2, Gtk2;
+
+
+(* Our new improved callback.  The data passed to this function
+ * is printed to stdout. *)
+procedure callback (widget : PGtkWidget;
+                    data   : gpointer); cdecl;
+begin
+  writeln ('Hello again - ', Pgchar (data), ' was pressed');
+end;
+
+
+(* another callback *)
+function delete_event (widget: PGtkWidget;
+                       event : PGdkEvent;
+                       data  : gpointer): gboolean; cdecl;
+begin
+  gtk_main_quit;
+  delete_event := FALSE;
+end;
+
+
+var
+  window,
+  button,
+  box1     : PGtkWidget;      (* GtkWidget is the storage type for widgets *)
+
+begin
+
+    (* This is called in all GTK applications. Arguments are parsed
+     * from the command line and are returned to the application. *)
+
+    gtk_init (@argc, @argv);
+
+    (* Create a new window *)
+    window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+    (* This is a new call, which just sets the title of our
+     * new window to "Hello Buttons!" *)
+    gtk_window_set_title (GTK_WINDOW (window), 'Hello Buttons!');
+
+    (* Here we just set a handler for delete_event that immediately
+     * exits GTK. *)
+    g_signal_connect (G_OBJECT (window), 'delete_event',
+                              G_CALLBACK (@delete_event), NULL);
+
+    (* Sets the border width of the window. *)
+    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+
+    (* We create a box to pack widgets into.  This is described in detail
+     * in the "packing" section. The box is not really visible, it
+     * is just used as a tool to arrange widgets. *)
+    box1 := gtk_hbox_new (FALSE, 0);
+
+    (* Put the box into the main window. *)
+    gtk_container_add (GTK_CONTAINER (window), box1);
+
+    (* Creates a new button with the label "Button 1". *)
+    button := gtk_button_new_with_label ('Button 1');
+
+    (* Now when the button is clicked, we call the "callback" function
+     * with a pointer to "button 1" as its argument *)
+    g_signal_connect (G_OBJECT (button), 'clicked',
+                              G_CALLBACK (@callback), gpointer('button 1'));
+
+    (* Instead of gtk_container_add, we pack this button into the invisible
+     * box, which has been packed into the window. *)
+    gtk_box_pack_start (GTK_BOX(box1), button, TRUE, TRUE, 0);
+
+    (* Always remember this step, this tells GTK that our preparation for
+     * this button is complete, and it can now be displayed. *)
+    gtk_widget_show (button);
+
+    (* Do these same steps again to create a second button *)
+    button := gtk_button_new_with_label ('Button 2');
+
+    (* Call the same callback function with a different argument,
+     * passing a pointer to "button 2" instead. *)
+    g_signal_connect (G_OBJECT (button), 'clicked',
+                              G_CALLBACK (@callback), gpointer ('button 2'));
+
+    gtk_box_pack_start(GTK_BOX (box1), button, TRUE, TRUE, 0);
+
+    (* The order in which we show the buttons is not really important, but I
+     * recommend showing the window last, so it all pops up at once. *)
+    gtk_widget_show (button);
+
+    gtk_widget_show (box1);
+
+    gtk_widget_show (window);
+
+    (* Rest in gtk_main and wait for the fun to begin! *)
+    gtk_main ();
+end.
+

+ 1731 - 0
packages/extra/gtk2/examples/plugins/Makefile

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

+ 15 - 0
packages/extra/gtk2/examples/plugins/Makefile.fpc

@@ -0,0 +1,15 @@
+#
+#   Makefile.fpc for Free Pascal GTK 2.x.y Examples
+#
+
+[target]
+programs=plugin main
+
+[require]
+packages=gtk2
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../../../../..

+ 47 - 0
packages/extra/gtk2/examples/plugins/main.pas

@@ -0,0 +1,47 @@
+program plugin_test;
+
+uses
+  glib2;
+
+const
+  PLUGIN_NAME = 'plugin';
+  SYMBOL_NAME = 'get_plugin_info';
+
+var
+  module   : PGModule;
+  func     : function : pgchar;
+  id       : pgchar;
+  filename : pgchar;
+
+begin
+  if not g_module_supported then
+  begin
+    g_error ('No GModule support on this platform.'#13#10);
+    exit;
+  end;
+  filename := g_module_build_path ('.',PLUGIN_NAME);
+  g_print ('Trying to locate module; using %s as filename'#13#10,
+            [filename]);
+
+  module := g_module_open (filename, G_MODULE_BIND_MASK);
+
+  if module = NULL then
+  begin
+    g_error ('Couldn''t find Module %s!'#13#10, [PLUGIN_NAME]);
+    exit;
+  end;
+
+  if not g_module_symbol (module, SYMBOL_NAME, @func) then
+  begin
+    g_error ('No symbol %s in %s found!'#13#10, [SYMBOL_NAME, PLUGIN_NAME]);
+    g_module_close (module);
+    exit;
+  end;
+
+  id := func();
+
+  g_print ('Plugin defined itself as "%s"'#13#10, [id]);
+
+  g_module_close (module);
+end.
+

+ 12 - 0
packages/extra/gtk2/examples/plugins/plugin.pas

@@ -0,0 +1,12 @@
+library some_plugin;
+
+function get_plugin_info: pchar; export; cdecl;
+begin
+  get_plugin_info:= 'GLib2 Plugin-Test Plugin';
+end;
+
+exports
+  get_plugin_info;
+
+begin
+end.

+ 1731 - 0
packages/extra/gtk2/examples/scribble_simple/Makefile

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

+ 15 - 0
packages/extra/gtk2/examples/scribble_simple/Makefile.fpc

@@ -0,0 +1,15 @@
+#
+#   Makefile.fpc for Free Pascal GTK 2.x.y Examples
+#
+
+[target]
+programs=scribble_simple
+
+[require]
+packages=gtk2
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../../../../..

+ 170 - 0
packages/extra/gtk2/examples/scribble_simple/scribble_simple.pas

@@ -0,0 +1,170 @@
+program scribble_simple;
+
+{$mode objfpc} {$H+}
+
+uses glib2, gtk2, gdk2;
+
+var
+  pixmap : PGdkPixmap;  (* Backing pixmap for drawing area *)
+
+
+
+(* Create a new backing pixmap of the appropriate size *)
+
+function configure_event ( widget : PGtkWidget;
+                           event  : PGdkEventConfigure): gboolean; cdecl;
+begin
+
+  if pixmap <> nil then
+    g_object_unref (pixmap);
+
+  pixmap := gdk_pixmap_new (widget^.window,
+                                    widget^.allocation.width,
+                                        widget^.allocation.height,
+                            -1);
+  gdk_draw_rectangle (pixmap,
+                              widget^.style^.white_gc,
+                              gTRUE,
+                              0, 0,
+                              widget^.allocation.width,
+                              widget^.allocation.height);
+
+  configure_event := TRUE;
+end;
+
+(* Redraw the screen from the backing pixmap *)
+function expose_event ( widget : PGtkWidget;
+                        event  : PGdkEventExpose) : gboolean; cdecl;
+begin
+  gdk_draw_drawable (widget^.window,
+                             widget^.style^.fg_gc[GTK_WIDGET_STATE (widget)],
+                     pixmap,
+                     event^.area.x, event^.area.y,
+                             event^.area.x, event^.area.y,
+                             event^.area.width, event^.area.height);
+
+  expose_event := FALSE;
+end;
+
+
+(* Draw a rectangle on the screen *)
+procedure draw_brush (widget : PGtkWidget;
+                      x, y   : gdouble); cdecl;
+var
+  update_rect : TGdkRectangle;
+
+begin
+  update_rect.x      := round (x - 5.0);
+  update_rect.y      := round (y - 5.0);
+  update_rect.width  := 10;
+  update_rect.height := 10;
+
+  gdk_draw_rectangle (pixmap,
+                              widget^.style^.black_gc,
+                          gTRUE,
+                              update_rect.x, update_rect.y,
+                              update_rect.width, update_rect.height);
+
+  gtk_widget_queue_draw_area (widget,
+                              update_rect.x, update_rect.y,
+                                      update_rect.width, update_rect.height);
+end;
+
+function button_press_event ( widget : PGtkWidget;
+                              event  : PGdkEventbutton): gboolean; cdecl;
+begin
+  if (event^.button = 1) and (pixmap <> NULL) then
+    draw_brush (widget, event^.x, event^.y);
+
+  button_press_event := TRUE;
+end;
+
+function motion_notify_event ( widget: PGtkWidget;
+                               event : PGdkEventMotion): gboolean; cdecl;
+var
+  x, y  : gint;
+  state : TGdkModifierType;
+
+begin
+  if event^.is_hint = gTRUE then
+    gdk_window_get_pointer (event^.window, @x, @y, @state)
+  else begin
+    x := round (event^.x);
+    y := round (event^.y);
+    state := event^.state;
+  end;
+
+  if ((state and GDK_BUTTON1_MASK) <> 0) and (pixmap <> NULL) then
+    draw_brush (widget, x, y);
+
+  motion_notify_event := TRUE;
+end;
+
+procedure quit;
+begin
+  halt;
+end;
+
+var
+  window,
+  drawing_area,
+  vbox           : PGtkWidget;
+
+  button         : PGtkWidget;
+
+begin
+  gtk_init (@argc, @argv);
+
+  window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_widget_set_name (window, 'Test Input');
+
+  vbox := gtk_vbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+  gtk_widget_show (vbox);
+
+  g_signal_connect (G_OBJECT (window), 'destroy',
+                    G_CALLBACK (@quit), NULL);
+
+  (* Create the drawing area *)
+
+  drawing_area := gtk_drawing_area_new ();
+  gtk_widget_set_size_request (GTK_WIDGET (drawing_area), 200, 200);
+  gtk_box_pack_start (GTK_BOX (vbox), drawing_area, TRUE, TRUE, 0);
+
+  gtk_widget_show (drawing_area);
+
+  (* Signals used to handle backing pixmap *)
+
+  g_signal_connect (G_OBJECT (drawing_area), 'expose_event',
+                            G_CALLBACK (@expose_event), NULL);
+
+  g_signal_connect (G_OBJECT (drawing_area),'configure_event',
+                            G_CALLBACK (@configure_event), NULL);
+
+  (* Event signals *)
+
+  g_signal_connect (G_OBJECT (drawing_area), 'motion_notify_event',
+                            G_CALLBACK (@motion_notify_event), NULL);
+
+  g_signal_connect (G_OBJECT (drawing_area), 'button_press_event',
+                            G_CALLBACK (@button_press_event), NULL);
+
+  gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK
+                                                 or  GDK_LEAVE_NOTIFY_MASK
+                                                 or  GDK_BUTTON_PRESS_MASK
+                                                 or  GDK_POINTER_MOTION_MASK
+                                     or  GDK_POINTER_MOTION_HINT_MASK);
+
+  (* .. And a quit button *)
+  button := gtk_button_new_with_label ('Quit');
+  gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
+
+  g_signal_connect_swapped (G_OBJECT (button), 'clicked',
+                            G_CALLBACK (@gtk_widget_destroy),
+                            window);
+  gtk_widget_show (button);
+
+  gtk_widget_show (window);
+
+  gtk_main ();
+end.

+ 10 - 0
packages/extra/gtk2/glib/galloca.inc

@@ -0,0 +1,10 @@
+{ $PACKRECORDS C}
+
+{$ifndef __G_ALLOCA_H__}
+{$define __G_ALLOCA_H__}
+
+// {$include gtypes.inc}
+
+
+{$endif}
+

+ 126 - 0
packages/extra/gtk2/glib/garray.inc

@@ -0,0 +1,126 @@
+
+{$ifndef __G_ARRAY_H__}
+{$define __G_ARRAY_H__}
+
+
+//{$include gtypes.inc}
+
+    type
+       PGArray = ^TGArray;
+       TGArray = record
+            data : Pgchar;
+            len : guint;
+         end;
+
+       PGByteArray = ^TGByteArray;
+       TGByteArray = record
+            data : Pguint8;
+            len : guint;
+         end;
+
+       PGPtrArray = ^TGPtrArray;
+       TGPtrArray = record
+            pdata : Pgpointer;
+            len : guint;
+         end;
+
+
+
+
+{* Resizable arrays, remove fills any cleared spot and shortens the
+ * array, while preserving the order. remove_fast will distort the
+ * order by moving the last element to the position of the removed
+ *}
+
+
+{ macro function;  see glib.cc for implementation}
+
+    function g_array_append_val(a: PGArray; v : gpointer) : PGArray;
+
+    function g_array_prepend_val(a: PGArray; v : gpointer) : PGArray;
+
+    function g_array_insert_val(a: PGArray; i: guint; v : gpointer) : PGArray;
+
+
+
+    function g_array_new(zero_terminated:gboolean; clear:gboolean; element_size:guint):PGArray;cdecl;external gliblib name 'g_array_new';
+
+    function g_array_sized_new(zero_terminated:gboolean; clear:gboolean; element_size:guint; reserved_size:guint):PGArray;cdecl;external gliblib name 'g_array_sized_new';
+
+    function g_array_free(parray:PGArray; free_segment:gboolean):Pgchar;cdecl;external gliblib name 'g_array_free';
+
+    function g_array_append_vals(parray:PGArray; data:gconstpointer; len:guint):PGArray;cdecl;external gliblib name 'g_array_append_vals';
+
+    function g_array_prepend_vals(parray:PGArray; data:gconstpointer; len:guint):PGArray;cdecl;external gliblib name 'g_array_prepend_vals';
+
+    function g_array_insert_vals(parray:PGArray; index:guint; data:gconstpointer; len:guint):PGArray;cdecl;external gliblib name 'g_array_insert_vals';
+
+    function g_array_set_size(parray:PGArray; length:guint):PGArray;cdecl;external gliblib name 'g_array_set_size';
+
+    function g_array_remove_index(parray:PGArray; index:guint):PGArray;cdecl;external gliblib name 'g_array_remove_index';
+
+    function g_array_remove_index_fast(parray:PGArray; index:guint):PGArray;cdecl;external gliblib name 'g_array_remove_index_fast';
+
+    procedure g_array_sort(parray:PGArray; compare_func:TGCompareFunc);cdecl;external gliblib name 'g_array_sort';
+
+    procedure g_array_sort_with_data(parray:PGArray; compare_func:TGCompareDataFunc; user_data:gpointer);cdecl;external gliblib name 'g_array_sort_with_data';
+
+{* Resizable pointer array.  This interface is much less complicated
+ * than the above.  Add appends appends a pointer.  Remove fills any
+ * cleared spot and shortens the array. remove_fast will again distort
+ * order.
+ *}
+
+ { macro function }
+    function g_ptr_array_index (parray: PGPtrArray; index: guint): gpointer;
+
+
+    function g_ptr_array_new:PGPtrArray;cdecl;external gliblib name 'g_ptr_array_new';
+
+    function g_ptr_array_sized_new(reserved_size:guint):PGPtrArray;cdecl;external gliblib name 'g_ptr_array_sized_new';
+
+    function g_ptr_array_free(parray:PGPtrArray; free_seg:gboolean):Pgpointer;cdecl;external gliblib name 'g_ptr_array_free';
+
+    procedure g_ptr_array_set_size(parray:PGPtrArray; length:gint);cdecl;external gliblib name 'g_ptr_array_set_size';
+
+    function g_ptr_array_remove_index(parray:PGPtrArray; index:guint):gpointer;cdecl;external gliblib name 'g_ptr_array_remove_index';
+
+    function g_ptr_array_remove_index_fast(parray:PGPtrArray; index:guint):gpointer;cdecl;external gliblib name 'g_ptr_array_remove_index_fast';
+
+    function g_ptr_array_remove(parray:PGPtrArray; data:gpointer):gboolean;cdecl;external gliblib name 'g_ptr_array_remove';
+
+    function g_ptr_array_remove_fast(parray:PGPtrArray; data:gpointer):gboolean;cdecl;external gliblib name 'g_ptr_array_remove_fast';
+
+    procedure g_ptr_array_add(parray:PGPtrArray; data:gpointer);cdecl;external gliblib name 'g_ptr_array_add';
+
+    procedure g_ptr_array_sort(parray:PGPtrArray; compare_func:TGCompareFunc);cdecl;external gliblib name 'g_ptr_array_sort';
+
+    procedure g_ptr_array_sort_with_data(parray:PGPtrArray; compare_func:TGCompareDataFunc; user_data:gpointer);cdecl;external gliblib name 'g_ptr_array_sort_with_data';
+
+
+
+    function g_byte_array_new:PGByteArray;cdecl;external gliblib name 'g_byte_array_new';
+
+    function g_byte_array_sized_new(reserved_size:guint):PGByteArray;cdecl;external gliblib name 'g_byte_array_sized_new';
+
+    function g_byte_array_free(parray:PGByteArray; free_segment:gboolean):Pguint8;cdecl;external gliblib name 'g_byte_array_free';
+
+    function g_byte_array_append(parray:PGByteArray; data:Pguint8; len:guint):PGByteArray;cdecl;external gliblib name 'g_byte_array_append';
+
+    function g_byte_array_prepend(parray:PGByteArray; data:Pguint8; len:guint):PGByteArray;cdecl;external gliblib name 'g_byte_array_prepend';
+
+    function g_byte_array_set_size(parray:PGByteArray; length:guint):PGByteArray;cdecl;external gliblib name 'g_byte_array_set_size';
+
+    function g_byte_array_remove_index(parray:PGByteArray; index:guint):PGByteArray;cdecl;external gliblib name 'g_byte_array_remove_index';
+
+    function g_byte_array_remove_index_fast(parray:PGByteArray; index:guint):PGByteArray;cdecl;external gliblib name 'g_byte_array_remove_index_fast';
+
+    procedure g_byte_array_sort(parray:PGByteArray; compare_func:TGCompareFunc);cdecl;external gliblib name 'g_byte_array_sort';
+
+    procedure g_byte_array_sort_with_data(parray:PGByteArray; compare_func:TGCompareDataFunc; user_data:gpointer);cdecl;external gliblib name 'g_byte_array_sort_with_data';
+
+{$endif}
+
+
+
+

+ 66 - 0
packages/extra/gtk2/glib/gasyncqueue.inc

@@ -0,0 +1,66 @@
+{$ifndef __G_ASYNCQUEUE_H__}
+{$define __G_ASYNCQUEUE_H__}
+
+// {$include gthread.inc}
+
+{* Asyncronous Queues, can be used to communicate between threads
+ *}
+
+    type
+      PGAsyncQueue = pointer;
+{* Get a new GAsyncQueue with the ref_count 1 *}
+
+    function g_async_queue_new:PGAsyncQueue;cdecl;external gliblib name 'g_async_queue_new';
+
+{* Lock and unlock an GAsyncQueue, all functions lock the queue for
+ * themselves, but in certain cirumstances you want to hold the lock longer,
+ * thus you lock the queue, call the *_unlocked functions and unlock it again
+ *}
+    procedure g_async_queue_lock(queue:PGAsyncQueue);cdecl;external gliblib name 'g_async_queue_lock';
+    procedure g_async_queue_unlock(queue:PGAsyncQueue);cdecl;external gliblib name 'g_async_queue_unlock';
+
+
+{* Ref and unref the GAsyncQueue. g_async_queue_unref_unlocked makes
+ * no sense, as after the unreffing the Queue might be gone and can't
+ * be unlocked. So you have a function to call, if you don't hold the
+ * lock (g_async_queue_unref) and one to call, when you already hold
+ * the lock (g_async_queue_unref_and_unlock). After that however, you
+ * don't hold the lock anymore and the Queue might in fact be
+ * destroyed, if you unrefed to zero *}
+
+    procedure g_async_queue_ref(queue:PGAsyncQueue);cdecl;external gliblib name 'g_async_queue_ref';
+    procedure g_async_queue_ref_unlocked(queue:PGAsyncQueue);cdecl;external gliblib name 'g_async_queue_ref_unlocked';
+    procedure g_async_queue_unref(queue:PGAsyncQueue);cdecl;external gliblib name 'g_async_queue_unref';
+    procedure g_async_queue_unref_and_unlock(queue:PGAsyncQueue);cdecl;external gliblib name 'g_async_queue_unref_and_unlock';
+
+{* Push data into the async queue. Must not be NULL *}
+    procedure g_async_queue_push(queue:PGAsyncQueue; data:gpointer);cdecl;external gliblib name 'g_async_queue_push';
+    procedure g_async_queue_push_unlocked(queue:PGAsyncQueue; data:gpointer);cdecl;external gliblib name 'g_async_queue_push_unlocked';
+
+{* Pop data from the async queue, when no data is there, the thread is blocked
+ * until data arrives *}
+    function g_async_queue_pop(queue:PGAsyncQueue):gpointer;cdecl;external gliblib name 'g_async_queue_pop';
+    function g_async_queue_pop_unlocked(queue:PGAsyncQueue):gpointer;cdecl;external gliblib name 'g_async_queue_pop_unlocked';
+
+{* Try to pop data, NULL is returned in case of empty queue *}
+    function g_async_queue_try_pop(queue:PGAsyncQueue):gpointer;cdecl;external gliblib name 'g_async_queue_try_pop';
+    function g_async_queue_try_pop_unlocked(queue:PGAsyncQueue):gpointer;cdecl;external gliblib name 'g_async_queue_try_pop_unlocked';
+
+{* Wait for data until at maximum until end_time is reached, NULL is returned
+ * in case of empty queue*}
+    function g_async_queue_timed_pop(queue:PGAsyncQueue; end_time:PGTimeVal):gpointer;cdecl;external gliblib name 'g_async_queue_timed_pop';
+    function g_async_queue_timed_pop_unlocked(queue:PGAsyncQueue; end_time:PGTimeVal):gpointer;cdecl;external gliblib name 'g_async_queue_timed_pop_unlocked';
+
+
+{* Return the length of the queue, negative values mean, that threads
+ * are waiting, positve values mean, that there are entries in the
+ * queue. Actually this function returns the length of the queue minus
+ * the number of waiting threads, g_async_queue_length == 0 could also
+ * mean 'n' entries in the queue and 'n' thread waiting, such can
+ * happen due to locking of the queue or due to scheduling. *}
+
+    function g_async_queue_length(queue:PGAsyncQueue):gint;cdecl;external gliblib name 'g_async_queue_length';
+    function g_async_queue_length_unlocked(queue:PGAsyncQueue):gint;cdecl;external gliblib name 'g_async_queue_length_unlocked';
+
+{$endif}
+

+ 28 - 0
packages/extra/gtk2/glib/gbacktrace.inc

@@ -0,0 +1,28 @@
+{$ifndef __G_BACKTRACE_H__}
+{$define __G_BACKTRACE_H__}
+
+//{$include gtypes.inc}
+
+{ Fatal error handlers.
+   g_on_error_query() will prompt the user to either
+   [E]xit, [H]alt, [P]roceed or show [S]tack trace.
+   g_on_error_stack_trace() invokes gdb, which attaches to the current
+   process and shows a stack trace.
+   These function may cause different actions on non-unix platforms.
+   The prg_name arg is required by gdb to find the executable, if it is
+   passed as NULL, g_on_error_query() will try g_get_prgname().
+}
+
+  procedure g_on_error_query (prg_name:Pgchar);cdecl;external gliblib name 'g_on_error_query';
+  procedure g_on_error_stack_trace(prg_name:Pgchar);cdecl;external gliblib name 'g_on_error_stack_trace';
+
+{ Hacker macro to place breakpoints for elected machines.
+  Actual use is strongly discouraged of course ;)
+
+}
+
+{*  Not implemented *}
+
+
+{$endif} { __G_BACKTRACE_H__  }
+

+ 67 - 0
packages/extra/gtk2/glib/gboxed.inc

@@ -0,0 +1,67 @@
+(*
+ * gboxed.inc
+ *   depends on gtype.inc
+ *
+ *   included by glib2.pas
+ *)
+
+{$ifdef read_forward_definitions}
+(* --- typedefs ---  *)
+   TGBoxedCopyFunc = function (boxed:gpointer):gpointer; cdecl;
+
+   TGBoxedFreeFunc = procedure (boxed:gpointer); cdecl;
+{$endif read_forward_definitions}
+
+(****************************************************************)
+
+{$ifdef read_interface_rest}
+
+(*** some macros ***)
+function G_TYPE_IS_BOXED(_type : GType) : gboolean;
+
+function G_VALUE_HOLDS_BOXED(value : PGValue) : gboolean;
+
+(*** GLib boxed types ***)
+
+function G_TYPE_CLOSURE : GType;
+
+function G_TYPE_VALUE : GType;
+
+function G_TYPE_VALUE_ARRAY : GType;
+
+function G_TYPE_GSTRING : GType;
+
+
+(*** prototypes ***)
+
+function  g_boxed_copy(boxed_type : GType;
+                       src_boxed  : gconstpointer):gpointer; cdecl; external gobjectlib;
+
+procedure g_boxed_free(boxed_type : GType;
+                       boxed      : gpointer); cdecl; external gobjectlib;
+
+procedure g_value_set_boxed(value : PGValue;
+                          v_boxed : gconstpointer); cdecl; external gobjectlib;
+
+procedure g_value_set_static_boxed(value : PGValue;
+                                 v_boxed : gconstpointer); cdecl; external gobjectlib;
+
+function g_value_get_boxed( value : PGValue):gpointer; cdecl; external gobjectlib;
+
+function g_value_dup_boxed( value : PGValue):gpointer; cdecl; external gobjectlib;
+
+
+function g_boxed_type_register_static(name       : Pgchar;
+                                      boxed_copy : TGBoxedCopyFunc;
+                                      boxed_free : TGBoxedFreeFunc):GType; cdecl; external gobjectlib;
+
+(*** internal (marshaller specific) ***)
+procedure g_value_set_boxed_take_ownership(value:PGValue;
+                                           v_boxed:gconstpointer); cdecl; external gobjectlib;
+
+function g_closure_get_type     : GType; cdecl; external gobjectlib;
+function g_value_get_type       : GType; cdecl; external gobjectlib;
+function g_value_array_get_type : GType; cdecl; external gobjectlib;
+function g_gstring_get_type     : GType; cdecl; external gobjectlib;
+
+{$endif read_interface_rest}

+ 25 - 0
packages/extra/gtk2/glib/gcache.inc

@@ -0,0 +1,25 @@
+// {include <glib/glist.h>}
+
+type
+   PGCache   = pointer;
+
+   TGCacheNewFunc     = function (key:gpointer):gpointer;cdecl;
+   TGCacheDupFunc     = function (value:gpointer):gpointer;cdecl;
+   TGCacheDestroyFunc = procedure (value:gpointer);cdecl;
+
+{ Caches }
+
+    function  g_cache_new(value_new_func:TGCacheNewFunc; value_destroy_func:TGCacheDestroyFunc; key_dup_func:TGCacheDupFunc; key_destroy_func:TGCacheDestroyFunc; hash_key_func:TGHashFunc;
+                hash_value_func:TGHashFunc; key_equal_func:TGEqualFunc):PGCache;cdecl;external gliblib name 'g_cache_new';
+
+    procedure g_cache_destroy(cache:PGCache);cdecl;external gliblib name 'g_cache_destroy';
+
+    function  g_cache_insert(cache:PGCache; key:gpointer):gpointer;cdecl;external gliblib name 'g_cache_insert';
+
+    procedure g_cache_remove(cache:PGCache; value:gconstpointer);cdecl;external gliblib name 'g_cache_remove';
+
+    procedure g_cache_key_foreach(cache:PGCache; func:TGHFunc; user_data:gpointer);cdecl;external gliblib name 'g_cache_key_foreach';
+
+    procedure g_cache_value_foreach(cache:PGCache; func:TGHFunc; user_data:gpointer);cdecl;external gliblib name 'g_cache_value_foreach';
+
+

+ 149 - 0
packages/extra/gtk2/glib/gclosure.inc

@@ -0,0 +1,149 @@
+// included by glib2.pas
+
+{ -- typedefs ---  }
+type
+   PGClosure = ^TGClosure;
+   PGClosureNotifyData = ^TGClosureNotifyData;
+   TGClosureNotify = procedure (data:gpointer; closure:PGClosure); cdecl;
+
+{< private > }
+{< private > }
+{< private > }
+{< private > }
+{ finalization notifiers  }
+{< private > }
+{ invalidation notifiers  }
+{< private > }
+{< private > }
+{< protected > }
+{< public > }
+{< public > }
+{< private > }
+{out }
+{< protected > }
+{< private > }
+{ invariants/constrains:
+     - ->marshal and ->data are _invalid_ as soon as ->is_invalid==TRUE
+     - invocation of all inotifiers occours prior to fnotifiers
+     - order of inotifiers is random
+       inotifiers may _not_ free/invalidate parameter values (e.g. ->data)
+     - order of fnotifiers is random
+     - each notifier may only be removed before or during its invocation
+     - reference counting may only happen prior to fnotify invocation
+       (in that sense, fnotifiers are really finalization handlers)
+    }
+   TGClosure = record
+        flag0 : longint;
+        marshal : procedure (closure:PGClosure; return_value:PGValue; n_param_values:guint; param_values:PGValue; invocation_hint:gpointer;
+                      marshal_data:gpointer); cdecl;
+        data : gpointer;
+        notifiers : PGClosureNotifyData;
+     end;
+
+
+   TGCallBackProcedure = procedure;
+   TGCallback = procedure (para1: TGCallBackProcedure); cdecl;
+
+   TGClosureMarshal = procedure (closure:PGClosure; return_value:PGValue; n_param_values:guint; param_values:PGValue; invocation_hint:gpointer;
+                 marshal_data:gpointer); cdecl;
+{ --- structures ---  }
+   TGClosureNotifyData = record
+        data : gpointer;
+        notify : TGClosureNotify;
+     end;
+
+
+{ --- defines ---  }
+
+function G_CLOSURE_NEEDS_MARSHAL(closure : Pointer) : boolean;
+function G_CLOSURE_N_NOTIFIERS(cl : PGClosure) : longint;
+function G_CCLOSURE_SWAP_DATA(cclosure : PGClosure) : longint;
+function G_CALLBACK(f : pointer) : TGCallback;
+
+const
+   bm_TGClosure_ref_count = $7FFF;
+   bp_TGClosure_ref_count = 0;
+   bm_TGClosure_meta_marshal = $8000;
+   bp_TGClosure_meta_marshal = 15;
+   bm_TGClosure_n_guards = $10000;
+   bp_TGClosure_n_guards = 16;
+   bm_TGClosure_n_fnotifiers = $60000;
+   bp_TGClosure_n_fnotifiers = 17;
+   bm_TGClosure_n_inotifiers = $7F80000;
+   bp_TGClosure_n_inotifiers = 19;
+   bm_TGClosure_in_inotify = $8000000;
+   bp_TGClosure_in_inotify = 27;
+   bm_TGClosure_floating = $10000000;
+   bp_TGClosure_floating = 28;
+   bm_TGClosure_derivative_flag = $20000000;
+   bp_TGClosure_derivative_flag = 29;
+   bm_TGClosure_in_marshal = $40000000;
+   bp_TGClosure_in_marshal = 30;
+   bm_TGClosure_is_invalid = $80000000;
+   bp_TGClosure_is_invalid = 31;
+
+function ref_count(var a : TGClosure) : guint;
+procedure set_ref_count(var a : TGClosure; __ref_count : guint);
+function meta_marshal(a : PGClosure) : guint;
+procedure set_meta_marshal(var a : TGClosure; __meta_marshal : guint);
+function n_guards(a : PGClosure) : guint;
+procedure set_n_guards(var a : TGClosure; __n_guards : guint);
+function n_fnotifiers(a : PGClosure) : guint;
+procedure set_n_fnotifiers(var a : TGClosure; __n_fnotifiers : guint);
+function n_inotifiers(a : PGClosure) : guint;
+procedure set_n_inotifiers(var a : TGClosure; __n_inotifiers : guint);
+function in_inotify(var a : TGClosure) : guint;
+procedure set_in_inotify(var a : TGClosure; __in_inotify : guint);
+function floating(var a : TGClosure) : guint;
+procedure set_floating(var a : TGClosure; __floating : guint);
+function derivative_flag(a : PGClosure) : guint;
+procedure set_derivative_flag(var a : TGClosure; __derivative_flag : guint);
+function in_marshal(var a : TGClosure) : guint;
+procedure set_in_marshal(var a : TGClosure; __in_marshal : guint);
+function is_invalid(var a : TGClosure) : guint;
+procedure set_is_invalid(var a : TGClosure; __is_invalid : guint);
+
+
+{ closure for C function calls, callback() is the user function }
+type
+   PGCClosure = ^TGCClosure;
+   TGCClosure = record
+        closure : TGClosure;
+        callback : gpointer;
+     end;
+
+{ --- prototypes ---  }
+
+function g_cclosure_new(callback_func:TGCallback; user_data:gpointer; destroy_data:TGClosureNotify):PGClosure; cdecl; external gliblib;
+function g_cclosure_new_swap(callback_func:TGCallback; user_data:gpointer; destroy_data:TGClosureNotify):PGClosure; cdecl; external gliblib;
+function g_signal_type_cclosure_new(itype:GType; struct_offset:guint):PGClosure; cdecl; external gliblib;
+{ --- prototypes ---  }
+function g_closure_ref(closure:PGClosure):PGClosure; cdecl; external gliblib;
+procedure g_closure_sink(closure:PGClosure); cdecl; external gliblib;
+procedure g_closure_unref(closure:PGClosure); cdecl; external gliblib;
+{ intimidating  }
+function g_closure_new_simple(sizeof_closure:guint; data:gpointer):PGClosure; cdecl; external gliblib;
+procedure g_closure_add_finalize_notifier(closure:PGClosure; notify_data:gpointer; notify_func:TGClosureNotify); cdecl; external gliblib;
+procedure g_closure_remove_finalize_notifier(closure:PGClosure; notify_data:gpointer; notify_func:TGClosureNotify); cdecl; external gliblib;
+procedure g_closure_add_invalidate_notifier(closure:PGClosure; notify_data:gpointer; notify_func:TGClosureNotify); cdecl; external gliblib;
+procedure g_closure_remove_invalidate_notifier(closure:PGClosure; notify_data:gpointer; notify_func:TGClosureNotify); cdecl; external gliblib;
+procedure g_closure_add_marshal_guards(closure:PGClosure; pre_marshal_data:gpointer; pre_marshal_notify:TGClosureNotify; post_marshal_data:gpointer; post_marshal_notify:TGClosureNotify); cdecl; external gliblib;
+procedure g_closure_set_marshal(closure:PGClosure; marshal:TGClosureMarshal); cdecl; external gliblib;
+procedure g_closure_set_meta_marshal(closure:PGClosure; marshal_data:gpointer; meta_marshal:TGClosureMarshal); cdecl; external gliblib;
+procedure g_closure_invalidate(closure:PGClosure); cdecl; external gliblib;
+{out }
+procedure g_closure_invoke(closure:PGClosure; return_value:PGValue; n_param_values:guint; param_values:PGValue; invocation_hint:gpointer); cdecl; external gliblib;
+
+{ FIXME:
+   OK:  data_object::destroy            -> closure_invalidate();
+   MIS: closure_invalidate()            -> disconnect(closure);
+   MIS: disconnect(closure)             -> (unlink) closure_unref();
+   OK:  closure_finalize()              -> g_free (data_string);
+
+   random remarks:
+   - need marshaller repo with decent aliasing to base types
+   - provide marshaller collection, virtually covering anything out there
+ }
+
+// included by glib2.pas
+

+ 33 - 0
packages/extra/gtk2/glib/gcompletion.inc

@@ -0,0 +1,33 @@
+// {$include <glib/glist.h>}
+
+    type
+       PGCompletionFunc = ^TGCompletionFunc;
+       TGCompletionFunc = gchar;
+
+{ GCompletion   }
+
+       TGCompletionStrncmpFunc = function (s1:Pgchar; s2:Pgchar; n:gsize):gint;cdecl;
+       PGCompletion = ^TGCompletion;
+       TGCompletion = record
+            items  : PGList;
+            func   : TGCompletionFunc;
+            prefix : Pgchar;
+            cache  : PGList;
+            strncmp_func : TGCompletionStrncmpFunc;
+         end;
+
+
+    function  g_completion_new(func:TGCompletionFunc):PGCompletion;cdecl;external gliblib name 'g_completion_new';
+
+    procedure g_completion_add_items(cmp:PGCompletion; items:PGList);cdecl;external gliblib name 'g_completion_add_items';
+
+    procedure g_completion_remove_items(cmp:PGCompletion; items:PGList);cdecl;external gliblib name 'g_completion_remove_items';
+
+    procedure g_completion_clear_items(cmp:PGCompletion);cdecl;external gliblib name 'g_completion_clear_items';
+
+    function  g_completion_complete(cmp:PGCompletion; prefix:Pgchar; new_prefix:PPgchar):PGList;cdecl;external gliblib name 'g_completion_complete';
+
+    procedure g_completion_set_compare(cmp:PGCompletion; strncmp_func:TGCompletionStrncmpFunc);cdecl;external gliblib name 'g_completion_set_compare';
+
+    procedure g_completion_free(cmp:PGCompletion);cdecl;external gliblib name 'g_completion_free';
+

+ 56 - 0
packages/extra/gtk2/glib/gconvert.inc

@@ -0,0 +1,56 @@
+// {$include <stddef.h>      /* For size_t */}
+// {$include <glib/gerror.h>}
+
+  type
+     PGConvertError = ^TGConvertError;
+     TGConvertError = (G_CONVERT_ERROR_NO_CONVERSION,
+                       G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                       G_CONVERT_ERROR_FAILED,
+                       G_CONVERT_ERROR_PARTIAL_INPUT,
+                       G_CONVERT_ERROR_BAD_URI,
+                       G_CONVERT_ERROR_NOT_ABSOLUTE_PATH
+       );
+
+    function G_CONVERT_ERROR : TGQuark;
+
+
+    function g_convert_error_quark:TGQuark;cdecl;external gliblib name 'g_convert_error_quark';
+
+{ Thin wrappers around iconv  }
+    type
+       PGIConv = ^TGIConv;
+       TGIConv  = pointer;
+
+    function g_iconv_open(to_codeset:Pgchar; from_codeset:Pgchar):TGIConv;cdecl;external gliblib name 'g_iconv_open';
+
+    function g_iconv(converter:TGIConv; inbuf:PPgchar; inbytes_left:Pgsize; outbuf:PPgchar; outbytes_left:Pgsize):gsize;cdecl;external gliblib name 'g_iconv';
+
+    function g_iconv_close(converter:TGIConv):gint;cdecl;external gliblib name 'g_iconv_close';
+
+    function g_convert(str:Pgchar; len:gssize; to_codeset:Pgchar; from_codeset:Pgchar; bytes_read:Pgsize;
+                       bytes_written:Pgsize; error:PPGError):Pgchar;cdecl;external gliblib name 'g_convert';
+
+    function g_convert_with_iconv(str:Pgchar; len:gssize; converter:TGIConv; bytes_read:Pgsize; bytes_written:Pgsize;
+                                  error:PPGError):Pgchar;cdecl;external gliblib name 'g_convert_with_iconv';
+
+    function g_convert_with_fallback(str:Pgchar; len:gssize; to_codeset:Pgchar; from_codeset:Pgchar; fallback:Pgchar;
+                                     bytes_read:Pgsize; bytes_written:Pgsize; error:PPGError):Pgchar;cdecl;external gliblib name 'g_convert_with_fallback';
+
+{ Convert between libc's idea of strings and UTF-8. }
+
+    function g_locale_to_utf8(opsysstring:Pgchar; len:gssize; bytes_read:Pgsize; bytes_written:Pgsize; error:PPGError):Pgchar;cdecl;external gliblib name 'g_locale_to_utf8';
+
+    function g_locale_from_utf8(utf8string:Pgchar; len:gssize; bytes_read:Pgsize; bytes_written:Pgsize; error:PPGError):Pgchar;cdecl;external gliblib name 'g_locale_from_utf8';
+
+    { Convert between the operating system (or C runtime)
+       representation of file names and UTF-8.
+      }
+    function g_filename_to_utf8(opsysstring:Pgchar; len:gssize; bytes_read:Pgsize; bytes_written:Pgsize; error:PPGError):Pgchar;cdecl;external gliblib name 'g_filename_to_utf8';
+
+    function g_filename_from_utf8(utf8string:Pgchar; len:gssize; bytes_read:Pgsize; bytes_written:Pgsize; error:PPGError):Pgchar;cdecl;external gliblib name 'g_filename_from_utf8';
+
+    function g_filename_from_uri(uri:Pchar; hostname:PPchar; error:PPGError):Pgchar;cdecl;external gliblib name 'g_filename_from_uri';
+
+    function g_filename_to_uri(filename:Pchar; hostname:Pchar; error:PPGError):Pgchar;cdecl;external gliblib name 'g_filename_to_uri';
+
+

+ 76 - 0
packages/extra/gtk2/glib/gdataset.inc

@@ -0,0 +1,76 @@
+// included by glib2.pas
+
+{$IFDEF read_forward_definitions}
+   PPGData   = ^PGData;
+   PGData    =  pointer;
+
+
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+type
+   TGDataForeachFunc = procedure (key_id:TGQuark; data:gpointer; user_data:gpointer);cdecl;
+{ Keyed Data List
+  }
+
+procedure g_datalist_init(datalist:PPGData);cdecl;external gliblib name 'g_datalist_init';
+
+procedure g_datalist_clear(datalist:PPGData);cdecl;external gliblib name 'g_datalist_clear';
+
+function  g_datalist_id_get_data(datalist:PPGData; key_id:TGQuark):gpointer;cdecl;external gliblib name 'g_datalist_id_get_data';
+
+procedure g_datalist_id_set_data_full(datalist:PPGData; key_id:TGQuark; data:gpointer; destroy_func:TGDestroyNotify);cdecl;external gliblib name 'g_datalist_id_set_data_full';
+
+function  g_datalist_id_remove_no_notify(datalist:PPGData; key_id:TGQuark):gpointer;cdecl;external gliblib name 'g_datalist_id_remove_no_notify';
+
+procedure g_datalist_foreach(datalist:PPGData; func:TGDataForeachFunc; user_data:gpointer);cdecl;external gliblib name 'g_datalist_foreach';
+
+{macros}
+procedure g_datalist_id_set_data (datalist: PPGData; key_id:TGQuark; data: gpointer);
+
+procedure g_datalist_id_remove_data (datalist: PPGData; key_id:TGQuark);
+
+function  g_datalist_get_data(datalist: PPGData; key_str:PGChar):PPGData;
+
+procedure g_datalist_set_data_full(datalist: PPGData; key_str:PGChar; data:gpointer; destroy_func:TGDestroyNotify);
+
+procedure g_datalist_set_data (datalist: PPGData; key_str:PGChar; data:gpointer);
+
+procedure g_datalist_remove_no_notify(datalist: PPGData; key_str:PGChar);
+
+procedure g_datalist_remove_data(datalist:PPGData; key_str:PGChar);
+
+
+{ Location Associated Keyed Data  }
+
+function  g_dataset_id_get_data(dataset_location:gconstpointer; key_id:TGQuark):gpointer;cdecl;external gliblib name 'g_dataset_id_get_data';
+
+procedure g_dataset_id_set_data_full(dataset_location:gconstpointer; key_id:TGQuark; data:gpointer; destroy_func:TGDestroyNotify);cdecl;external gliblib name 'g_dataset_id_set_data_full';
+
+function  g_dataset_id_remove_no_notify(dataset_location:gconstpointer; key_id:TGQuark):gpointer;cdecl;external gliblib name 'g_dataset_id_remove_no_notify';
+
+procedure g_dataset_foreach(dataset_location:gconstpointer; func:TGDataForeachFunc; user_data:gpointer);cdecl;external gliblib name 'g_dataset_foreach';
+
+
+
+{macros}
+procedure g_dataset_id_set_data(location: gconstpointer; key_id:TGQuark; data:gpointer);
+
+procedure g_dataset_id_remove_data(location: gconstpointer; key_id:TGQuark);
+
+function  g_dataset_get_data(location: gconstpointer; key_str:PGChar): gpointer;
+
+procedure g_dataset_set_data_full(location: gconstpointer; key_str:PGChar; data:gpointer; destroy_func:TGDestroyNotify);
+
+procedure g_dataset_remove_no_notify(location: gconstpointer; key_str:PGChar);
+
+procedure g_dataset_set_data(location: gconstpointer; key_str:PGChar; data:gpointer);
+
+procedure g_dataset_remove_data(location:gconstpointer; key_str: PGChar);
+{$ENDIF read_interface_rest}
+
+// included by glib2.pas
+
+

+ 256 - 0
packages/extra/gtk2/glib/gdate.inc

@@ -0,0 +1,256 @@
+// {$include <glib/gquark.h>}
+{ GDate
+
+  Date calculations (not time for now, to be resolved). These are a
+  mutant combination of Steffen Beyer's DateCalc routines
+ (http://www.perl.com/CPAN/authors/id/STBEY/) and Jon Trowbridge's
+  date routines (written for in-house software).  Written by Havoc
+  Pennington <[email protected]>
+}
+
+  type
+       PGTime      = ^TGTime;
+       TGTime      = gint32;
+
+       PGDateYear  = ^TGDateYear;
+       TGDateYear  = guint16;
+
+       PGDateDay   = ^TGDateDay;
+       TGDateDay   = guint8;   // day of the month
+
+    { day of the month  }
+    { make struct tm known without having to include time.h  }
+
+       { from time.h }
+       Ptm         = ^Ttm;
+       Ttm         = record
+                   tm_sec   : gint;                     // Seconds.     [0-60] (1 leap second)
+                   tm_min   : gint;                     // Minutes.     [0-59]
+                   tm_hour  : gint;                     // Hours.       [0-23]
+                   tm_mday  : gint;                     // Day.         [1-31]
+                   tm_mon   : gint;                     // Month.       [0-11]
+                   tm_year  : gint;                     // Year - 1900.
+                   tm_wday  : gint;                     // Day of week. [0-6]
+                   tm_yday  : gint;                     // Days in year.[0-365]
+                   tm_isdst : gint;                     // DST.         [-1/0/1]
+                   tm_gmtoff: glong;        // Seconds east of UTC.
+                   tm_zone  : pgchar;       // Timezone abbreviation.
+            end;
+
+
+    { enum used to specify order of appearance in parsed date strings  }
+
+     type
+       PGDateDMY = ^TGDateDMY;
+       TGDateDMY = integer;
+     const G_DATE_DAY = 0;
+           G_DATE_MONTH = 1;
+           G_DATE_YEAR = 2;
+
+    { actual week and month values  }
+
+     type
+       PGDateWeekday = ^TGDateWeekday;
+       TGDateWeekday = integer;
+     const G_DATE_BAD_WEEKDAY = 0;
+           G_DATE_MONDAY = 1;
+           G_DATE_TUESDAY = 2;
+           G_DATE_WEDNESDAY = 3;
+           G_DATE_THURSDAY = 4;
+           G_DATE_FRIDAY = 5;
+           G_DATE_SATURDAY = 6;
+           G_DATE_SUNDAY = 7;
+
+     type
+       PGDateMonth = ^TGDateMonth;
+       TGDateMonth = integer;
+     const
+       G_DATE_BAD_MONTH = 0;
+       G_DATE_JANUARY = 1;
+       G_DATE_FEBRUARY = 2;
+       G_DATE_MARCH = 3;
+       G_DATE_APRIL = 4;
+       G_DATE_MAY = 5;
+       G_DATE_JUNE = 6;
+       G_DATE_JULY = 7;
+       G_DATE_AUGUST = 8;
+       G_DATE_SEPTEMBER = 9;
+       G_DATE_OCTOBER = 10;
+       G_DATE_NOVEMBER = 11;
+       G_DATE_DECEMBER = 12;
+
+    const
+       G_DATE_BAD_JULIAN = 0;
+       G_DATE_BAD_DAY    = 0;
+       G_DATE_BAD_YEAR   = 0;
+
+    { Note: directly manipulating structs is generally a bad idea, but
+       in this case it's an  incredibly  bad idea, because all or part
+       of this struct can be invalid at any given time. Use the functions,
+       or you will get hosed, I promise.
+      }
+
+    { julian days representation - we use a
+                                  bitfield hoping that 64 bit platforms
+                                  will pack this whole struct in one big
+                                  int
+                                }
+    { julian is valid  }
+    { dmy is valid  }
+    { DMY representation  }
+
+    type
+       PGDate = ^TGDate;
+       TGDate = record
+            flag0 : longint;
+            flag1 : longint;
+         end;
+
+    { g_date_new() returns an invalid date, you then have to _set() stuff
+       to get a usable anObject. You can also allocate a GDate statically,
+       then call g_date_clear() to initialize.
+      }
+
+    function  g_date_new:PGDate; cdecl;external gliblib name 'g_date_new';
+
+    function  g_date_new_dmy(day:TGDateDay; month:TGDateMonth; year:TGDateYear):PGDate;cdecl;external gliblib name 'g_date_new_dmy';
+
+    function  g_date_new_julian(julian_day:guint32):PGDate;cdecl;external gliblib name 'g_date_new_julian';
+
+    procedure g_date_free(date:PGDate);cdecl;external gliblib name 'g_date_free';
+
+    { check g_date_valid() after doing an operation that might fail, like
+       _parse.  Almost all g_date operations are undefined on invalid
+       dates (the exceptions are the mutators, since you need those to
+       return to validity).
+      }
+
+    function g_date_valid         (date:PGDate):      gboolean;cdecl;external gliblib name 'g_date_valid';
+
+    function g_date_valid_month   (month:TGDateMonth):gboolean;cdecl;external gliblib name 'g_date_valid_month';
+
+    function g_date_valid_year    (year:TGDateYear):  gboolean;cdecl;external gliblib name 'g_date_valid_year';
+
+    function g_date_valid_weekday (weekday:TGDateWeekday):  gboolean;cdecl;external gliblib name 'g_date_valid_weekday';
+
+    function g_date_valid_julian  (julian_date:guint32):    gboolean;cdecl;external gliblib name 'g_date_valid_julian';
+
+
+
+    function g_date_get_weekday(date:PGDate):TGDateWeekday;cdecl;external gliblib name 'g_date_get_weekday';
+
+    function g_date_get_month(date:PGDate):TGDateMonth;cdecl;external gliblib name 'g_date_get_month';
+
+    function g_date_get_year(date:PGDate):TGDateYear;cdecl;external gliblib name 'g_date_get_year';
+
+    function g_date_get_day(date:PGDate):TGDateDay;cdecl;external gliblib name 'g_date_get_day';
+
+    function g_date_get_julian(date:PGDate):guint32;cdecl;external gliblib name 'g_date_get_julian';
+
+    function g_date_get_day_of_year(date:PGDate):guint;cdecl;external gliblib name 'g_date_get_day_of_year';
+
+    { First monday/sunday is the start of week 1; if we haven't reached
+       that day, return 0. These are not ISO weeks of the year; that
+       routine needs to be added.
+       these functions return the number of weeks, starting on the
+       corrsponding day
+      }
+
+    function g_date_get_monday_week_of_year(date:PGDate):guint;cdecl;external gliblib name 'g_date_get_monday_week_of_year';
+
+    function g_date_get_sunday_week_of_year(date:PGDate):guint;cdecl;external gliblib name 'g_date_get_sunday_week_of_year';
+
+    { If you create a static date struct you need to clear it to get it
+       in a sane state before use. You can clear a whole array at
+       once with the ndates argument.
+      }
+    procedure g_date_clear(date:PGDate; n_dates:guint);cdecl;external gliblib name 'g_date_clear';
+
+    { The parse routine is meant for dates typed in by a user, so it
+       permits many formats but tries to catch common typos. If your data
+       needs to be strictly validated, it is not an appropriate function.
+      }
+
+    procedure g_date_set_parse(date:PGDate; str:Pgchar);cdecl;external gliblib name 'g_date_set_parse';
+
+    procedure g_date_set_time(date:PGDate; time:TGTime);cdecl;external gliblib name 'g_date_set_time';
+
+    procedure g_date_set_month(date:PGDate; month:TGDateMonth);cdecl;external gliblib name 'g_date_set_month';
+
+    procedure g_date_set_day(date:PGDate; day:TGDateDay);cdecl;external gliblib name 'g_date_set_day';
+
+    procedure g_date_set_year(date:PGDate; year:TGDateYear);cdecl;external gliblib name 'g_date_set_year';
+
+    procedure g_date_set_dmy(date:PGDate; day:TGDateDay; month:TGDateMonth; y:TGDateYear);cdecl;external gliblib name 'g_date_set_dmy';
+
+    procedure g_date_set_julian(date:PGDate; julian_date:guint32);cdecl;external gliblib name 'g_date_set_julian';
+
+    function g_date_is_first_of_month(date:PGDate):gboolean;cdecl;external gliblib name 'g_date_is_first_of_month';
+
+    function g_date_is_last_of_month(date:PGDate):gboolean;cdecl;external gliblib name 'g_date_is_last_of_month';
+
+
+    { To go forward by some number of weeks just go forward weeks 7 days  }
+    procedure g_date_add_days(date:PGDate; n_days:guint);cdecl;external gliblib name 'g_date_add_days';
+
+    procedure g_date_subtract_days(date:PGDate; n_days:guint);cdecl;external gliblib name 'g_date_subtract_days';
+
+
+    { If you add/sub months while day > 28, the day might change  }
+    procedure g_date_add_months(date:PGDate; n_months:guint);cdecl;external gliblib name 'g_date_add_months';
+
+    procedure g_date_subtract_months(date:PGDate; n_months:guint);cdecl;external gliblib name 'g_date_subtract_months';
+
+
+    { If it's feb 29, changing years can move you to the 28th  }
+    procedure g_date_add_years(date:PGDate; n_years:guint);cdecl;external gliblib name 'g_date_add_years';
+
+    procedure g_date_subtract_years(date:PGDate; n_years:guint);cdecl;external gliblib name 'g_date_subtract_years';
+
+
+    function  g_date_is_leap_year (year:TGDateYear): gboolean; cdecl;external gliblib name 'g_date_is_leap_year';
+
+    function  g_date_get_days_in_month   (month: TGDateMonth; year: TGDateYear):guint8;cdecl;external gliblib name 'g_date_get_days_in_month';
+
+    function  g_date_get_monday_weeks_in_year (year:TGDateYear): guint8; cdecl;external gliblib name 'g_date_get_monday_weeks_in_year';
+
+    function  g_date_get_sunday_weeks_in_year (year:TGDateYear): guint8; cdecl;external gliblib name 'g_date_get_sunday_weeks_in_year';
+
+    { Returns the number of days between the two dates.  If date2 comes
+       before date1, a negative value is return.  }
+
+    function g_date_days_between(date1:PGDate; date2:PGDate):gint;cdecl;external gliblib name 'g_date_days_between';
+
+    { qsort-friendly (with a cast...)  }
+    function g_date_compare(lhs:PGDate; rhs:PGDate):gint;cdecl;external gliblib name 'g_date_compare';
+
+
+    procedure g_date_to_struct_tm(date:PGDate; tm:Ptm);cdecl;external gliblib name 'g_date_to_struct_tm';
+
+    procedure g_date_clamp(date:PGDate; min_date:PGDate; max_date:PGDate);cdecl;external gliblib name 'g_date_clamp';
+
+    { Swap date1 and date2's values if date1 > date2.  }
+    procedure g_date_order(date1:PGDate; date2:PGDate);cdecl;external gliblib name 'g_date_order';
+
+    { Just like strftime() except you can only use date-related formats.
+         Using a time format is undefined.
+      }
+    function g_date_strftime(s:Pgchar; slen:gsize; format:Pgchar; date:PGDate):gsize;cdecl;external gliblib name 'g_date_strftime';
+
+{ DEPRECATED functions are maped to their newer versions as the arguments and the return value are the same}
+
+{ DEPRECATED functions are disabled because a
+  name conflict with G_DATE_MONTH, G_DATE_YEAR and G_DATE_DAY
+
+    function g_date_weekday(date:PGDate):TGDateWeekday;cdecl;external gliblib name 'g_date_get_weekday';
+    function g_date_month(date:PGDate):TGDateMonth;cdecl;external gliblib name 'g_date_get_month';
+    function g_date_year(date:PGDate):TGDateYear;cdecl;external gliblib name 'g_date_get_year';
+    function g_date_day(date:PGDate):TGDateDay;cdecl;external gliblib name 'g_date_get_day';
+    function g_date_julian(date:PGDate):guint32;cdecl;external gliblib name 'g_date_get_julian';
+    function g_date_day_of_year(date:PGDate):guint;cdecl;external gliblib name 'g_date_get_day_of_year';
+    function g_date_monday_week_of_year(date:PGDate):guint;cdecl;external gliblib name 'g_date_get_monday_week_of_year';
+    function g_date_sunday_week_of_year(date:PGDate):guint;cdecl;external gliblib name 'g_date_get_sunday_week_of_year';
+    function g_date_days_in_month   (month: TGDateMonth; year: TGDateYear):guint8;cdecl;external gliblib name 'g_date_get_days_in_month';
+    function g_date_monday_weeks_in_year (year:TGDateYear): guint8; cdecl;external gliblib name 'g_date_get_monday_weeks_in_year';
+    function g_date_sunday_weeks_in_year (year:TGDateYear): guint8; cdecl;external gliblib name 'g_date_get_sunday_weeks_in_year';
+}

+ 13 - 0
packages/extra/gtk2/glib/gdir.inc

@@ -0,0 +1,13 @@
+// {$include <glib/gerror.h>}
+    type
+      PGDir   = pointer;
+
+    function  g_dir_open(path:Pgchar; flags:guint; error:PPGError):PGDir;cdecl;external gliblib name 'g_dir_open';
+
+    function  g_dir_read_name (dir:PGDir): pgchar; cdecl;external gliblib name 'g_dir_read_name';
+
+    procedure g_dir_rewind(dir:PGDir);cdecl;external gliblib name 'g_dir_rewind';
+
+    procedure g_dir_close(dir:PGDir);cdecl;external gliblib name 'g_dir_close';
+
+

+ 87 - 0
packages/extra/gtk2/glib/genums.inc

@@ -0,0 +1,87 @@
+// included by glib2.pas
+
+{$IFDEF read_forward_definitions}
+{$ENDIF read_forward_definitions}
+
+//------------------------------------------------------------------------------
+
+{$IFDEF read_interface_rest}
+{ --- enum/flag values & classes ---  }
+type
+   PGEnumClass = ^TGEnumClass;
+   PGEnumValue = ^TGEnumValue;
+
+   TGEnumClass = record
+        g_type_class : TGTypeClass;
+        minimum : gint;
+        maximum : gint;
+        n_values : guint;
+        values : PGEnumValue;
+     end;
+
+   TGEnumValue = record
+        value : gint;
+        value_name : Pgchar;
+        value_nick : Pgchar;
+     end;
+
+   PGFlagsClass = ^TGFlagsClass;
+   PGFlagsValue = ^TGFlagsValue;
+
+   TGFlagsClass = record
+        g_type_class : TGTypeClass;
+        mask : guint;
+        n_values : guint;
+        values : PGFlagsValue;
+     end;
+
+   TGFlagsValue = record
+        value : guint;
+        value_name : Pgchar;
+        value_nick : Pgchar;
+     end;
+
+{ --- type macros ---  }
+function G_TYPE_IS_ENUM(_type : GType) : gboolean;
+function G_ENUM_CLASS(_class : pointer) : PGEnumClass;
+function G_IS_ENUM_CLASS(_class : pointer) : gboolean;
+function G_ENUM_CLASS_TYPE(_class : pointer) : GType;
+function G_ENUM_CLASS_TYPE_NAME(_class : pointer) : PGChar;
+function G_TYPE_IS_FLAGS(_type : GType) : gboolean;
+function G_FLAGS_CLASS(_class : pointer) : PGFlagsClass;
+function G_IS_FLAGS_CLASS(_class : pointer) : gboolean;
+function G_FLAGS_CLASS_TYPE(_class : pointer) : GType;
+function G_FLAGS_CLASS_TYPE_NAME(_class : pointer) : PGChar;
+function G_VALUE_HOLDS_ENUM(value : pointer) : gboolean;
+function G_VALUE_HOLDS_FLAGS(value : pointer) : gboolean;
+
+
+{ --- prototypes ---  }
+
+function g_enum_get_value(enum_class:PGEnumClass; value:gint):PGEnumValue; cdecl; external gliblib;
+function g_enum_get_value_by_name(enum_class:PGEnumClass; name:Pgchar):PGEnumValue; cdecl; external gliblib;
+function g_enum_get_value_by_nick(enum_class:PGEnumClass; nick:Pgchar):PGEnumValue; cdecl; external gliblib;
+function g_flags_get_first_value(flags_class:PGFlagsClass; value:guint):PGFlagsValue; cdecl; external gliblib;
+function g_flags_get_value_by_name(flags_class:PGFlagsClass; name:Pgchar):PGFlagsValue; cdecl; external gliblib;
+function g_flags_get_value_by_nick(flags_class:PGFlagsClass; nick:Pgchar):PGFlagsValue; cdecl; external gliblib;
+procedure g_value_set_enum(value:PGValue; v_enum:gint); cdecl; external gliblib;
+function g_value_get_enum(value:PGValue):gint; cdecl; external gliblib;
+procedure g_value_set_flags(value:PGValue; v_flags:guint); cdecl; external gliblib;
+function g_value_get_flags(value:PGValue):guint; cdecl; external gliblib;
+{ --- registration functions ---  }
+{ const_static_values is a NULL terminated array of enum/flags
+   values that is taken over!
+  }
+function g_enum_register_static(name:Pgchar; const_static_values:PGEnumValue):GType; cdecl; external gliblib;
+function g_flags_register_static(name:Pgchar; const_static_values:PGFlagsValue):GType; cdecl; external gliblib;
+{ functions to complete the type information
+   for enums/flags implemented by plugins
+  }
+procedure g_enum_complete_type_info(g_enum_type:GType; info:PGTypeInfo; const_values:PGEnumValue); cdecl; external gliblib;
+procedure g_flags_complete_type_info(g_flags_type:GType; info:PGTypeInfo; const_values:PGFlagsValue); cdecl; external gliblib;
+
+{$ENDIF read_interface_rest}
+
+// included by glib2.pas
+
+

+ 48 - 0
packages/extra/gtk2/glib/gerror.inc

@@ -0,0 +1,48 @@
+{$ifndef __G_ERROR_H__}
+{$define __G_ERROR_H__}
+
+//{$include gquark.inc}
+
+  type
+    PPGError = ^PGError;
+    PGError  = ^TGError;
+    TGError  = record
+            domain  : TGQuark;
+            code    : gint;
+            message : Pgchar;
+         end;
+
+{$IFNDEF KYLIX}
+    function  g_error_new(domain:TGQuark; code:gint; format:Pgchar; args:array of const):PGError;cdecl;overload;external gliblib name 'g_error_new_literal';
+    function  g_error_new(domain:TGQuark; code:gint; format:Pgchar):PGError;cdecl;overload;external gliblib name 'g_error_new_literal';
+{$ELSE}
+    function  g_error_new(domain:TGQuark; code:gint; format:Pgchar):PGError;varargs;cdecl;external gliblib name 'g_error_new_literal';
+{$ENDIF}
+
+    function  g_error_new_literal(domain:TGQuark; code:gint; message:Pgchar):PGError;cdecl;external gliblib name 'g_error_new_literal';
+
+    procedure g_error_free(error:PGError);cdecl;external gliblib name 'g_error_free';
+
+    function  g_error_copy(error:PGError):PGError;cdecl;external gliblib name 'g_error_copy';
+
+    function  g_error_matches(error:PGError; domain:TGQuark; code:gint):gboolean;cdecl;external gliblib name 'g_error_matches';
+
+    { if (err)  err = g_error_new(domain, code, format, ...), also has
+      some sanity checks.
+    }
+
+{$IFNDEF KYLIX}
+    procedure g_set_error  (err: PPGError; domain: TGQuark; code: gint; format: Pgchar; args: array of const);cdecl;overload;external gliblib name 'g_set_error';
+    procedure g_set_error  (err: PPGError; domain: TGQuark; code: gint; format: Pgchar);cdecl;overload;external gliblib name 'g_set_error';
+{$ELSE}
+    procedure g_set_error  (err: PPGError; domain: TGQuark; code: gint; format: Pgchar);varargs;cdecl;external gliblib name 'g_set_error';
+{$ENDIF}
+
+    { if dest then dest := src; also has some sanity checks. }
+    procedure g_propagate_error(dest:PPGError; src:PGError);cdecl;external gliblib name 'g_propagate_error';
+
+    { if (err &&  err) then g_error_free( err);  err = NULL;   }
+    procedure g_clear_error(err:PPGError);cdecl;external gliblib name 'g_clear_error';
+
+{$endif}    { __G_ERROR_H__  }
+

+ 76 - 0
packages/extra/gtk2/glib/gfileutils.inc

@@ -0,0 +1,76 @@
+// {$include <glib/gerror.h>}
+
+    type
+
+       PGFileError = ^TGFileError;
+       TGFileError =  gint;
+
+{ For backward-compat reasons, these are synced to an old
+  anonymous enum in libgnome. But don't use that enum
+  in new code.
+}
+
+    type
+       PGFileTest = ^TGFileTest;
+       TGFileTest = integer;
+    const
+       G_FILE_TEST_IS_REGULAR = 1 shl 0;
+       G_FILE_TEST_IS_SYMLINK = 1 shl 1;
+       G_FILE_TEST_IS_DIR = 1 shl 2;
+       G_FILE_TEST_IS_EXECUTABLE = 1 shl 3;
+       G_FILE_TEST_EXISTS = 1 shl 4;
+
+    const
+       G_FILE_ERROR_EXIST       = 0;
+       G_FILE_ERROR_ISDIR       = 1;
+       G_FILE_ERROR_ACCES       = 2;
+       G_FILE_ERROR_NAMETOOLONG = 3;
+       G_FILE_ERROR_NOENT       = 4;
+       G_FILE_ERROR_NOTDIR      = 5;
+       G_FILE_ERROR_NXIO        = 6;
+       G_FILE_ERROR_NODEV       = 7;
+       G_FILE_ERROR_ROFS        = 8;
+       G_FILE_ERROR_TXTBSY      = 9;
+       G_FILE_ERROR_FAULT       = 10;
+       G_FILE_ERROR_LOOP        = 11;
+       G_FILE_ERROR_NOSPC       = 12;
+       G_FILE_ERROR_NOMEM       = 13;
+       G_FILE_ERROR_MFILE       = 14;
+       G_FILE_ERROR_NFILE       = 15;
+       G_FILE_ERROR_BADF        = 16;
+       G_FILE_ERROR_INVAL       = 17;
+       G_FILE_ERROR_PIPE        = 18;
+       G_FILE_ERROR_AGAIN       = 19;
+       G_FILE_ERROR_INTR        = 20;
+       G_FILE_ERROR_IO          = 21;
+       G_FILE_ERROR_PERM        = 22;
+       G_FILE_ERROR_FAILED      = 23;
+
+    function G_FILE_ERROR: TGQuark;
+
+
+    function g_file_error_quark:TGQuark;cdecl;external gliblib name 'g_file_error_quark';
+
+    { So other code can generate a GFileError  }
+    function g_file_error_from_errno(err_no:gint):TGFileError;cdecl;external gliblib name 'g_file_error_from_errno';
+
+    function g_file_test(filename:Pgchar; test:TGFileTest):gboolean;cdecl;external gliblib name 'g_file_test';
+
+    function g_file_get_contents(filename:Pgchar; contents:PPgchar; length:Pgsize; error:PPGError):gboolean;cdecl;external gliblib name 'g_file_get_contents';
+
+    { Wrapper / workalike for mkstemp()  }
+    function g_mkstemp(tmpl:Pchar):longint;cdecl;external gliblib name 'g_mkstemp';
+
+    { Wrapper for g_mkstemp  }
+    function g_file_open_tmp(tmpl:Pchar; name_used:PPchar; error:PPGError):longint;cdecl;external gliblib name 'g_file_open_tmp';
+
+{$IFNDEF KYLIX}
+    function g_build_path(separator:Pgchar; first_element:Pgchar; args:array of const):Pgchar;cdecl;overload;external gliblib name 'g_build_path';
+    function g_build_path(separator:Pgchar; first_element:Pgchar):Pgchar;cdecl;overload;external gliblib name 'g_build_path';
+    function g_build_filename(first_element:Pgchar; args:array of const):Pgchar;cdecl;overload;external gliblib name 'g_build_filename';
+    function g_build_filename(first_element:Pgchar):Pgchar;cdecl;overload;external gliblib name 'g_build_filename';
+{$ELSE}
+    function g_build_path(separator:Pgchar; first_element:Pgchar):Pgchar;varargs;cdecl;external gliblib name 'g_build_path';
+    function g_build_filename(first_element:Pgchar):Pgchar;varargs;cdecl;external gliblib name 'g_build_filename';
+{$ENDIF}
+

+ 57 - 0
packages/extra/gtk2/glib/ghash.inc

@@ -0,0 +1,57 @@
+// {$include <glib/gtypes.h>}
+
+    type
+      PGHashTable = pointer;
+
+      TGHRFunc = function (key:gpointer; value:gpointer; user_data:gpointer):gboolean;cdecl;
+
+{ Hash tables }
+
+    function g_hash_table_new(hash_func:TGHashFunc; key_equal_func:TGEqualFunc):PGHashTable;cdecl;external gliblib name 'g_hash_table_new';
+
+    function g_hash_table_new_full(hash_func:TGHashFunc; key_equal_func:TGEqualFunc; key_destroy_func:TGDestroyNotify; value_destroy_func:TGDestroyNotify):PGHashTable;cdecl;external gliblib name 'g_hash_table_new_full';
+
+    procedure g_hash_table_destroy(hash_table:PGHashTable);cdecl;external gliblib name 'g_hash_table_destroy';
+
+    procedure g_hash_table_insert(hash_table:PGHashTable; key:gpointer; value:gpointer);cdecl;external gliblib name 'g_hash_table_insert';
+
+    procedure g_hash_table_replace(hash_table:PGHashTable; key:gpointer; value:gpointer);cdecl;external gliblib name 'g_hash_table_replace';
+
+    function g_hash_table_remove(hash_table:PGHashTable; key:gconstpointer):gboolean;cdecl;external gliblib name 'g_hash_table_remove';
+
+    function g_hash_table_steal(hash_table:PGHashTable; key:gconstpointer):gboolean;cdecl;external gliblib name 'g_hash_table_steal';
+
+    function g_hash_table_lookup(hash_table:PGHashTable; key:gconstpointer):gpointer;cdecl;external gliblib name 'g_hash_table_lookup';
+
+    function g_hash_table_lookup_extended(hash_table:PGHashTable; lookup_key:gconstpointer; orig_key:Pgpointer; value:Pgpointer):gboolean;cdecl;external gliblib name 'g_hash_table_lookup_extended';
+
+    procedure g_hash_table_foreach(hash_table:PGHashTable; func:TGHFunc; user_data:gpointer);cdecl;external gliblib name 'g_hash_table_foreach';
+
+    function g_hash_table_foreach_remove(hash_table:PGHashTable; func:TGHRFunc; user_data:gpointer):guint;cdecl;external gliblib name 'g_hash_table_foreach_remove';
+
+    function g_hash_table_foreach_steal(hash_table:PGHashTable; func:TGHRFunc; user_data:gpointer):guint;cdecl;external gliblib name 'g_hash_table_foreach_steal';
+
+    function g_hash_table_size(hash_table:PGHashTable):guint;cdecl;external gliblib name 'g_hash_table_size';
+
+
+{ Hash Functions  }
+
+    function g_str_equal(v:gconstpointer; v2:gconstpointer):gboolean;cdecl;external gliblib name 'g_str_equal';
+
+    function g_str_hash(v:gconstpointer):guint;cdecl;external gliblib name 'g_str_hash';
+
+    function g_int_equal(v:gconstpointer; v2:gconstpointer):gboolean;cdecl;external gliblib name 'g_int_equal';
+
+    function g_int_hash(v:gconstpointer):guint;cdecl;external gliblib name 'g_int_hash';
+
+    { This "hash" function will just return the key's adress as an
+       unsigned integer. Useful for hashing on plain adresses or
+       simple integer values.
+       passing NULL into g_hash_table_new() as GHashFunc has the
+       same effect as passing g_direct_hash().
+      }
+
+    function g_direct_hash(v:gconstpointer):guint;cdecl;external gliblib name 'g_direct_hash';
+
+    function g_direct_equal(v:gconstpointer; v2:gconstpointer):gboolean;cdecl;external gliblib name 'g_direct_equal';
+

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