Browse Source

--- Merging r19887 into '.':
U packages/winunits-base/fpmake.pp
U packages/winunits-base/Makefile.fpc
A packages/winunits-base/src/typelib.pas
A packages/winunits-base/src/stdole2.pas
U packages/winunits-base/src/buildwinutilsbase.pp
C packages/winunits-base/Makefile
--- Merging r19888 into '.':
A utils/importtl
A utils/importtl/Makefile.fpc
A utils/importtl/importtl.pas
A utils/importtl/Makefile
A utils/importtl/importtl.lpi
--- Merging r19889 into '.':
U utils/Makefile.fpc
C utils/Makefile
--- Merging r19890 into '.':
U packages/winunits-base/src/typelib.pas
--- Merging r19892 into '.':
G packages/winunits-base/src/typelib.pas
--- Merging r19895 into '.':
U utils/importtl/Makefile.fpc
U utils/importtl/Makefile
--- Merging r19930 into '.':
C packages/winunits-base/Makefile
--- Merging r19934 into '.':
G packages/winunits-base/fpmake.pp
G packages/winunits-base/Makefile.fpc
G packages/winunits-base/src/buildwinutilsbase.pp
A packages/winunits-base/src/eventsink.pp
C packages/winunits-base/Makefile
--- Merging r19935 into '.':
G packages/winunits-base/src/typelib.pas
--- Merging r19936 into '.':
U utils/importtl/importtl.pas
--- Merging r19937 into '.':
U compiler/cstreams.pas
Summary of conflicts:
Text conflicts: 4

# revisions: 19887,19888,19889,19890,19892,19895,19930,19934,19935,19936,19937
------------------------------------------------------------------------
r19887 | michael | 2011-12-26 17:31:35 +0100 (Mon, 26 Dec 2011) | 1 line
Changed paths:
M /trunk/packages/winunits-base/Makefile
M /trunk/packages/winunits-base/Makefile.fpc
M /trunk/packages/winunits-base/fpmake.pp
M /trunk/packages/winunits-base/src/buildwinutilsbase.pp
A /trunk/packages/winunits-base/src/stdole2.pas
A /trunk/packages/winunits-base/src/typelib.pas

* StdOle2 and typelib added from Ludo Brands (bug 20958)
------------------------------------------------------------------------
------------------------------------------------------------------------
r19888 | michael | 2011-12-26 17:37:38 +0100 (Mon, 26 Dec 2011) | 2 lines
Changed paths:
A /trunk/utils/importtl
A /trunk/utils/importtl/Makefile
A /trunk/utils/importtl/Makefile.fpc
A /trunk/utils/importtl/importtl.lpi
A /trunk/utils/importtl/importtl.pas

* importtl (type library import program) from Ludo Brands (bug 20958)

------------------------------------------------------------------------
------------------------------------------------------------------------
r19889 | michael | 2011-12-26 17:38:37 +0100 (Mon, 26 Dec 2011) | 1 line
Changed paths:
M /trunk/utils/Makefile
M /trunk/utils/Makefile.fpc

* Importtl added
------------------------------------------------------------------------
------------------------------------------------------------------------
r19890 | michael | 2011-12-26 17:41:00 +0100 (Mon, 26 Dec 2011) | 1 line
Changed paths:
M /trunk/packages/winunits-base/src/typelib.pas

* New methods made virtual
------------------------------------------------------------------------
------------------------------------------------------------------------
r19892 | michael | 2011-12-27 12:34:36 +0100 (Tue, 27 Dec 2011) | 1 line
Changed paths:
M /trunk/packages/winunits-base/src/typelib.pas

* Applied patch from Ludo Brands (bug 20972)
------------------------------------------------------------------------
------------------------------------------------------------------------
r19895 | michael | 2011-12-27 17:19:32 +0100 (Tue, 27 Dec 2011) | 1 line
Changed paths:
M /trunk/utils/importtl/Makefile
M /trunk/utils/importtl/Makefile.fpc

* Added dependency on winunits-base
------------------------------------------------------------------------
------------------------------------------------------------------------
r19930 | marco | 2011-12-30 23:02:45 +0100 (Fri, 30 Dec 2011) | 1 line
Changed paths:
M /trunk/packages/winunits-base/Makefile

* regenned makefile that was accidentally done win32 only.
------------------------------------------------------------------------
------------------------------------------------------------------------
r19934 | michael | 2011-12-31 16:25:47 +0100 (Sat, 31 Dec 2011) | 1 line
Changed paths:
M /trunk/packages/winunits-base/Makefile
M /trunk/packages/winunits-base/Makefile.fpc
M /trunk/packages/winunits-base/fpmake.pp
M /trunk/packages/winunits-base/src/buildwinutilsbase.pp
A /trunk/packages/winunits-base/src/eventsink.pp

* Added eventsink unit from Ludo Brands (bug 20991)
------------------------------------------------------------------------
------------------------------------------------------------------------
r19935 | michael | 2011-12-31 16:33:56 +0100 (Sat, 31 Dec 2011) | 1 line
Changed paths:
M /trunk/packages/winunits-base/src/typelib.pas

* Patch by Ludo Brands to support creation of activeX containers and event sink components (bug 20991)
------------------------------------------------------------------------
------------------------------------------------------------------------
r19936 | michael | 2011-12-31 16:41:59 +0100 (Sat, 31 Dec 2011) | 1 line
Changed paths:
M /trunk/utils/importtl/importtl.pas

* Patch by Ludo Brands to add support for ActiveX containers (bug 20991)
------------------------------------------------------------------------
------------------------------------------------------------------------
r19937 | florian | 2011-12-31 17:25:19 +0100 (Sat, 31 Dec 2011) | 1 line
Changed paths:
M /trunk/compiler/cstreams.pas

* typo fixed
------------------------------------------------------------------------

git-svn-id: branches/fixes_2_6@20153 -

marco 13 years ago
parent
commit
5e9b685bed

+ 7 - 0
.gitattributes

@@ -6534,6 +6534,7 @@ packages/winunits-base/src/commdlg.pp svneol=native#text/plain
 packages/winunits-base/src/comobj.pp svneol=native#text/plain
 packages/winunits-base/src/comobj.pp svneol=native#text/plain
 packages/winunits-base/src/comserv.pp svneol=native#text/plain
 packages/winunits-base/src/comserv.pp svneol=native#text/plain
 packages/winunits-base/src/dwmapi.pp svneol=native#text/plain
 packages/winunits-base/src/dwmapi.pp svneol=native#text/plain
+packages/winunits-base/src/eventsink.pp svneol=native#text/plain
 packages/winunits-base/src/flatsb.pp svneol=native#text/plain
 packages/winunits-base/src/flatsb.pp svneol=native#text/plain
 packages/winunits-base/src/htmlhelp.pp svneol=native#text/plain
 packages/winunits-base/src/htmlhelp.pp svneol=native#text/plain
 packages/winunits-base/src/imagehlp.pp svneol=native#text/plain
 packages/winunits-base/src/imagehlp.pp svneol=native#text/plain
@@ -6548,7 +6549,9 @@ packages/winunits-base/src/richedit.pp svneol=native#text/plain
 packages/winunits-base/src/shellapi.pp svneol=native#text/plain
 packages/winunits-base/src/shellapi.pp svneol=native#text/plain
 packages/winunits-base/src/shfolder.pp svneol=native#text/plain
 packages/winunits-base/src/shfolder.pp svneol=native#text/plain
 packages/winunits-base/src/shlobj.pp svneol=native#text/plain
 packages/winunits-base/src/shlobj.pp svneol=native#text/plain
+packages/winunits-base/src/stdole2.pas svneol=native#text/plain
 packages/winunits-base/src/tmschema.inc svneol=native#text/plain
 packages/winunits-base/src/tmschema.inc svneol=native#text/plain
+packages/winunits-base/src/typelib.pas svneol=native#text/plain
 packages/winunits-base/src/uxtheme.pp svneol=native#text/plain
 packages/winunits-base/src/uxtheme.pp svneol=native#text/plain
 packages/winunits-base/src/win9xwsmanager.pp svneol=native#text/pascal
 packages/winunits-base/src/win9xwsmanager.pp svneol=native#text/pascal
 packages/winunits-base/src/wininet.pp svneol=native#text/plain
 packages/winunits-base/src/wininet.pp svneol=native#text/plain
@@ -12902,6 +12905,10 @@ utils/h2pas/scan.pas svneol=native#text/plain
 utils/h2pas/testit.h -text
 utils/h2pas/testit.h -text
 utils/h2pas/yylex.cod -text
 utils/h2pas/yylex.cod -text
 utils/h2pas/yyparse.cod -text
 utils/h2pas/yyparse.cod -text
+utils/importtl/Makefile svneol=native#text/plain
+utils/importtl/Makefile.fpc svneol=native#text/plain
+utils/importtl/importtl.lpi svneol=native#text/plain
+utils/importtl/importtl.pas svneol=native#text/plain
 utils/instantfpc/Makefile svneol=native#text/plain
 utils/instantfpc/Makefile svneol=native#text/plain
 utils/instantfpc/Makefile.fpc svneol=native#text/plain
 utils/instantfpc/Makefile.fpc svneol=native#text/plain
 utils/instantfpc/README.txt svneol=native#text/plain
 utils/instantfpc/README.txt svneol=native#text/plain

+ 1 - 1
compiler/cstreams.pas

@@ -203,7 +203,7 @@ implementation
 
 
     begin
     begin
     // We do nothing. Pipe streams don't support this
     // We do nothing. Pipe streams don't support this
-    // As wel as possible read-ony streams !!
+    // As well as possible read-ony streams !!
     end;
     end;
 
 
   procedure TCStream.ReadBuffer(var Buffer; Count: Longint);
   procedure TCStream.ReadBuffer(var Buffer; Count: Longint);

+ 63 - 63
packages/winunits-base/Makefile

@@ -478,193 +478,193 @@ ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_UNITS+=buildwinutilsbase
 override TARGET_UNITS+=buildwinutilsbase
 endif
 endif
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-haiku)
 ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netware)
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wince)
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
 ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
 ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-nativent)
 ifeq ($(FULL_TARGET),i386-nativent)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-iphonesim)
 ifeq ($(FULL_TARGET),i386-iphonesim)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
 ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-wii)
 ifeq ($(FULL_TARGET),powerpc-wii)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-solaris)
 ifeq ($(FULL_TARGET),x86_64-solaris)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),arm-linux)
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),arm-darwin)
 ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),arm-wince)
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),arm-gba)
 ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),arm-nds)
 ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
 ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
 ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),avr-embedded)
 ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),armeb-linux)
 ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
 ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 win9xwsmanager stdole2 eventsink typelib
 endif
 endif
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
 override TARGET_RSTS+=jwawintype comconst
 override TARGET_RSTS+=jwawintype comconst

+ 1 - 1
packages/winunits-base/Makefile.fpc

@@ -13,7 +13,7 @@ packages=fcl-registry fcl-base
 units=buildwinutilsbase
 units=buildwinutilsbase
 implicitunits=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver \
 implicitunits=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver \
 	shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 \
 	shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30 \
-        win9xwsmanager
+        win9xwsmanager stdole2 eventsink typelib 
 
 
 examples=examples
 examples=examples
 
 

+ 6 - 0
packages/winunits-base/fpmake.pp

@@ -56,6 +56,9 @@ begin
           AddUnit('multimon');
           AddUnit('multimon');
           AddUnit('htmlhelp');
           AddUnit('htmlhelp');
           AddUnit('winspool');
           AddUnit('winspool');
+		  AddUnit('stdole2');
+		  AddUnit('eventsink');
+		  AddUnit('typelib');
         end;
         end;
     T:=P.Targets.AddImplicitUnit('activex.pp');
     T:=P.Targets.AddImplicitUnit('activex.pp');
     T:=P.Targets.AddImplicitUnit('comconst.pp');
     T:=P.Targets.AddImplicitUnit('comconst.pp');
@@ -80,6 +83,9 @@ begin
     T:=P.Targets.AddImplicitUnit('dwmapi.pp');
     T:=P.Targets.AddImplicitUnit('dwmapi.pp');
     T:=P.Targets.AddImplicitUnit('htmlhelp.pp');
     T:=P.Targets.AddImplicitUnit('htmlhelp.pp');
     T:=P.Targets.AddImplicitUnit('winspool.pp');
     T:=P.Targets.AddImplicitUnit('winspool.pp');
+	T:=P.Targets.AddImplicitUnit('stdole2');
+	T:=P.Targets.AddImplicitUnit('eventsink');
+	T:=P.Targets.AddImplicitUnit('typelib');
     T.Dependencies.AddInclude('tmschema.inc');
     T.Dependencies.AddInclude('tmschema.inc');
     P.ExamplePath.Add('tests/');
     P.ExamplePath.Add('tests/');
     P.Targets.AddExampleProgram('testcom1.pp');
     P.Targets.AddExampleProgram('testcom1.pp');

+ 2 - 1
packages/winunits-base/src/buildwinutilsbase.pp

@@ -24,7 +24,8 @@ uses
     flatsb, winver, mmsystem, comconst, commctrl, comobj, commdlg,
     flatsb, winver, mmsystem, comconst, commctrl, comobj, commdlg,
     ole2, activex, shellapi, shlobj, oleserver,  shfolder, richedit,
     ole2, activex, shellapi, shlobj, oleserver,  shfolder, richedit,
     imagehlp, wininet, uxtheme, dwmapi, multimon, htmlhelp, winutils,
     imagehlp, wininet, uxtheme, dwmapi, multimon, htmlhelp, winutils,
-    comserv, winspool, imm, imm_dyn, nb30, win9xwsmanager;
+    comserv, winspool, imm, imm_dyn, nb30, win9xwsmanager, stdole2, 
+	eventsink, typelib;
 
 
 implementation
 implementation
 
 

+ 221 - 0
packages/winunits-base/src/eventsink.pp

@@ -0,0 +1,221 @@
+unit EventSink;
+
+{$mode objfpc}{$H+}
+{ COM EventSink.
+
+  Copyright (C) 2011 Ludo Brands
+
+  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 with the following modification:
+
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent modules,and
+  to copy and distribute the resulting executable under terms of your choice,
+  provided that you also meet, for each linked independent module, the terms
+  and conditions of the license of that module. An independent module is a
+  module which is not derived from or based on this library. If you modify
+  this library, you may extend this exception to your version of the library,
+  but you are not obligated to do so. If you do not wish to do so, delete this
+  exception statement from your version.
+
+  This program is distributed in the hope that it will be useful, but WITHOUT
+  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE. 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.
+}
+
+interface
+
+uses
+ Windows, SysUtils, Classes, ActiveX;
+
+type
+ TInvokeEvent = procedure(Sender: TObject; DispID: Integer;
+  const IID: TGUID; LocaleID: Integer; Flags: Word;
+  Params: TDispParams; VarResult, ExcepInfo, ArgErr: Pointer) of object;
+
+ TAbstractEventSink = class(TInterfacedObject, IDispatch)
+ private
+  FDispatch: IDispatch;
+  FDispIntfIID: TGUID;
+  FConnection: DWORD;
+  FOwner: TComponent;
+ protected
+  { IUnknown }
+  function QueryInterface(constref IID: TGUID; out Obj): HRESULT; stdcall;
+  { IDispatch }
+  function GetTypeInfoCount(out Count: Integer): HRESULT; stdcall;
+  function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HRESULT; stdcall;
+  function GetIDsOfNames(const IID: TGUID; Names: Pointer;
+   NameCount, LocaleID: Integer; DispIDs: Pointer): HRESULT; stdcall;
+  function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
+   Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HRESULT; stdcall;
+ public
+  constructor Create(AOwner: TComponent);
+  destructor Destroy; override;
+  procedure Connect(AnAppDispatch: IDispatch; const AnAppDispIntfIID: TGUID);
+  procedure Disconnect;
+ end;
+
+ TEventSink = class(TComponent)
+ private
+  FSink: TAbstractEventSink;
+  FOnInvoke: TInvokeEvent;
+ protected
+  procedure DoInvoke(DispID: Integer; const IID: TGUID;
+   LocaleID: Integer; Flags: Word; var Params;
+   VarResult, ExcepInfo, ArgErr: Pointer); virtual;
+ public
+  constructor Create(AOwner: TComponent); override;
+  destructor Destroy; override;
+  procedure Connect(AnAppDispatch: IDispatch; const AnAppDispIntfIID: TGUID);
+ published
+  property OnInvoke: TInvokeEvent read FOnInvoke write FOnInvoke;
+ end;
+
+
+implementation
+
+uses
+ ComObj;
+
+procedure InterfaceConnect(const Source: IUnknown; const IID: TIID;
+ const Sink: IUnknown; var Connection: DWORD);
+var
+ CPC: IConnectionPointContainer;
+ CP: IConnectionPoint;
+ i:hresult;
+begin
+ Connection := 0;
+ if Succeeded(Source.QueryInterface(IConnectionPointContainer, CPC)) then
+  if Succeeded(CPC.FindConnectionPoint(IID, CP)) then
+    i:=CP.Advise(Sink, Connection);
+end;
+
+procedure InterfaceDisconnect(const Source: IUnknown; const IID: TIID;
+ var Connection: DWORD);
+var
+ CPC: IConnectionPointContainer;
+ CP: IConnectionPoint;
+ i:hresult;
+begin
+ if Connection <> 0 then
+  if Succeeded(Source.QueryInterface(IConnectionPointContainer, CPC)) then
+   if Succeeded(CPC.FindConnectionPoint(IID, CP)) then
+    begin
+     i:=CP.Unadvise(Connection);
+     if Succeeded(i) then Connection := 0;
+
+    end;
+end;
+
+{ TAbstractEventSink }
+
+constructor TAbstractEventSink.Create(AOwner: TComponent);
+begin
+ inherited Create;
+ FOwner := AOwner;
+end;
+
+destructor TAbstractEventSink.Destroy;
+var p:pointer;
+begin
+ inherited Destroy;
+end;
+
+function TAbstractEventSink.GetIDsOfNames(const IID: TGUID; Names: Pointer;
+ NameCount, LocaleID: Integer; DispIDs: Pointer): HRESULT; stdcall;
+begin
+ Result := E_NOTIMPL;
+end;
+
+function TAbstractEventSink.GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HRESULT; stdcall;
+begin
+ Result := E_NOTIMPL;
+end;
+
+function TAbstractEventSink.GetTypeInfoCount(out Count: Integer): HRESULT; stdcall;
+begin
+ Count := 0;
+ Result := S_OK;
+end;
+
+function TAbstractEventSink.Invoke(DispID: Integer; const IID: TGUID;
+ LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo,
+ ArgErr: Pointer): HRESULT; stdcall;
+begin
+ (FOwner as TEventSink).DoInvoke(DispID, IID, LocaleID, Flags,
+  Params, VarResult, ExcepInfo, ArgErr);
+ Result := S_OK;
+end;
+
+function TAbstractEventSink.QueryInterface(constref IID: TGUID; out Obj): HRESULT; stdcall;
+begin
+ // We need to return the event interface when it's asked for
+ Result := E_NOINTERFACE;
+ if GetInterface(IID,Obj) then
+  Result := S_OK;
+ if IsEqualGUID(IID, FDispIntfIID) and GetInterface(IDispatch,Obj) then
+  Result := S_OK;
+end;
+
+procedure TAbstractEventSink.Connect(AnAppDispatch: IDispatch;
+ const AnAppDispIntfIID: TGUID);
+begin
+ FDispIntfIID := AnAppDispIntfIID;
+ FDispatch := AnAppDispatch;
+ // Hook the sink up to the automation server
+ InterfaceConnect(FDispatch, FDispIntfIID, Self, FConnection);
+end;
+
+procedure TAbstractEventSink.Disconnect;
+begin
+ if Assigned(FDispatch) then begin
+  // Unhook the sink from the automation server
+  InterfaceDisconnect(FDispatch, FDispIntfIID, FConnection);
+  FDispatch := nil;
+  FConnection := 0;
+ end;
+end;
+
+{ TEventSink }
+
+procedure TEventSink.Connect(AnAppDispatch: IDispatch;
+ const AnAppDispIntfIID: TGUID);
+begin
+ FSink.Connect(AnAppDispatch, AnAppDispIntfIID);
+end;
+
+constructor TEventSink.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+
+ FSink := TAbstractEventSink.Create(self);
+end;
+
+destructor TEventSink.Destroy;
+begin
+ FSink.Disconnect;   // reference count will destroy FSink
+// calling FSink.Destroy will raise error 204 since refcount=1 (not disconnected yet)
+// FSink.Destroy;
+
+ inherited Destroy;
+end;
+
+procedure TEventSink.DoInvoke(DispID: Integer; const IID: TGUID;
+ LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo,
+ ArgErr: Pointer);
+begin
+ if Assigned(FOnInvoke) then
+  FOnInvoke(self, DispID, IID, LocaleID, Flags, TDispParams(Params),
+   VarResult, ExcepInfo, ArgErr);
+end;
+
+end.

+ 286 - 0
packages/winunits-base/src/stdole2.pas

@@ -0,0 +1,286 @@
+Unit stdole2;
+
+//  Imported on 24/12/2011 13:43:11 from C:\WINDOWS\system32\stdole2.tlb
+//  Modified by Ludo Brands to remove redeclarations
+//  Warning: renamed method 'Reset' in IEnumVARIANT to 'Reset_'
+//  Warning: renamed property 'Type' in IPicture to 'Type_'
+//  Warning: 'pointer' not automatable in Picturedisp.Render
+//  Warning: renamed property 'Type' in Picture to 'Type_'
+
+{$mode delphi}{$H+}
+
+interface
+uses Windows, ActiveX, Classes, OleServer, Variants;
+Const
+  stdoleMajorVersion = 2;
+  stdoleMinorVersion = 0;
+
+  LIBID_stdole : TGUID = '{00020430-0000-0000-C000-000000000046}';
+
+  IID_IUnknown : TGUID = '{00000000-0000-0000-C000-000000000046}';
+  IID_IDispatch : TGUID = '{00020400-0000-0000-C000-000000000046}';
+  IID_IEnumVARIANT : TGUID = '{00020404-0000-0000-C000-000000000046}';
+  IID_IFont : TGUID = '{BEF6E002-A874-101A-8BBA-00AA00300CAB}';
+  IID_Font : TGUID = '{BEF6E003-A874-101A-8BBA-00AA00300CAB}';
+  CLASS_StdFont : TGUID = '{0BE35203-8F91-11CE-9DE3-00AA004BB851}';
+  IID_IPicture : TGUID = '{7BF80980-BF32-101A-8BBB-00AA00300CAB}';
+  IID_Picture : TGUID = '{7BF80981-BF32-101A-8BBB-00AA00300CAB}';
+  CLASS_StdPicture : TGUID = '{0BE35204-8F91-11CE-9DE3-00AA004BB851}';
+  IID_FontEvents : TGUID = '{4EF6100A-AF88-11D0-9846-00C04FC29993}';
+
+//Enums
+Type
+  OLE_TRISTATE =TOleEnum;
+Const
+  Unchecked = $0000000000000000;
+  Checked = $0000000000000001;
+  Gray = $0000000000000002;
+Type
+  LoadPictureConstants =TOleEnum;
+Const
+  Default = $0000000000000000;
+  Monochrome = $0000000000000001;
+  VgaColor = $0000000000000002;
+  Color = $0000000000000004;
+
+//Forward declarations
+Type
+ IEnumVARIANT = interface;
+ IFont = interface;
+ Font = dispinterface;
+ IPicture = interface;
+ Picture = dispinterface;
+ FontEvents = dispinterface;
+
+//records, unions, aliases
+ EXCEPINFO = packed record
+     wCode : Word;
+     wReserved : Word;
+     bstrSource : WideString;
+     bstrDescription : WideString;
+     bstrHelpFile : WideString;
+     dwHelpContext : LongWord;
+     pvReserved : Ppointer;
+     pfnDeferredFillIn : Ppointer;
+     scode : SCODE;
+ end;
+     OLE_COLOR = LongWord;
+     OLE_XPOS_PIXELS = Integer;
+     OLE_YPOS_PIXELS = Integer;
+     OLE_XSIZE_PIXELS = Integer;
+     OLE_YSIZE_PIXELS = Integer;
+     OLE_XPOS_HIMETRIC = Integer;
+     OLE_YPOS_HIMETRIC = Integer;
+     OLE_XSIZE_HIMETRIC = Integer;
+     OLE_YSIZE_HIMETRIC = Integer;
+     OLE_XPOS_CONTAINER = Single;
+     OLE_YPOS_CONTAINER = Single;
+     OLE_XSIZE_CONTAINER = Single;
+     OLE_YSIZE_CONTAINER = Single;
+     OLE_HANDLE = SYSINT;
+     OLE_OPTEXCLUSIVE = WordBool;
+     OLE_CANCELBOOL = WordBool;
+     OLE_ENABLEDEFAULTBOOL = WordBool;
+     FONTNAME = WideString;
+     FONTSIZE = Currency;
+     FONTBOLD = WordBool;
+     FONTITALIC = WordBool;
+     FONTUNDERSCORE = WordBool;
+     FONTSTRIKETHROUGH = WordBool;
+     IFontDisp = Font;
+     IPictureDisp = Picture;
+     IFontEventsDisp = FontEvents;
+
+//interface declarations
+
+// IEnumVARIANT :
+
+ IEnumVARIANT = interface(IUnknown)
+   ['{00020404-0000-0000-C000-000000000046}']
+    // Next :  
+   procedure Next(celt:LongWord;var rgvar:OleVariant;out pceltFetched:LongWord);stdcall;
+    // Skip :  
+   procedure Skip(celt:LongWord);stdcall;
+    // Reset_ :  
+   procedure Reset_;stdcall;
+    // Clone :  
+   procedure Clone(out ppenum:IEnumVARIANT);stdcall;
+  end;
+
+// IFont : Font Object
+
+ IFont = interface(IUnknown)
+   ['{BEF6E002-A874-101A-8BBA-00AA00300CAB}']
+   function Get_Name : WideString; stdcall;
+   procedure Set_Name(const pname:WideString); stdcall;
+   function Get_Size : Currency; stdcall;
+   procedure Set_Size(const psize:Currency); stdcall;
+   function Get_Bold : WordBool; stdcall;
+   procedure Set_Bold(const pbold:WordBool); stdcall;
+   function Get_Italic : WordBool; stdcall;
+   procedure Set_Italic(const pitalic:WordBool); stdcall;
+   function Get_Underline : WordBool; stdcall;
+   procedure Set_Underline(const punderline:WordBool); stdcall;
+   function Get_Strikethrough : WordBool; stdcall;
+   procedure Set_Strikethrough(const pstrikethrough:WordBool); stdcall;
+   function Get_Weight : Smallint; stdcall;
+   procedure Set_Weight(const pweight:Smallint); stdcall;
+   function Get_Charset : Smallint; stdcall;
+   procedure Set_Charset(const pcharset:Smallint); stdcall;
+   function Get_hFont : OLE_HANDLE; stdcall;
+    // Clone :  
+   procedure Clone(out ppfont:IFont);stdcall;
+    // IsEqual :  
+   procedure IsEqual(pfontOther:IFont);stdcall;
+    // SetRatio :  
+   procedure SetRatio(cyLogical:Integer;cyHimetric:Integer);stdcall;
+    // AddRefHfont :  
+   procedure AddRefHfont(hFont:OLE_HANDLE);stdcall;
+    // ReleaseHfont :  
+   procedure ReleaseHfont(hFont:OLE_HANDLE);stdcall;
+    // Name :  
+   property Name:WideString read Get_Name write Set_Name;
+    // Size :  
+   property Size:Currency read Get_Size write Set_Size;
+    // Bold :  
+   property Bold:WordBool read Get_Bold write Set_Bold;
+    // Italic :  
+   property Italic:WordBool read Get_Italic write Set_Italic;
+    // Underline :  
+   property Underline:WordBool read Get_Underline write Set_Underline;
+    // Strikethrough :  
+   property Strikethrough:WordBool read Get_Strikethrough write Set_Strikethrough;
+    // Weight :  
+   property Weight:Smallint read Get_Weight write Set_Weight;
+    // Charset :  
+   property Charset:Smallint read Get_Charset write Set_Charset;
+    // hFont :  
+   property hFont:OLE_HANDLE read Get_hFont ;
+  end;
+
+// Font : 
+
+ Font = dispinterface
+   ['{BEF6E003-A874-101A-8BBA-00AA00300CAB}']
+    // Name :  
+   property Name:WideString  dispid 0;
+    // Size :  
+   property Size:Currency  dispid 2;
+    // Bold :  
+   property Bold:WordBool  dispid 3;
+    // Italic :  
+   property Italic:WordBool  dispid 4;
+    // Underline :  
+   property Underline:WordBool  dispid 5;
+    // Strikethrough :  
+   property Strikethrough:WordBool  dispid 6;
+    // Weight :  
+   property Weight:Smallint  dispid 7;
+    // Charset :  
+   property Charset:Smallint  dispid 8;
+  end;
+
+// IPicture : Picture Object
+
+ IPicture = interface(IUnknown)
+   ['{7BF80980-BF32-101A-8BBB-00AA00300CAB}']
+   function Get_Handle : OLE_HANDLE; stdcall;
+   function Get_hPal : OLE_HANDLE; stdcall;
+   function Get_Type_ : Smallint; stdcall;
+   function Get_Width : OLE_XSIZE_HIMETRIC; stdcall;
+   function Get_Height : OLE_YSIZE_HIMETRIC; stdcall;
+    // Render :  
+   procedure Render(hdc:SYSINT;x:Integer;y:Integer;cx:Integer;cy:Integer;xSrc:OLE_XPOS_HIMETRIC;ySrc:OLE_YPOS_HIMETRIC;cxSrc:OLE_XSIZE_HIMETRIC;cySrc:OLE_YSIZE_HIMETRIC;var prcWBounds:pointer);stdcall;
+   procedure Set_hPal(const phpal:OLE_HANDLE); stdcall;
+   function Get_CurDC : SYSINT; stdcall;
+    // SelectPicture :  
+   procedure SelectPicture(hdcIn:SYSINT;out phdcOut:SYSINT;out phbmpOut:OLE_HANDLE);stdcall;
+   function Get_KeepOriginalFormat : WordBool; stdcall;
+   procedure Set_KeepOriginalFormat(const pfkeep:WordBool); stdcall;
+    // PictureChanged :  
+   procedure PictureChanged;stdcall;
+    // SaveAsFile :  
+   procedure SaveAsFile(var pstm:pointer;fSaveMemCopy:WordBool;out pcbSize:Integer);stdcall;
+   function Get_Attributes : Integer; stdcall;
+    // SetHdc :  
+   procedure SetHdc(hdc:OLE_HANDLE);stdcall;
+    // Handle :  
+   property Handle:OLE_HANDLE read Get_Handle ;
+    // hPal :  
+   property hPal:OLE_HANDLE read Get_hPal write Set_hPal;
+    // Type :  
+   property Type_:Smallint read Get_Type_ ;
+    // Width :  
+   property Width:OLE_XSIZE_HIMETRIC read Get_Width ;
+    // Height :  
+   property Height:OLE_YSIZE_HIMETRIC read Get_Height ;
+    // CurDC :  
+   property CurDC:SYSINT read Get_CurDC ;
+    // KeepOriginalFormat :  
+   property KeepOriginalFormat:WordBool read Get_KeepOriginalFormat write Set_KeepOriginalFormat;
+    // Attributes :  
+   property Attributes:Integer read Get_Attributes ;
+  end;
+
+// Picture : 
+
+ Picture = dispinterface
+   ['{7BF80981-BF32-101A-8BBB-00AA00300CAB}']
+    // Render :  
+   procedure Render(hdc:SYSINT;x:Integer;y:Integer;cx:Integer;cy:Integer;xSrc:OLE_XPOS_HIMETRIC;ySrc:OLE_YPOS_HIMETRIC;cxSrc:OLE_XSIZE_HIMETRIC;cySrc:OLE_YSIZE_HIMETRIC;prcWBounds:{!! pointer !!} OleVariant);dispid 6;
+    // Handle :  
+   property Handle:OLE_HANDLE  dispid 0;
+    // hPal :  
+   property hPal:OLE_HANDLE  dispid 2;
+    // Type :  
+   property Type_:Smallint  dispid 3;
+    // Width :  
+   property Width:OLE_XSIZE_HIMETRIC  dispid 4;
+    // Height :  
+   property Height:OLE_YSIZE_HIMETRIC  dispid 5;
+  end;
+
+// FontEvents : Event interface for the Font object
+
+ FontEvents = dispinterface
+   ['{4EF6100A-AF88-11D0-9846-00C04FC29993}']
+    // FontChanged :  
+   procedure FontChanged(PropertyName:WideString);dispid 9;
+  end;
+
+//CoClasses
+  CoStdFont =class
+    class function Create: Font;
+    class function CreateRemote(const MachineName: string): Font;
+  end;
+  CoStdPicture =class
+    class function Create: Picture;
+    class function CreateRemote(const MachineName: string): Picture;
+  end;
+
+implementation
+
+uses comobj;
+
+class function CoStdFont.Create: Font;
+begin
+  Result := CreateComObject(CLASS_StdFont) as Font;
+end;
+
+class function CoStdFont.CreateRemote(const MachineName: string): Font;
+begin
+  Result := CreateRemoteComObject(MachineName,CLASS_StdFont) as Font;
+end;
+
+class function CoStdPicture.Create: Picture;
+begin
+  Result := CreateComObject(CLASS_StdPicture) as Picture;
+end;
+
+class function CoStdPicture.CreateRemote(const MachineName: string): Picture;
+begin
+  Result := CreateRemoteComObject(MachineName,CLASS_StdPicture) as Picture;
+end;
+
+
+end.

+ 1517 - 0
packages/winunits-base/src/typelib.pas

@@ -0,0 +1,1517 @@
+unit typelib;
+
+{$mode objfpc}{$H+}
+
+{ Typelib import routines.
+
+  Creates freepascal bindings for COM objects stored in .tlb, .dll, .exe or .olb files.
+
+  Copyright (C) 2011 Ludo Brands
+
+  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 with the following modification:
+
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent modules,and
+  to copy and distribute the resulting executable under terms of your choice,
+  provided that you also meet, for each linked independent module, the terms
+  and conditions of the license of that module. An independent module is a
+  module which is not derived from or based on this library. If you modify
+  this library, you may extend this exception to your version of the library,
+  but you are not obligated to do so. If you do not wish to do so, delete this
+  exception statement from your version.
+
+  This program is distributed in the hope that it will be useful, but WITHOUT
+  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE. 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.
+}
+
+interface
+
+uses
+  Classes, SysUtils,comobj,activex,windows;
+
+{
+Reads type information from 'FileName' and converts it in a freepascal binding unit. The
+contents of the unit is returned as the function result.
+Returns in 'sUnitName' the unit name with '.pas' extension.
+Appends to 'slDependencies' the filenames of the additional typelibs needed.
+If bActiveX is true an ActiveXContainer descendant is created with the evenual OnEvent hooks
+If bActiveX is false and an event source is found an TEventSink descendant is created with the OnEvent hooks
+
+By default, the type library is extracted from the first resource of type ITypeLib.
+To load a different type of library resource, append an integer index to 'FileName'.
+
+Example:  C:\WINDOWS\system32\msvbvm60.dll\3
+}
+function ImportTypelib(FileName: WideString;var sUnitName:string;var slDependencies:TStringList;
+    bActiveX:boolean):string;
+
+
+Type
+
+  { TTypeLibImporter }
+
+  TTypeLibImporter = Class(TComponent)
+  private
+    FActiveX: Boolean;
+    FAppendVersionNumber: Boolean;
+    FDependencies: TStringList;
+    FUnitSource: TStringList;
+    FInputFileName: WideString;
+    FOutputFileName: String;
+    FUnitname: string;
+    FUses : TStrings;
+    FHeader : TStrings;
+    FInterface : TStrings;
+    FImplementation : TStrings;
+    FTypes : TStrings;
+    FEventDisp : TStrings;
+    FEventIID : TStrings;
+    FEventSignatures: TStrings;
+    FEventFunctions: TStrings;
+    FEventProperties: TStrings;
+    FEventImplementations: TStrings;
+    function GetDependencies: TStrings;
+    function GetUnitSource: TStrings;
+    procedure SetOutputFileName(AValue: String);
+    procedure SetUnitName(AValue: string);
+  Protected
+    bIsCustomAutomatable,bIsInterface,bIsAutomatable,bIsExternalDecl,bIsUserDefined:boolean;
+    // Construct unit from header, uses, interface,
+    procedure BuildUnit; virtual;
+    // Add to various parts of sources
+    Procedure AddToUses(Const AUnit : String); virtual;
+    Procedure AddToHeader(Const ALine : String; AllowDuplicate : Boolean = False);virtual;
+    Procedure AddToHeader(Const Fmt : String; Args : Array of const; AllowDuplicate : Boolean = False);
+    Procedure AddToInterface(Const ALine : String);virtual;
+    Procedure AddToInterface(Const Fmt : String; Args : Array of const);
+    Procedure AddToImplementation(Const ALine : String);virtual;
+    Procedure AddToImplementation(Const Fmt : String; Args : Array of const);
+    // utility functions
+    function interfacedeclaration(iName, iDoc: string; TI: ITypeInfo; TA: LPTYPEATTR;
+      bIsDispatch,bCreateEvents:boolean): string;
+    function VarTypeIsAutomatable(ParamType: integer): boolean; virtual;
+    function VarTypeToStr(ParamType: integer): string; virtual;
+    function TypeToString(TI: ITypeInfo; TD: TYPEDESC): string; virtual;
+    function ValidateID(id: string): boolean; virtual;
+    // The actual routines that do the work.
+    procedure CreateCoClasses(const TL: ITypeLib; TICount: Integer); virtual;
+    procedure CreateForwards(const TL: ITypeLib; TICount: Integer); virtual;
+    procedure CreateInterfaces(const TL: ITypeLib; TICount: Integer); virtual;
+    procedure CreateRecordsUnionsAliases(const TL: ITypeLib; TICount: Integer); virtual;
+    procedure CreateUnitHeader(const TL: ITypeLib; const LA: lpTLIBATTR); virtual;
+    procedure ImportEnums(const TL: ITypeLib; TICount: Integer); virtual;
+    procedure ImportGUIDs(const TL: ITypeLib; TICount: Integer); virtual;
+    Procedure DoImportTypelib;virtual;
+    // For the benefit of descendents;
+    Property UsesClause : TStrings read FUses;
+    Property Header : TStrings read FHeader;
+    Property InterfaceSection : TStrings Read FInterface;
+    Property ImplementationSection : TStrings Read FImplementation;
+  Public
+    Constructor Create(AOwner : TComponent); override;
+    Destructor Destroy; override;
+    Procedure Execute;
+    Property Dependencies : TStrings Read GetDependencies;
+    Property UnitSource : TStrings Read GetUnitSource;
+  Published
+    // Create ActiveXContainer descendant: default false
+    Property ActiveX : Boolean Read FActiveX write FActiveX Default False;
+    // Append version number to unit name.
+    Property AppendVersionNumber : Boolean Read FAppendVersionNumber Write FAppendVersionNumber Default True;
+    // File to read typelib from.
+    Property InputFileName : WideString Read FInputFileName Write FInputFileName;
+    // If set, unit source will be written to this file.
+    Property OutputFileName : String Read FOutputFileName Write SetOutputFileName;
+    // Set automatically by OutputFileName or by Execute
+    Property UnitName : string Read FUnitname Write SetUnitName;
+  end;
+
+
+implementation
+
+Resourcestring
+  SErrInvalidUnitName = 'Invalid unit name : %s';
+
+function ImportTypelib(FileName: WideString;var sUnitName:string;var slDependencies:TStringList;
+  bActiveX:boolean):string;
+var i:integer;
+begin
+  With TTypeLibImporter.Create(Nil) do
+    try
+      InputFileName:=FileName;
+      ActiveX:=bActiveX;
+      Execute;
+      Result:=UnitSource.Text;
+      sUnitname:=UnitName+'.pas';
+      if Assigned(slDependencies) then
+        begin  //add new dependencies
+        for i:=0 to Dependencies.Count-1 do
+          if slDependencies.IndexOf(Dependencies[i])=-1 then
+            slDependencies.Add(Dependencies[i]);
+        end;
+    finally
+      Free;
+    end;
+end;
+
+function TTypeLibImporter.VarTypeIsAutomatable(ParamType:integer): boolean;
+
+begin
+result:=ParamType in [vt_i1,vt_ui1,vt_i2,vt_ui2,vt_i4,vt_ui4,vt_uint,
+            vt_i8,VT_UI8,vt_bool,vt_r4,vt_r8,vt_cy,vt_date,
+            VT_BSTR,VT_VARIANT,VT_DISPATCH,VT_UNKNOWN,vt_hresult,VT_INT,
+            VT_LPWSTR,VT_LPSTR];
+end;
+
+function TTypeLibImporter.VarTypeToStr(ParamType:integer): string;
+
+begin
+  case ParamType of
+    vt_empty : Result := 'Empty';
+    vt_null : Result := 'Null';
+    vt_i2 : Result := 'Smallint';
+    vt_i4 : Result := 'Integer';
+    vt_r4 : Result := 'Single';
+    vt_r8 : Result := 'Double';
+    vt_cy : Result := 'Currency';
+    vt_date : Result := 'TDateTime';
+    vt_bstr : Result := 'WideString';
+    vt_dispatch  : Result := 'IDispatch';
+    vt_error : Result := 'SCODE';
+    vt_bool : Result := 'WordBool';
+    vt_variant : Result := 'Variant';
+    vt_unknown : Result := 'IUnknown';
+    vt_i1  : Result := 'ShortInt';
+    vt_ui1 : Result := 'Byte';
+    vt_ui2 : Result := 'Word';
+    vt_ui4  : Result := 'LongWord';
+    vt_i8 : Result := 'Int64';
+    VT_UI8: Result := 'QWord';
+    vt_clsid : Result := 'TGUID';
+    vt_void : Result := 'pointer';
+    vt_ptr : Result := 'Pointer';
+    vt_uint : Result := 'UInt';
+    vt_userdefined : Result := 'User defined';
+    vt_hresult : Result := 'HResult';
+    VT_INT:Result:='SYSINT';
+    VT_SAFEARRAY:Result:='PSafeArray';
+    VT_LPWSTR:Result:='PWideChar';
+    VT_LPSTR:Result:='PChar';
+  else
+    Result := 'Unknown (' + IntToStr(ParamType) + ')';
+  end;
+end;
+
+function TTypeLibImporter.ValidateID(id:string):boolean;
+
+const
+  RESERVEDCNT=111;
+  RESERVED:array[1..RESERVEDCNT] of string=
+  ('absolute','and','array','asm','begin','break','case','const',
+  'constructor','continue','destructor','div','do','downto','else','end',
+  'file','for','function','goto','if','implementation','in','inherited',
+  'inline','interface','label','mod','nil','not','object','of',
+  'on','operator','or','packed','procedure','program','record','reintroduce',
+  'repeat','self','set','shl','shr','string','then','to',
+  'type','unit','until','uses','var','while','with','xor',
+  'as','class','except','exports','finalization','finally','initialization',
+  'is','library','on','property','raise','threadvar','try',
+  'dispose','exit','false','new','true',
+  'abs','arctan','boolean','char','cos','dispose','eof','eoln',
+  'exp','false','input','integer','ln','maxint','new','odd',
+  'ord','output','pack','page','pred','read','readln','real',
+  'reset','rewrite','round','sin','sqr','sqrt','succ','text',
+  'true','trunc','write','writeln');
+
+var
+  sl:string;
+  i:integer;
+
+begin
+  sl:=lowercase(id);
+  result:=true;
+  for i:=1 to RESERVEDCNT do
+    if sl= RESERVED[i] then
+      begin
+      result:=false;
+      break;
+      end;
+end;
+
+
+function TTypeLibImporter.TypeToString(TI:ITypeInfo; TD:TYPEDESC):string;
+
+var
+  TIref: ITypeInfo;
+  TARef:LPTYPEATTR;
+  TLRef: ITypeLib;
+  LARef: lpTLIBATTR;
+  BstrName : WideString;
+  il:LongWord;
+  i,idims:integer;
+  sl,sRefSrc,sKey:string;
+  Handle:HKEY;
+  bWasPointer:boolean;
+begin
+  result:='';
+  bIsCustomAutomatable:=false;
+  bIsInterface:=false;
+  bIsExternalDecl:=false;
+  bIsUserDefined:=false;
+  if (TD.vt=vt_userdefined) or ((TD.vt=VT_PTR) and (TD.lptdesc^.vt=vt_userdefined)) then
+    begin
+    // interface references are dealt with now because they are pointers in fpc.
+    // Recursive algorithm makes it difficult to remove a single preceding 'P' from the result.
+    bIsUserDefined:=true;
+    bWasPointer:=(TD.vt=VT_PTR);
+    if bWasPointer then
+      TD:=TD.lptdesc^;
+    OleCheck(TI.GetRefTypeInfo(TD.hreftype,TIref));
+    OleCheck(TIRef.GetDocumentation(DISPID_UNKNOWN, @BstrName, nil, nil, nil));
+    result:=BstrName;
+    OleCheck(TIRef.GetTypeAttr(TARef));
+    bIsCustomAutomatable:=TARef^.typekind in [TKIND_DISPATCH,TKIND_INTERFACE,TKIND_ENUM];
+    if TARef^.typekind=TKIND_ALIAS then
+      begin
+      TypeToString(TIRef,TARef^.tdescAlias); //not interested in result, only bIsCustomAutomatable and bIsInterface
+      bIsCustomAutomatable:=bIsAutomatable;
+      end
+    else
+      bIsInterface:=TARef^.typekind in [TKIND_DISPATCH,TKIND_INTERFACE] ;
+    if bWasPointer and not bIsInterface then  // interfaces are pointers to interface in fpc
+      result:='P'+result;
+    OleCheck(TIRef.GetContainingTypeLib(TLRef,il));
+    OleCheck(TLRef.GetDocumentation(-1, @BstrName, nil, nil, nil));
+    OleCheck(TLRef.GetLibAttr(LARef));
+    if FAppendVersionNumber then
+      sl:=format('%s_%d_%d_TLB',[BstrName,LARef^.wMajorVerNum,LARef^.wMinorVerNum])
+    else
+      sl:=format('%s_TLB',[BstrName]);
+    if (LowerCase(BstrName)='stdole') then // don't include, uses pre-defined stdole2.pas if V2
+      begin
+      bIsExternalDecl:=true;
+      if lowercase(result)='guid' then
+        result:='TGUID';
+      if (LARef^.wMajorVerNum=2) and (FUses.IndexOf('stdole2')=-1) then
+        begin
+        AddToHeader('// Dependency: stdole v2 (stdole2.pas)');
+        FUses.Add('stdole2');
+        end;
+      end
+    else if (LowerCase(sl)<>LowerCase(UnitName)) and (FUses.IndexOf(sl)=-1) then
+      begin  // add dependency
+      // find source in registry key HKEY_CLASSES_ROOT\TypeLib\GUID\version\0\win32
+      bIsExternalDecl:=true;
+      il:=MAX_PATH;
+      SetLength(sRefSrc,il);
+      sKey:=format('\TypeLib\%s\%d.%d\0\win32',[GUIDToString(LARef^.GUID),LARef^.wMajorVerNum,LARef^.wMinorVerNum]);
+      if (RegOpenKeyEx(HKEY_CLASSES_ROOT,pchar(sKey),0,KEY_READ,Handle) = ERROR_SUCCESS) then
+        begin
+        if RegQueryValue(Handle,nil,@sRefSrc[1],@il) = ERROR_SUCCESS then
+          begin
+          SetLength(sRefSrc,il-1);  // includes null terminator
+          if not FDependencies.Find(sRefSrc,i) then
+            FDependencies.Add(sRefSrc);
+          end
+        else
+          sRefSrc:=GUIDToString(LARef^.GUID);
+        RegCloseKey(Handle);
+        end;
+      AddToHeader('// Dependency: %s v%d.%d (%s)',[BstrName,LARef^.wMajorVerNum,LARef^.wMinorVerNum,sRefSrc]);
+      FUses.Add(sl);
+      TLRef.ReleaseTLibAttr(LARef);
+      end;
+    TIRef.ReleaseTypeAttr(TARef);
+    end
+  else if TD.vt=VT_PTR then //pointer type
+    begin
+    TD:=TD.lptdesc^;
+    result:='P'+TypeToString(TI,TD);
+    bIsAutomatable:=(VarTypeIsAutomatable(TD.vt) {and (TD.vt<>VT_VARIANT)}) or bIsCustomAutomatable;
+    exit;
+    end
+  else if TD.vt=VT_CARRAY then //C type array
+    begin
+    // get array element type
+    sl:=TypeToString(TI,TD.lpadesc^.tdescElem);
+    // get dimensions
+    idims:=TD.lpadesc^.cDims;
+    result:='array[';
+    // get boundaries for every dimension
+    for i:=0 to idims-1 do
+      result:=result+IntToStr(TD.lpadesc^.rgbounds[i].lLbound)+'..'+IntToStr(TD.lpadesc^.rgbounds[i].cElements - TD.lpadesc^.rgbounds[i].lLbound -1)+',';
+    result[length(result)]:=']';
+    result:=result + ' of '+sl;
+    end
+  else
+    result:=VarTypeToStr(TD.vt);
+  bIsAutomatable:=VarTypeIsAutomatable(TD.vt) or bIsCustomAutomatable;
+end;
+
+function TTypeLibImporter.interfacedeclaration(iName,iDoc:string;TI:ITypeInfo;TA:LPTYPEATTR;
+  bIsDispatch,bCreateEvents:boolean):string;
+
+type
+  TPropertyDef=record
+    idispid:integer;
+    bput,bget:boolean;
+    iptype,igtype:integer;
+    name,
+    sptype,          // only used if iptype=igtype
+    sorgname,
+    sdoc,
+    sParam,
+    sDefault:string;
+  end;
+
+var
+  RTIT: HREFTYPE;
+  TIref: ITypeInfo;
+  BstrName,BstrNameRef,BstrDocString : WideString;
+  s,sl,sPropIntfc,sPropDispIntfc,sType,sConv,sFunc,sPar,sVarName,sMethodName,sPropParam,sPropParam2:string;
+  sEventSignatures,sEventFunctions,sEventProperties,sEventImplementations:string;
+  i,j,k:integer;
+  FD: lpFUNCDESC;
+  BL : array[0..99] of TBstr;
+  cnt:LongWord;
+  TD: TYPEDESC;
+  bPropHasParam,bIsFunction,bParamByRef:boolean;
+  VD: lpVARDESC;
+  aPropertyDefs:array of TPropertyDef;
+  Propertycnt,iType:integer;
+
+  function findProperty(ireqdispid:integer):integer;
+  var i:integer;
+  begin
+    for i:=0 to Propertycnt-1 do
+      if aPropertyDefs[i].idispid=ireqdispid then
+        begin
+        result:=i;
+        exit;
+        end;
+    result:=Propertycnt;
+    Propertycnt:=Propertycnt+1;
+    with aPropertyDefs[result] do
+      begin
+      idispid:=ireqdispid;
+      bput:=false;
+      bget:=false;
+      name:='';
+      iptype:=vt_empty;
+      igtype:=vt_empty;
+      sptype:='';
+      sorgname:='';
+      sdoc:='';
+      sParam:='';
+      sDefault:='';
+      end;
+  end;
+
+begin
+  Propertycnt:=0;
+  SetLength(aPropertyDefs,TA^.cFuncs+TA^.cVars);   // worst case, all functions getters or all setters
+  sEventSignatures:='';
+  sEventFunctions:='';
+  sEventProperties:='';
+  sEventImplementations:='';
+  if not bIsDispatch then
+    begin
+    // find base class
+    if TA^.cImplTypes>0 then
+      begin
+      OleCheck(TI.GetRefTypeOfImplType(0,RTIT));
+      OleCheck(TI.GetRefTypeInfo(RTIT,TIref));
+      OleCheck(TIRef.GetDocumentation(DISPID_UNKNOWN, @BstrNameRef, nil, nil, nil));
+      s:=format(#13#10'// %s : %s'#13#10#13#10' %s = interface(%s)'#13#10,[iname,iDoc,iname,BstrNameRef]);
+      end
+    else // no base class
+      begin
+      s:=format(#13#10'// %s : %s'#13#10#13#10' %s = interface'#13#10,[iname,iDoc,iname]);
+      end;
+    end
+  else
+    if (TA^.wTypeFlags and TYPEFLAG_FDUAL)=TYPEFLAG_FDUAL then
+      s:=format(#13#10'// %s : %s'#13#10#13#10' %sDisp = dispinterface'#13#10,[iname,iDoc,iname])
+    else
+      s:=format(#13#10'// %s : %s'#13#10#13#10' %s = dispinterface'#13#10,[iname,iDoc,iname]);
+  sPropIntfc:='';
+  sPropDispIntfc:='';
+  s:=s+format('   [''%s'']'#13#10,[GUIDToString(TA^.GUID)]);
+  for j:=0 to TA^.cFuncs-1 do
+    begin
+    OleCheck(TI.GetFuncDesc(j,FD));
+    OleCheck(TI.GetNames(FD^.memid,@BL,length(BL),cnt));
+    // skip IUnknown and IDispatch methods
+    sl:=lowercase(BL[0]);
+    if (sl='queryinterface') or (sl='addref') or (sl='release') then  //IUnknown
+      continue;
+    if bIsDispatch and
+      ((sl='gettypeinfocount') or (sl='gettypeinfo') or (sl='getidsofnames') or (sl='invoke')) then  //IDispatch
+      continue;
+    // get return type
+    if bIsDispatch and ((FD^.invkind=INVOKE_PROPERTYGET) or (FD^.invkind=INVOKE_FUNC)) then
+      begin
+      sType:=TypeToString(TI,FD^.elemdescFunc.tdesc);
+      iType:=FD^.elemdescFunc.tdesc.vt;
+      end
+    else
+      if FD^.cParams>0 then
+        begin
+        sType:=TypeToString(TI,FD^.lprgelemdescParam[FD^.cParams-1].tdesc);
+        iType:=FD^.lprgelemdescParam[FD^.cParams-1].tdesc.vt;
+        if ((FD^.lprgelemdescParam[FD^.cParams-1].paramdesc.wParamFlags and (PARAMFLAG_FRETVAL or PARAMFLAG_FOUT)) <>0) then
+          begin
+          delete(sType,1,1); //out parameters are always defined as pointer
+          if assigned(FD^.lprgelemdescParam[FD^.cParams-1].tdesc.lptdesc) then
+            iType:=FD^.lprgelemdescParam[FD^.cParams-1].tdesc.lptdesc^.vt;
+          end;
+        end;
+    //get calling convention
+    if FD^.callconv=CC_STDCALL then
+      begin
+      if lowercase(BstrNameRef)='iunknown' then
+        sConv:='stdcall'
+      else
+        sConv:='safecall';
+      end
+    else
+      sConv:='cdecl';
+    // get info
+    OleCheck(TI.GetDocumentation(FD^.memid, @BstrName, @BstrDocString, nil, nil));
+    case FD^.invkind of
+      // build function/procedure
+      INVOKE_FUNC :
+        begin
+        if ValidateID(BstrName) then
+          sMethodName:=BstrName
+        else
+          begin
+          sMethodName:=BstrName+'_';
+          AddToHeader('//  Warning: renamed method ''%s'' in %s to ''%s''',[BstrName,iname,sMethodName],True);
+          end;
+        bIsFunction:=(bIsDispatch and (FD^.elemdescFunc.tdesc.vt<>VT_VOID)) or
+          (not bIsDispatch and (FD^.cParams>0) and ((FD^.lprgelemdescParam[FD^.cParams-1].paramdesc.wParamFlags and PARAMFLAG_FRETVAL ) <>0));
+        if bIsFunction then
+          sFunc:=format('    // %s : %s '#13#10'   function %s(',[sMethodName,BstrDocString,sMethodName])
+        else
+          sFunc:=format('    // %s : %s '#13#10'   procedure %s(',[sMethodName,BstrDocString,sMethodName]);
+        if bIsFunction and bIsDispatch and not bIsAutomatable then
+          begin
+          AddToHeader('//  Warning: ''%s'' not automatable in %sdisp.%s',[stype,iname,BstrName],True);
+          sType:='{!! '+sType+' !!} OleVariant';
+          end;
+        if bCreateEvents then
+          begin
+          sEventSignatures:=sEventSignatures+format('  T%s%s = procedure(Sender: TObject;',[iname,sMethodName]);
+          sEventFunctions:=sEventFunctions+format('    FOn%s:T%s%s;'#13#10,[sMethodName,iname,sMethodName]);
+          sEventProperties:=sEventProperties+format('    property On%s : T%s%s read FOn%s write FOn%s;'#13#10,
+            [sMethodName,iname,sMethodName,sMethodName,sMethodName]);
+          sEventImplementations:=sEventImplementations+
+            format('    %d: if assigned(On%s) then'#13#10+
+                   '          On%s(Self,',[FD^.memid,sMethodName,sMethodName]);
+          end;
+        // parameters
+        for k:=0 to FD^.cParams-1 do
+          begin
+          bParamByRef:=(FD^.lprgelemdescParam[k].tdesc.vt=VT_PTR) and                         // by ref
+            not((FD^.lprgelemdescParam[k].tdesc.lptdesc^.vt=VT_USERDEFINED) and bIsInterface);// but not pointer to interface
+          if (FD^.lprgelemdescParam[k].paramdesc.wParamFlags and PARAMFLAG_FRETVAL ) <>0 then  //return type
+            continue;
+          sl:=TypeToString(TI,FD^.lprgelemdescParam[k].tdesc);
+          if bParamByRef then
+             delete(sl,1,1);
+          if bIsDispatch and not bIsAutomatable then
+            begin
+            AddToHeader('//  Warning: ''%s'' not automatable in %sdisp.%s',[sl,iname,sMethodName],True);
+            sl:='{!! '+sl+' !!} OleVariant';
+            end;
+          sPar:='';
+          if bParamByRef then
+            case FD^.lprgelemdescParam[k].paramdesc.wParamFlags and (PARAMFLAG_FIN or PARAMFLAG_FOUT) of
+            PARAMFLAG_FIN or PARAMFLAG_FOUT:sPar:='var ';
+            PARAMFLAG_FOUT:sPar:='out ';
+            PARAMFLAG_FIN:sPar:='var '; //constref in safecall? TBD
+            end;
+          if ValidateID(BL[k+1]) then
+            sVarName:=BL[k+1]
+          else
+            begin
+            sVarName:=BL[k+1]+'_';
+            AddToHeader('//  Warning: renamed parameter ''%s'' in %s.%s to ''%s'''#13#10,[BL[k+1],iname,sMethodName,sVarName],True);
+            end;
+          sPar:=sPar+format('%s:%s;',[sVarName,sl]);
+          sFunc:=sFunc+sPar;
+          if bCreateEvents then
+            begin
+            sEventSignatures:=sEventSignatures+sPar;
+            //params are numbered last to first
+            if bParamByRef and not(bIsDispatch and not bIsAutomatable) then
+              begin
+              case FD^.lprgelemdescParam[k].tdesc.lptdesc^.vt of
+                VT_UI1:       sl:='pbVal';
+                VT_UI2:       sl:='puiVal';
+                VT_UI4:       sl:='pulVal';
+                VT_UI8:       sl:='pullVal';
+                VT_I1:        sl:='pcVal';
+                VT_I2:        sl:='piVal';
+                VT_I4:        sl:='plVal';
+                VT_I8:        sl:='pllVal';
+                VT_R4:        sl:='pfltVal';
+                VT_R8:        sl:='pdblVal';
+                VT_BOOL:      sl:='pbool';
+                VT_ERROR:     sl:='pscode';
+                VT_CY:        sl:='pcyVal';
+                VT_DATE:      sl:='pdate';
+                VT_BSTR:      sl:='pbstrVal';
+                VT_UNKNOWN:   sl:='punkVal';
+                VT_DISPATCH:  sl:='pdispVal';
+                VT_ARRAY:     sl:='pparray';
+                VT_VARIANT:   sl:='pvarVal';
+              end;
+              sEventImplementations:=sEventImplementations+format(' Params.rgvarg[%d].%s^,',[FD^.cParams-1-k,sl]);
+              end
+            else
+              sEventImplementations:=sEventImplementations+format(' OleVariant(Params.rgvarg[%d]),',[FD^.cParams-1-k]);
+            end;
+          end;
+        // finish interface and dispinterface
+        if sFunc[length(sFunc)]=';' then
+          sFunc[length(sFunc)]:=')'
+        else  // no params
+          delete(sFunc,length(sFunc),1);
+        if bCreateEvents then
+          begin
+          sEventSignatures[length(sEventSignatures)]:=')';
+          sEventSignatures:=sEventSignatures+' of object;'#13#10;
+          sEventImplementations[length(sEventImplementations)]:=')';
+          sEventImplementations:=sEventImplementations+';'#13#10;
+          end;
+        if bIsFunction then
+          sFunc:=sFunc+format(':%s',[sType]);
+        if bIsDispatch then
+          s:=s+sFunc+format(';dispid %d;'#13#10,[FD^.memid])
+        else
+          s:=s+sFunc+format(';%s;'#13#10,[sConv]);
+        end;
+      INVOKE_PROPERTYGET,INVOKE_PROPERTYPUT,INVOKE_PROPERTYPUTREF :
+        // build properties. Use separate string to group properties at end of interface declaration.
+        begin
+        if ValidateID(BstrName) then
+          sMethodName:=BstrName
+        else
+          begin
+          sMethodName:=BstrName+'_';
+          AddToHeader('//  Warning: renamed property ''%s'' in %s to ''%s''',[BstrName,iname,sMethodName]);
+          end;
+        bPropHasParam:=(((FD^.invkind=INVOKE_PROPERTYGET) and (FD^.cParams>0)) or (FD^.cParams>1))
+            and ((FD^.lprgelemdescParam[0].paramdesc.wParamFlags and PARAMFLAG_FIN) = PARAMFLAG_FIN) ;
+        if (FD^.memid=0) and  bPropHasParam then sl:=' default;' else sl:='';
+        sPropParam:='';
+        sPropParam2:='';
+        if bPropHasParam then
+          begin
+          sPropParam:=BL[1]+':'+TypeToString(TI,FD^.lprgelemdescParam[0].tdesc);
+          end;
+        if bIsDispatch then
+          begin
+          if (TD.vt<>VT_VOID) and not bIsAutomatable then
+            begin
+            AddToHeader('//  Warning: ''%s'' not automatable in %s.%s',[stype,iname,BstrName]);
+            sType:='{!! '+sType+' !!} OleVariant';
+            end;
+          if bPropHasParam then
+            sPropParam:='['+sPropParam+']';
+          i:=pos(format('dispid %d;',[FD^.memid]),sPropDispIntfc);
+          if i<=0 then
+            begin
+            if FD^.invkind=INVOKE_PROPERTYGET then
+              sType:=sType+' readonly '
+            else
+              sType:=sType+' writeonly';
+            sPropDispIntfc:=sPropDispIntfc+format('    // %s : %s '#13#10'   property %s%s:%s dispid %d;%s'#13#10,
+              [BstrName,BstrDocString,sMethodName,sPropParam,sType,FD^.memid,sl]);
+            end
+          else //remove readonly or writeonly
+            delete(sPropDispIntfc,i-11,10);   //10= length(' readonly ')
+          end
+        else
+          begin
+          //getters/setters for interface, insert in interface as they come,
+          //store in aPropertyDefs to create properties at the end
+          if bPropHasParam then
+            begin
+            sPropParam2:='('+sPropParam+')';
+            sPropParam:='['+sPropParam+']';
+            end;
+          if FD^.invkind=INVOKE_PROPERTYGET then
+            begin
+            s:=s+format('   function Get_%s%s : %s; %s;'#13#10,[sMethodName,sPropParam2,sType,sConv]);
+            with aPropertyDefs[findProperty(FD^.memid)] do
+              begin
+              bget:=true;
+              name:=sMethodName;
+              igtype:=itype;
+              sptype:=sType;
+              sorgname:=BstrName;
+              sdoc:=BstrDocString;
+              sParam:=sPropParam;
+              sDefault:=sl;
+              end;
+            end
+          else
+            begin
+            if ValidateID(BL[1]) then
+              sVarName:=BL[1]
+            else
+              begin
+              sVarName:=BL[1]+'_';
+              AddToHeader('//  Warning: renamed parameter ''%s'' in %s.Set_%s to ''%s''',[BL[1],iname,sMethodName,sVarName]);
+              end;
+            s:=s+format('   procedure Set_%s(const %s:%s); %s;'#13#10,[sMethodName,sVarName,sType,sConv]);
+            with aPropertyDefs[findProperty(FD^.memid)] do
+              begin
+              bput:=true;
+              name:=sMethodName;
+              iptype:=itype;
+              sptype:=sType;
+              sorgname:=BstrName;
+              sdoc:=BstrDocString;
+              sParam:=sPropParam;
+              sDefault:=sl;
+              end;
+            end;
+          end;
+        end;
+    end;
+    TI.ReleaseFuncDesc(FD);
+    end;
+  for j:=0 to TA^.cVars-1 do
+    begin  //read-write properties only
+    if bIsDispatch then
+      begin
+      TI.GetVarDesc(j,VD);
+      if assigned(VD) then
+        begin
+        TI.GetDocumentation(VD^.memId,@BstrName, @BstrDocString, nil, nil);
+        if ValidateID(BstrName) then
+          sMethodName:=BstrName
+        else
+          begin
+          sMethodName:=BstrName+'_';
+          AddToHeader('//  Warning: renamed property ''%s'' in %s to ''%s'''#13#10,[BstrName,iname,sMethodName]);
+          end;
+        sType:=TypeToString(TI,VD^.ElemdescVar.tdesc);
+        sPropDispIntfc:=sPropDispIntfc+format('    // %s : %s '#13#10'   property %s:%s  dispid %d;'#13#10,
+          [BstrName,BstrDocString,sMethodName,sType,VD^.memId]);
+        end;
+      end;
+    end;
+  if bCreateEvents then
+    begin
+    FEventDisp.Add(iname);
+    FEventIID.Add(GUIDToString(TA^.GUID));
+    FEventSignatures.Add(sEventSignatures);
+    FEventFunctions.Add(sEventFunctions);
+    FEventProperties.Add(sEventProperties);
+    FEventImplementations.Add(sEventImplementations);
+    end;
+  if bIsDispatch then
+    result:=s + sPropDispIntfc +'  end;'#13#10
+  else
+    begin
+    // add interface properties
+    for i:=0 to Propertycnt-1 do
+      with aPropertyDefs[i] do
+      if (iptype=igtype) or not bget or not bput then
+        begin
+        s:=s+format('    // %s : %s '#13#10'   property %s%s:%s',[sorgname,sdoc,name,sParam,sptype]);
+        if bget then
+          s:=s+format(' read Get_%s',[name]);
+        if bput then
+          s:=s+format(' write Set_%s',[name]);
+        s:=s+format(';%s'#13#10,[sDefault]);
+        end;
+    result:=s+'  end;'#13#10;
+    end;
+end;
+
+function TTypeLibImporter.GetDependencies: TStrings;
+begin
+  Result:=FDependencies;
+end;
+
+function TTypeLibImporter.GetUnitSource: TStrings;
+begin
+  Result:=FUnitSource;
+end;
+
+Procedure TTypeLibImporter.ImportGUIDs(Const TL : ITypeLib; TICount : Integer);
+
+Var
+  i : integer;
+  BstrName, BstrDocString, BstrHelpFile : WideString;
+  dwHelpContext: DWORD;
+  TI:ITypeInfo;
+  TA:LPTYPEATTR;
+  TIT: TYPEKIND;
+
+begin
+  //GUIDs
+  for i:=0 to TIcount-1 do
+    begin
+    OleCheck(TL.GetTypeInfoType(i, TIT));
+    OleCheck(TL.GetTypeInfo(i, TI));
+    OleCheck(TL.GetDocumentation(i, @BstrName, @BstrDocString, @dwHelpContext, @BstrHelpFile));
+    OleCheck(TI.GetTypeAttr(TA));
+    case TIT of
+      TKIND_DISPATCH,TKIND_INTERFACE:
+        begin
+        AddToInterface('  IID_%s : TGUID = ''%s'';',[BstrName,GUIDToString(TA^.GUID)]);
+        end;
+      TKIND_COCLASS:
+        begin
+        AddToInterface('  CLASS_%s : TGUID = ''%s'';',[BstrName,GUIDToString(TA^.GUID)]);
+        end;
+      end;
+    TI.ReleaseTypeAttr(TA);
+    end;
+end;
+
+Procedure TTypeLibImporter.ImportEnums(Const TL : ITypeLib; TICount : Integer);
+
+Var
+  i,j : integer;
+  sl : string;
+  BstrName, BstrDocString, BstrHelpFile : WideString;
+  dwHelpContext: DWORD;
+  TI:ITypeInfo;
+  TA:LPTYPEATTR;
+  TIT: TYPEKIND;
+  bDuplicate:boolean;
+  VD: lpVARDESC;
+
+begin
+  //enums
+  AddToInterface('');
+  AddToInterface('//Enums');
+  AddToInterface('');
+  for i:=0 to TIcount-1 do
+    begin
+    OleCheck(TL.GetTypeInfoType(i, TIT));
+    OleCheck(TL.GetTypeInfo(i, TI));
+    OleCheck(TL.GetDocumentation(i, @BstrName, @BstrDocString, @dwHelpContext, @BstrHelpFile));
+    OleCheck(TI.GetTypeAttr(TA));
+    if TIT=TKIND_ENUM then
+      begin
+      bDuplicate:=false;
+      if ValidateID(BstrName) then
+        sl:=BstrName
+      else
+        begin
+        sl:=BstrName+'_';
+        AddToHeader('//  Warning: renamed enum type ''%s'' to ''%s''',[BstrName,sl],True);
+        end;
+      if (InterfaceSection.IndexOf(Format('  %s =TOleEnum;',[sl]))<>-1) then  // duplicate enums fe. AXVCL.dll 1.0
+        begin
+        sl:=sl+IntToStr(i); // index is unique in this typelib
+        AddToHeader('//  Warning: duplicate enum ''%s''. Renamed to ''%s''. consts appended with %d',[BstrName,sl,i]);
+        bDuplicate:=true;
+        end;
+      AddToInterface('Type');
+      AddToInterface('  %s =TOleEnum;',[sl]);
+      FTypes.Add(sl);
+      AddToInterface('Const');
+      for j:=0 to TA^.cVars-1 do
+        begin
+        TI.GetVarDesc(j,VD);
+        if assigned(VD) then
+          begin
+          TI.GetDocumentation(VD^.memId,@BstrName, nil, nil, nil);
+          if ValidateID(BstrName) then
+            sl:=BstrName
+          else
+            begin
+            sl:=BstrName+'_';
+            AddToHeader('//  Warning: renamed enum value ''%s'' to ''%s''',[BstrName,sl],True);
+            end;
+          if bDuplicate then
+            sl:=sl+IntToStr(i);
+          if assigned(VD^.lpvarValue) then
+            AddToInterface('  %s = $%s;',[sl,IntToHex(PtrInt(VD^.lpvarValue^),16)]);
+          end;
+        end;
+      end;
+    TI.ReleaseTypeAttr(TA);
+    end;
+end;
+
+Procedure TTypeLibImporter.CreateForwards(Const TL : ITypeLib; TICount : Integer);
+
+Var
+  i : integer;
+  BstrName, BstrDocString, BstrHelpFile : WideString;
+  dwHelpContext: DWORD;
+  TI:ITypeInfo;
+  TA:LPTYPEATTR;
+  TIT: TYPEKIND;
+
+begin
+  // Forward declarations
+  AddToInterface('//Forward declarations');
+  AddToInterface('');
+  AddToInterface('Type');
+  for i:=0 to TIcount-1 do
+    begin
+    OleCheck(TL.GetTypeInfoType(i, TIT));
+    OleCheck(TL.GetTypeInfo(i, TI));
+    OleCheck(TL.GetDocumentation(i, @BstrName, @BstrDocString, @dwHelpContext, @BstrHelpFile));
+    OleCheck(TI.GetTypeAttr(TA));
+    if (TIT=TKIND_DISPATCH) then
+      begin
+      if (TA^.wTypeFlags and TYPEFLAG_FDUAL)=TYPEFLAG_FDUAL then
+        begin
+        AddToInterface(' %s = interface;',[BstrName]);
+        AddToInterFace(' %sDisp = dispinterface;',[BstrName]);
+        end
+      else
+        AddToInterface(' %s = dispinterface;',[BstrName]);
+      end
+    else if (TIT=TKIND_INTERFACE) then
+      AddToInterface(' %s = interface;',[BstrName]);
+    TI.ReleaseTypeAttr(TA);
+    end;
+end;
+
+Procedure TTypeLibImporter.CreateRecordsUnionsAliases(Const TL : ITypeLib; TICount : Integer);
+
+Var
+  i,j : integer;
+  BstrName, BstrDocString, BstrHelpFile : WideString;
+  dwHelpContext: DWORD;
+  TI:ITypeInfo;
+  TA:LPTYPEATTR;
+  TIT: TYPEKIND;
+  VD: lpVARDESC;
+  slDeferredType,slDeferredPendingType,slDeferredDeclaration:TStrings;
+  sl,sldeclaration,stype,smembername,srecordname:string;
+  bIsDeferred:boolean;
+
+  procedure ReleasePendingType(sPen:string);
+  var k:integer;
+    sDec,sTyp:string;
+  begin
+    k:=slDeferredPendingType.IndexOf(sPen);
+    while (k>=0) do
+      begin
+      sDec:=slDeferredDeclaration[k];
+      sTyp:=slDeferredType[k];
+      slDeferredPendingType.Delete(k);
+      slDeferredDeclaration.Delete(k);
+      slDeferredType.Delete(k);
+      // any other types pending for this declaration ? If yes, wait until all types declared.
+      if slDeferredDeclaration.IndexOf(sDec)=-1 then
+        begin
+        AddToInterface(sDec);
+        FTypes.Add(sTyp);
+        ReleasePendingType(sTyp);
+        end;
+      k:=slDeferredPendingType.IndexOf(sPen);
+      end;
+  end;
+
+begin
+  //records, unions aliases
+  AddToInterface('');
+  AddToInterface('//records, unions, aliases');
+  AddToInterface('');
+  slDeferredType:=TStringList.Create;
+  slDeferredPendingType:=TStringList.Create;
+  slDeferredDeclaration:=TStringList.Create;
+  try
+  for i:=0 to TIcount-1 do
+    begin
+    bIsDeferred:=false;
+    sldeclaration:='';
+    OleCheck(TL.GetTypeInfoType(i, TIT));
+    //s:=s+format('type %d'#13#10,[ord(TIT)]);
+    OleCheck(TL.GetTypeInfo(i, TI));
+    OleCheck(TL.GetDocumentation(i, @BstrName, @BstrDocString, @dwHelpContext, @BstrHelpFile));
+    OleCheck(TI.GetTypeAttr(TA));
+    case TIT of
+      TKIND_RECORD,TKIND_UNION:
+        begin
+        if ValidateID(BstrName) then
+          sRecordName:=BstrName
+        else
+          begin
+          sRecordName:=BstrName+'_';
+          AddToHeader('//  Warning: renamed record ''%s'' to ''%s''',[BstrName,sRecordName],True);
+          end;
+        AddToInterface(' P%s = ^%s;'#13#10,[sRecordName,sRecordName]);
+        FTypes.Add('P'+sRecordName);
+        ReleasePendingType('P'+sRecordName);
+        if TIT=TKIND_RECORD then
+          sldeclaration:=sldeclaration+format(' %s = packed record'#13#10,[sRecordName])
+        else
+          begin
+          sldeclaration:=sldeclaration+format(' %s =  record'#13#10,[sRecordName]);
+          sldeclaration:=sldeclaration+'    case Integer of'#13#10;
+          end;
+        for j:=0 to TA^.cVars-1 do
+          begin
+          TI.GetVarDesc(j,VD);
+          TI.GetDocumentation(VD^.memId,@BstrName, @BstrDocString, @dwHelpContext, @BstrHelpFile);
+          if ValidateID(BstrName) then
+            smemberName:=BstrName
+          else
+            begin
+            smemberName:=BstrName+'_';
+            AddToHeader('//  Warning: renamed record member ''%s'' in %s to ''%s''',[BstrName,sRecordName,smemberName],True);
+            end;
+          stype:=TypeToString(TI, VD^.ElemdescVar.tdesc);
+          if bIsUserDefined and not ValidateID(stype) then
+            stype:=stype+'_';
+          if bIsUserDefined and not bIsExternalDecl and (FTypes.IndexOf(stype)=-1) then //not defined yet, defer
+            begin
+            bIsDeferred:=true;
+            slDeferredPendingType.Add(stype);
+            slDeferredType.Add(sRecordName);
+            end;
+          if TIT=TKIND_RECORD then
+            sldeclaration:=sldeclaration+format('     %s : %s;'#13#10,[smemberName,stype])
+          else
+            sldeclaration:=sldeclaration+format('     %d: (%s : %s);'#13#10,[j,smemberName,stype]);
+          end;
+        sldeclaration:=sldeclaration+' end;';
+        if not bIsDeferred then
+          begin
+          AddToInterface(sldeclaration);
+          FTypes.Add(sRecordName);
+          ReleasePendingType(sRecordName);
+          end
+        else
+          for j:=slDeferredDeclaration.Count to slDeferredType.Count-1 do  // catch up on slDeferredType
+            slDeferredDeclaration.Add(sldeclaration);
+        end;
+      TKIND_ALIAS:
+        begin
+        stype:=TypeToString(TI, TA^.tdescAlias);
+        if bIsUserDefined and not ValidateID(stype) then
+          stype:=stype+'_';
+        if ValidateID(BstrName) then
+          sRecordName:=BstrName
+        else
+          begin
+          sRecordName:=BstrName+'_';
+          AddToHeader('//  Warning: renamed alias ''%s'' to ''%s''',[BstrName,sRecordName],True);
+          end;
+        sl:=format(' %s = %s;',[sRecordName,stype]);
+        if bIsUserDefined and not bIsExternalDecl and (FTypes.IndexOf(stype)=-1) then //not defined yet, defer
+          begin
+          slDeferredDeclaration.Add(sl);
+          slDeferredPendingType.Add(stype);
+          slDeferredType.Add(sRecordName);
+          end
+        else
+          begin
+          AddToInterface(sl);
+          FTypes.Add(sRecordName);
+          ReleasePendingType(sRecordName);
+          end;
+        end;
+      end;
+    TI.ReleaseTypeAttr(TA);
+    end;
+  if slDeferredDeclaration.Count>1 then  // circular references
+    begin
+    AddToHeader('//  Error : the following type declarations have circular references',True);
+    AddToInterface('// circular references start here');
+    for j:=0 to slDeferredDeclaration.Count-1 do
+      AddToHeader('//          %s',[slDeferredType[j]]);
+    for j:=0 to slDeferredDeclaration.Count-1 do
+      AddToInterface(slDeferredDeclaration[j]);
+    end;
+  finally
+    slDeferredDeclaration.Free;
+    slDeferredPendingType.Free;
+    slDeferredType.Free;
+  end;
+end;
+
+Procedure TTypeLibImporter.CreateInterfaces(Const TL : ITypeLib; TICount : Integer);
+
+Var
+  i : integer;
+  BstrName, BstrDocString, BstrHelpFile : WideString;
+  dwHelpContext : DWORD;
+  TI,TIref : ITypeInfo;
+  TA,TAref : LPTYPEATTR;
+  TIT : TYPEKIND;
+  RTIT : HREFTYPE;
+begin
+  // interface declarations
+  AddToInterface('//interface declarations');
+  for i:=0 to TIcount-1 do
+    begin
+    OleCheck(TL.GetTypeInfoType(i, TIT));
+    OleCheck(TL.GetTypeInfo(i, TI));
+    OleCheck(TL.GetDocumentation(i, @BstrName, @BstrDocString, @dwHelpContext, @BstrHelpFile));
+    if (TIT=TKIND_DISPATCH) or (TIT=TKIND_INTERFACE) then
+      begin
+      OleCheck(TI.GetTypeAttr(TA));
+      if (TIT=TKIND_DISPATCH) then
+        begin
+        // get also TKIND_INTERFACE if dual interface
+        if (TA^.wTypeFlags and TYPEFLAG_FDUAL)=TYPEFLAG_FDUAL then
+          begin
+          OleCheck(TI.GetRefTypeOfImplType(-1,RTIT));
+          OleCheck(TI.GetRefTypeInfo(RTIT,TIref));
+          OleCheck(TIref.GetTypeAttr(TAref));
+          AddToInterface(interfacedeclaration(BstrName,BstrDocString,TIref,TAref,false,false));
+          TIref.ReleaseTypeAttr(TAref);
+          AddToInterface(interfacedeclaration(BstrName,BstrDocString,TI,TA,true,false));
+          end
+        else
+          AddToInterface(interfacedeclaration(BstrName,BstrDocString,TI,TA,true,true));
+        end
+      else
+        AddToInterface(interfacedeclaration(BstrName,BstrDocString,TI,TA,false,false));
+      TI.ReleaseTypeAttr(TA);
+      end;
+    end;
+end;
+
+Procedure TTypeLibImporter.CreateCoClasses(Const TL : ITypeLib; TICount : Integer);
+
+Var
+  i, j ,idx: integer;
+  BstrName, BstrDocString, BstrHelpFile, BstrNameRef : WideString;
+  dwHelpContext : DWORD;
+  TI,TIref : ITypeInfo;
+  TA : LPTYPEATTR;
+  TIT : TYPEKIND;
+  RTIT : HREFTYPE;
+  sDefIntf, sDefEvents : string;
+  ITF:WINT;
+begin
+  //CoClasses
+  AddToInterface('//CoClasses');
+  AddToImplementation('implementation');
+  AddToImplementation('');
+  AddToImplementation('uses comobj;');
+  AddToImplementation('');
+  for i:=0 to TIcount-1 do
+    begin
+    OleCheck(TL.GetTypeInfoType(i, TIT));
+    if TIT =TKIND_COCLASS then
+      begin
+      OleCheck(TL.GetTypeInfo(i, TI));
+      OleCheck(TL.GetDocumentation(i, @BstrName, @BstrDocString, @dwHelpContext, @BstrHelpFile));
+      OleCheck(TI.GetTypeAttr(TA));
+      // get default interface and events.
+      sDefEvents:='';
+      for j:=0 to TA^.cImplTypes-1 do
+        begin
+        OleCheck(TI.GetImplTypeFlags(J,ITF));
+        if (ITF and IMPLTYPEFLAG_FDEFAULT)<>0 then
+          begin
+          OleCheck(TI.GetRefTypeOfImplType(J,RTIT));
+          OleCheck(TI.GetRefTypeInfo(RTIT,TIref));
+          OleCheck(TIRef.GetDocumentation(DISPID_UNKNOWN, @BstrNameRef, nil, nil, nil));
+          if (ITF and IMPLTYPEFLAG_FSOURCE)<>0 then
+            begin
+            sDefEvents:=BstrNameRef;
+            idx:=FEventDisp.IndexOf(sDefEvents);
+            if idx<0 then // should not happen
+              sDefEvents:='';
+            end
+          else
+            sDefIntf:=BstrNameRef;
+          end;
+        end;
+      if sDefEvents<>'' then //add event signatures
+        begin
+        AddToInterface(FEventSignatures[idx]);
+        FEventSignatures[idx]:='';  // only add event signatures only once. Multiple coclasses can use same events
+        AddToInterface('');
+        end;
+      AddToInterFace('  Co%s = Class',[BstrName]);
+      AddToInterface('  Public');
+      AddToInterface('    Class Function Create: %s;',[sDefIntf]);
+      AddToInterFace('    Class Function CreateRemote(const MachineName: string): %s;',[sDefIntf]);
+      AddToInterFace('  end;');
+      AddToInterFace('');
+      if FActiveX then
+        begin
+        if FUses.IndexOf('ActiveXContainer')<0 then
+          FUses.Add('ActiveXContainer');
+        AddToInterFace('  T%s = Class(TActiveXContainer)',[BstrName]);
+        AddToInterface('  Private');
+        AddToInterface('    FServer:%s;',[sDefIntf]);
+        if (sDefEvents<>'') then //add function variables
+          begin
+          if FUses.IndexOf('Eventsink')<0 then
+            FUses.Add('EventSink');
+          AddToInterface(FEventFunctions[idx]);
+          AddToInterface('    FEventSink:TEventSink;',[sDefIntf]);
+          AddToInterface('    procedure EventSinkInvoke(Sender: TObject; DispID: Integer;');
+          AddToInterface('          const IID: TGUID; LocaleID: Integer; Flags: Word;');
+          AddToInterface('          Params: tagDISPPARAMS; VarResult, ExcepInfo, ArgErr: Pointer);');
+          end;
+        AddToInterface('  Public');
+        AddToInterface('    constructor Create(TheOwner: TComponent); override;');
+        AddToInterface('    destructor Destroy; override;');
+        AddToInterface('    property OleServer:%s read FServer;',[sDefIntf]);
+        AddToInterFace('  Published');
+        AddToInterFace('    property Align;');
+        AddToInterFace('    property Anchors;');
+        AddToInterFace('    property AutoSize;');
+        AddToInterFace('    property BorderSpacing;');
+        AddToInterFace('    property ChildSizing;');
+        AddToInterFace('    property ClientHeight;');
+        AddToInterFace('    property ClientWidth;');
+        AddToInterFace('    property Constraints;');
+        AddToInterFace('    property DockSite;');
+        AddToInterFace('    property DragCursor;');
+        AddToInterFace('    property DragKind;');
+        AddToInterFace('    property DragMode;');
+        AddToInterFace('    property Enabled;');
+        AddToInterFace('    property ParentShowHint;');
+        AddToInterFace('    property PopupMenu;');
+        AddToInterFace('    property ShowHint;');
+        AddToInterFace('    property TabOrder;');
+        AddToInterFace('    property TabStop;');
+        AddToInterFace('    property UseDockManager default True;');
+        AddToInterFace('    property Visible;');
+        AddToInterFace('    property OnContextPopup;');
+        AddToInterFace('    property OnDockDrop;');
+        AddToInterFace('    property OnDockOver;');
+        AddToInterFace('    property OnDragDrop;');
+        AddToInterFace('    property OnDragOver;');
+        AddToInterFace('    property OnEndDock;');
+        AddToInterFace('    property OnEndDrag;');
+        AddToInterFace('    property OnEnter;');
+        AddToInterFace('    property OnExit;');
+        AddToInterFace('    property OnGetSiteInfo;');
+        AddToInterFace('    property OnGetDockCaption;');
+        AddToInterFace('    property OnResize;');
+        AddToInterFace('    property OnStartDock;');
+        AddToInterFace('    property OnStartDrag;');
+        AddToInterFace('    property OnStatusText;');
+        AddToInterFace('    property OnUnDock;');
+        if (sDefEvents<>'') then
+          AddToInterface(FEventProperties[idx]);
+        AddToInterFace('    property Active;');
+        AddToInterFace('  end;');
+        AddToInterFace('');
+        end
+      else if (sDefEvents<>'') then //add function variables
+        begin
+        if FUses.IndexOf('Eventsink')<0 then
+          FUses.Add('EventSink');
+        AddToInterFace('  T%s = Class(TEventSink)',[BstrName]);
+        AddToInterface('  Private');
+        AddToInterface(FEventFunctions[idx]);
+        AddToInterface('    fServer:%s;',[sDefIntf]);
+        AddToInterface('    procedure EventSinkInvoke(Sender: TObject; DispID: Integer;');
+        AddToInterface('          const IID: TGUID; LocaleID: Integer; Flags: Word;');
+        AddToInterface('          Params: tagDISPPARAMS; VarResult, ExcepInfo, ArgErr: Pointer);');
+        AddToInterface('  Public');
+        AddToInterface('    constructor Create(TheOwner: TComponent); override;');
+        AddToInterface('    property ComServer:%s read fServer;',[sDefIntf]);
+        AddToInterface(FEventProperties[idx]);
+        AddToInterFace('  end;');
+        AddToInterFace('');
+        end;
+      AddToImplementation('Class Function Co%s.Create: %s;',[BstrName,sDefIntf]);
+      AddToImplementation('begin');
+      AddToImplementation('  Result := CreateComObject(CLASS_%s) as %s;',[BstrName,sDefIntf]);
+      AddToImplementation('end;');
+      AddToImplementation('');
+      AddToImplementation('Class Function Co%s.CreateRemote(const MachineName: string): %s;',[BstrName,sDefIntf]);
+      AddToImplementation('begin');
+      AddToImplementation('  Result := CreateRemoteComObject(MachineName,CLASS_%s) as %s;',[BstrName,sDefIntf]);
+      AddToImplementation('end;');
+      AddToImplementation('');
+      if FActiveX then
+        begin
+        AddToImplementation('constructor T%s.Create(TheOwner: TComponent);',[BstrName]);
+        AddToImplementation('begin');
+        AddToImplementation('  inherited Create(TheOwner);');
+        AddToImplementation('  FServer:=Co%s.Create;',[BstrName]);
+        AddToImplementation('  ComServer:=FServer;',[BstrName]);
+        if (sDefEvents<>'') then
+          begin
+          AddToImplementation('  FEventSink:=TEventSink.Create(Self);');
+          AddToImplementation('  FEventSink.OnInvoke:=EventSinkInvoke;');
+          AddToImplementation('  FEventSink.Connect(FServer,%s);',[FEventDisp[idx]]);
+          end;
+        AddToImplementation('end;');
+        AddToImplementation('');
+        AddToImplementation('destructor T%s.Destroy;',[BstrName]);
+        AddToImplementation('begin');
+        if (sDefEvents<>'') then
+          AddToImplementation('  FEventSink.Destroy;');
+        AddToImplementation('  inherited destroy;');
+        AddToImplementation('end;');
+        AddToImplementation('');
+        if (sDefEvents<>'') then
+          begin
+          AddToImplementation('procedure T%s.EventSinkInvoke(Sender: TObject; DispID: Integer;',[BstrName]);
+          AddToImplementation('  const IID: TGUID; LocaleID: Integer; Flags: Word; Params: tagDISPPARAMS;');
+          AddToImplementation('  VarResult, ExcepInfo, ArgErr: Pointer);');
+          AddToImplementation('begin');
+          AddToImplementation('  case DispID of');
+          AddToImplementation(FEventImplementations[idx]);
+          AddToImplementation('  end;');
+          AddToImplementation('end;');
+          AddToImplementation('');
+          end;
+        end
+      else if sDefEvents<>'' then //add event implementations
+        begin
+        AddToImplementation('constructor T%s.Create(TheOwner: TComponent);',[BstrName]);
+        AddToImplementation('begin');
+        AddToImplementation('  inherited Create(TheOwner);');
+        AddToImplementation('  OnInvoke:=EventSinkInvoke;');
+        AddToImplementation('  fServer:=Co%s.Create;',[BstrName]);
+        AddToImplementation('  Connect(fServer,%s);',[FEventDisp[idx]]);
+        AddToImplementation('end;');
+        AddToImplementation('');
+        AddToImplementation('procedure T%s.EventSinkInvoke(Sender: TObject; DispID: Integer;',[BstrName]);
+        AddToImplementation('  const IID: TGUID; LocaleID: Integer; Flags: Word; Params: tagDISPPARAMS;');
+        AddToImplementation('  VarResult, ExcepInfo, ArgErr: Pointer);');
+        AddToImplementation('begin');
+        AddToImplementation('  case DispID of');
+        AddToImplementation(FEventImplementations[idx]);
+        AddToImplementation('  end;');
+        AddToImplementation('end;');
+        AddToImplementation('');
+        end;
+      TI.ReleaseTypeAttr(TA);
+      end;
+    end;
+end;
+
+Procedure TTypeLibImporter.CreateUnitHeader(Const TL : ITypeLib; const LA: lpTLIBATTR);
+
+
+Var
+  BstrName, BstrDocString, BstrHelpFile : WideString;
+  dwHelpContext: DWORD;
+
+begin
+  OleCheck(TL.GetDocumentation(-1, @BstrName, @BstrDocString, @dwHelpContext, @BstrHelpFile));
+  if (UnitName='') then
+    if FAppendVersionNumber then
+      UnitName:=format('%s_%d_%d_TLB',[BstrName,LA^.wMajorVerNum,LA^.wMinorVerNum])
+    else
+      UnitName:=format('%s_TLB',[BstrName]);
+  //header
+  AddToHeader('Unit %s;',[UnitName],True);
+  AddToHeader('',true);
+  AddToHeader('//  Imported %s on %s from %s',[BstrName,DateTimeToStr(Now()),InputFilename],True);
+  AddToHeader('',true);
+  AddToHeader('{$mode delphi}{$H+}',true);
+  AddToHeader('',true);
+  AddToHeader('interface',true);
+  AddToHeader('',true);
+  FUses.Add('Windows');
+  FUses.Add('ActiveX');
+  FUses.Add('Classes');
+  //FUses.Add('OleServer');
+  FUses.Add('Variants');
+  AddToInterface('Const');
+  AddToInterface('  %sMajorVersion = %d;',[BstrName,LA^.wMajorVerNum]);
+  AddToInterface('  %sMinorVersion = %d;',[BstrName,LA^.wMinorVerNum]);
+  AddToInterface('  %sLCID = %x;',[BstrName,LA^.LCID]);
+  AddToInterface('  LIBID_%s : TGUID = ''%s'';',[BstrName,GUIDToString(LA^.GUID)]);
+  AddToInterface('');
+end;
+
+Procedure TTypeLibImporter.DoImportTypelib;
+
+var
+  TL: ITypelib;
+  TIcount:integer;
+  LA: lpTLIBATTR;
+
+begin
+  Header.Clear;
+  InterfaceSection.Clear;
+  OleCheck(LoadTypeLib(PWidechar(InputFileName), TL ));
+  OleCheck(TL.GetLibAttr(LA));
+  try
+    CreateUnitHeader(TL,LA);
+    TIcount:=TL.GetTypeInfoCount;
+    ImportGUIDs(TL,TICount);
+    ImportEnums(TL,TICount);
+    CreateForwards(TL,TICount);
+    CreateRecordsUnionsAliases(TL,TICount);
+    CreateInterFaces(TL,TICount);
+    CreateCoClasses(TL,TICount);
+  finally
+    TL.ReleaseTLibAttr(LA);
+  end;
+  BuildUnit;
+end;
+
+procedure TTypeLibImporter.BuildUnit;
+
+Var
+  l : string;
+  I : Integer;
+
+begin
+  UnitSource.AddStrings(Header);
+  UnitSource.Add('Uses');
+  L:='  ';
+  For I:=0 to FUses.Count-1 do
+    begin
+    L:=L+FUses[i];
+    If (I<Fuses.Count-1) then
+      L:=L+','
+    else
+      L:=L+';';
+    if (Length(L)>72) then
+      begin
+      UnitSource.Add(L);
+      L:='  ';
+      end;
+    end;
+  if (L<>'  ') then
+    UnitSource.Add(L);
+  UnitSource.addStrings(InterfaceSection);
+  UnitSource.addStrings(ImplementationSection);
+  UnitSource.Add('end.');
+end;
+
+{ TTypeLibImporter }
+
+procedure TTypeLibImporter.SetOutputFileName(AValue: String);
+
+Var
+  UN : String;
+
+begin
+  if FOutputFileName=AValue then Exit;
+  UN:=ChangeFileExt(ExtractFileName(AValue),'');
+  if not IsValidIdent(UN) then
+    Raise Exception.CreateFmt(SErrInvalidUnitName,[UN]);
+  FOutputFileName:=AValue;
+  SetUnitName(UN)
+end;
+
+procedure TTypeLibImporter.SetUnitName(AValue: string);
+begin
+  if FUnitname=AValue then Exit;
+  if not IsValidIdent(AVAlue) then
+    Raise Exception.CreateFmt(SErrInvalidUnitName,[AValue]);
+  FUnitname:=AValue;
+  if (OutputFileName<>'') then
+    OutputFileName:=ExtractFilePath(OutputFileName)+UnitName+'.pas';
+end;
+
+procedure TTypeLibImporter.AddToUses(const AUnit: String);
+begin
+  If FUses.IndexOf(AUnit)=-1 then
+    FUses.add(AUnit);
+end;
+
+procedure TTypeLibImporter.AddToHeader(const ALine: String;
+  AllowDuplicate: Boolean);
+
+begin
+  If (AllowDuplicate) or (FHeader.IndexOf(ALine)=-1) then
+    FHeader.Add(ALine);
+end;
+
+procedure TTypeLibImporter.AddToHeader(const Fmt: String; Args: array of const;
+  AllowDuplicate: Boolean);
+begin
+  AddToheader(Format(Fmt,Args),AllowDuplicate)
+end;
+
+procedure TTypeLibImporter.AddToInterface(const ALine: String);
+begin
+  FInterface.Add(ALine);
+end;
+
+procedure TTypeLibImporter.AddToInterface(const Fmt: String;
+  Args: array of const);
+begin
+  FInterface.Add(Format(Fmt,Args));
+end;
+
+procedure TTypeLibImporter.AddToImplementation(const ALine: String);
+begin
+  FImplementation.Add(ALine);
+end;
+
+procedure TTypeLibImporter.AddToImplementation(const Fmt: String;
+  Args: array of const);
+begin
+  FImplementation.Add(Format(Fmt,Args));
+end;
+
+constructor TTypeLibImporter.Create(AOwner: TComponent);
+begin
+  inherited Create(AOwner);
+  FDependencies:=TStringList.Create;
+  FUnitSource:=TStringList.Create;
+  FAppendVersionNumber:=true;
+end;
+
+destructor TTypeLibImporter.Destroy;
+begin
+  FreeAndNil(FDependencies);
+  FreeAndNil(FUnitSource);
+  inherited Destroy;
+end;
+
+procedure TTypeLibImporter.Execute;
+begin
+  FDependencies.Clear;
+  FUnitSource.Clear;
+  FHeader:=TStringList.Create;
+  FInterface:=TStringList.Create;
+  FImplementation:=TStringList.Create;
+  FUses:=TStringList.Create;
+  FTypes:=TStringList.Create;
+  FEventDisp:=TStringList.Create;
+  FEventIID:=TStringList.Create;
+  FEventSignatures:=TStringList.Create;
+  FEventFunctions:=TStringList.Create;
+  FEventProperties:=TStringList.Create;
+  FEventImplementations:=TStringList.Create;
+  try
+    DoImportTypeLib;
+    If (OutputFileName<>'') then
+      UnitSource.SaveToFile(OutputFileName);
+  finally
+    FreeAndNil(FEventImplementations);
+    FreeAndNil(FEventProperties);
+    FreeAndNil(FEventFunctions);
+    FreeAndNil(FEventSignatures);
+    FreeAndNil(FEventIID);
+    FreeAndNil(FEventDisp);
+    FreeAndNil(FTypes);
+    FreeAndNil(FUses);
+    FreeAndNil(FInterface);
+    FreeAndNil(FHeader);
+    FreeAndNil(FImplementation);
+  end;
+end;
+
+end.
+

+ 53 - 4
utils/Makefile

@@ -295,7 +295,7 @@ ifeq ($(FULL_TARGET),i386-go32v2)
 override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg  rmwait
 override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg  rmwait
 endif
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg  fpmc fpcres rmwait instantfpc
+override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg  fpmc fpcres rmwait instantfpc importtl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
 override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg  fpmc fpcres rmwait
 override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg  fpmc fpcres rmwait
@@ -340,7 +340,7 @@ ifeq ($(FULL_TARGET),i386-netwlibc)
 override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg
 override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wince)
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg  fpcres rmwait instantfpc
+override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg  fpcres rmwait instantfpc importtl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
 ifeq ($(FULL_TARGET),i386-embedded)
 override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg
 override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg
@@ -427,7 +427,7 @@ ifeq ($(FULL_TARGET),x86_64-darwin)
 override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg  fpcres fpcreslipo instantfpc
 override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg  fpcres fpcreslipo instantfpc
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg  fpmc fpcres rmwait instantfpc
+override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg  fpmc fpcres rmwait instantfpc importtl
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 ifeq ($(FULL_TARGET),x86_64-embedded)
 override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg
 override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg
@@ -442,7 +442,7 @@ ifeq ($(FULL_TARGET),arm-darwin)
 override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg  fpcres fpcreslipo instantfpc
 override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg  fpcres fpcreslipo instantfpc
 endif
 endif
 ifeq ($(FULL_TARGET),arm-wince)
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg  fpcres rmwait instantfpc
+override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg  fpcres rmwait instantfpc importtl
 endif
 endif
 ifeq ($(FULL_TARGET),arm-gba)
 ifeq ($(FULL_TARGET),arm-gba)
 override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg
 override TARGET_DIRS+=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg
@@ -2838,6 +2838,7 @@ TARGET_DIRS_FPMC=1
 TARGET_DIRS_FPCRES=1
 TARGET_DIRS_FPCRES=1
 TARGET_DIRS_RMWAIT=1
 TARGET_DIRS_RMWAIT=1
 TARGET_DIRS_INSTANTFPC=1
 TARGET_DIRS_INSTANTFPC=1
+TARGET_DIRS_IMPORTTL=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
 TARGET_DIRS_FPPKG=1
 TARGET_DIRS_FPPKG=1
@@ -3010,6 +3011,7 @@ TARGET_DIRS_FPCMKCFG=1
 TARGET_DIRS_FPCRES=1
 TARGET_DIRS_FPCRES=1
 TARGET_DIRS_RMWAIT=1
 TARGET_DIRS_RMWAIT=1
 TARGET_DIRS_INSTANTFPC=1
 TARGET_DIRS_INSTANTFPC=1
+TARGET_DIRS_IMPORTTL=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
 ifeq ($(FULL_TARGET),i386-embedded)
 TARGET_DIRS_FPPKG=1
 TARGET_DIRS_FPPKG=1
@@ -3337,6 +3339,7 @@ TARGET_DIRS_FPMC=1
 TARGET_DIRS_FPCRES=1
 TARGET_DIRS_FPCRES=1
 TARGET_DIRS_RMWAIT=1
 TARGET_DIRS_RMWAIT=1
 TARGET_DIRS_INSTANTFPC=1
 TARGET_DIRS_INSTANTFPC=1
+TARGET_DIRS_IMPORTTL=1
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 ifeq ($(FULL_TARGET),x86_64-embedded)
 TARGET_DIRS_FPPKG=1
 TARGET_DIRS_FPPKG=1
@@ -3395,6 +3398,7 @@ TARGET_DIRS_FPCMKCFG=1
 TARGET_DIRS_FPCRES=1
 TARGET_DIRS_FPCRES=1
 TARGET_DIRS_RMWAIT=1
 TARGET_DIRS_RMWAIT=1
 TARGET_DIRS_INSTANTFPC=1
 TARGET_DIRS_INSTANTFPC=1
+TARGET_DIRS_IMPORTTL=1
 endif
 endif
 ifeq ($(FULL_TARGET),arm-gba)
 ifeq ($(FULL_TARGET),arm-gba)
 TARGET_DIRS_FPPKG=1
 TARGET_DIRS_FPPKG=1
@@ -4055,6 +4059,51 @@ fpmc:
 	$(MAKE) -C fpmc all
 	$(MAKE) -C fpmc all
 .PHONY: fpmc_all fpmc_debug fpmc_smart fpmc_release fpmc_units fpmc_examples fpmc_shared fpmc_install fpmc_sourceinstall fpmc_exampleinstall fpmc_distinstall fpmc_zipinstall fpmc_zipsourceinstall fpmc_zipexampleinstall fpmc_zipdistinstall fpmc_clean fpmc_distclean fpmc_cleanall fpmc_info fpmc_makefiles fpmc
 .PHONY: fpmc_all fpmc_debug fpmc_smart fpmc_release fpmc_units fpmc_examples fpmc_shared fpmc_install fpmc_sourceinstall fpmc_exampleinstall fpmc_distinstall fpmc_zipinstall fpmc_zipsourceinstall fpmc_zipexampleinstall fpmc_zipdistinstall fpmc_clean fpmc_distclean fpmc_cleanall fpmc_info fpmc_makefiles fpmc
 endif
 endif
+ifdef TARGET_DIRS_IMPORTTL
+importtl_all:
+	$(MAKE) -C importtl all
+importtl_debug:
+	$(MAKE) -C importtl debug
+importtl_smart:
+	$(MAKE) -C importtl smart
+importtl_release:
+	$(MAKE) -C importtl release
+importtl_units:
+	$(MAKE) -C importtl units
+importtl_examples:
+	$(MAKE) -C importtl examples
+importtl_shared:
+	$(MAKE) -C importtl shared
+importtl_install:
+	$(MAKE) -C importtl install
+importtl_sourceinstall:
+	$(MAKE) -C importtl sourceinstall
+importtl_exampleinstall:
+	$(MAKE) -C importtl exampleinstall
+importtl_distinstall:
+	$(MAKE) -C importtl distinstall
+importtl_zipinstall:
+	$(MAKE) -C importtl zipinstall
+importtl_zipsourceinstall:
+	$(MAKE) -C importtl zipsourceinstall
+importtl_zipexampleinstall:
+	$(MAKE) -C importtl zipexampleinstall
+importtl_zipdistinstall:
+	$(MAKE) -C importtl zipdistinstall
+importtl_clean:
+	$(MAKE) -C importtl clean
+importtl_distclean:
+	$(MAKE) -C importtl distclean
+importtl_cleanall:
+	$(MAKE) -C importtl cleanall
+importtl_info:
+	$(MAKE) -C importtl info
+importtl_makefiles:
+	$(MAKE) -C importtl makefiles
+importtl:
+	$(MAKE) -C importtl all
+.PHONY: importtl_all importtl_debug importtl_smart importtl_release importtl_units importtl_examples importtl_shared importtl_install importtl_sourceinstall importtl_exampleinstall importtl_distinstall importtl_zipinstall importtl_zipsourceinstall importtl_zipexampleinstall importtl_zipdistinstall importtl_clean importtl_distclean importtl_cleanall importtl_info importtl_makefiles importtl
+endif
 ifdef TARGET_DIRS_FPCRESLIPO
 ifdef TARGET_DIRS_FPCRESLIPO
 fpcreslipo_all:
 fpcreslipo_all:
 	$(MAKE) -C fpcreslipo all
 	$(MAKE) -C fpcreslipo all

+ 3 - 3
utils/Makefile.fpc

@@ -10,9 +10,9 @@ version=2.6.1
 dirs=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg
 dirs=fppkg fpcm tply h2pas fprcp dxegen fpdoc fpcmkcfg
 programs=ppdep ptop rstconv data2inc delp bin2obj postw32 rmcvsdir
 programs=ppdep ptop rstconv data2inc delp bin2obj postw32 rmcvsdir
 programs_linux=grab_vcsa
 programs_linux=grab_vcsa
-dirs_win32=fpmc fpcres rmwait instantfpc
-dirs_win64=fpmc fpcres rmwait instantfpc
-dirs_wince=fpcres rmwait instantfpc
+dirs_win32=fpmc fpcres rmwait instantfpc importtl
+dirs_win64=fpmc fpcres rmwait instantfpc importtl
+dirs_wince=fpcres rmwait instantfpc importtl
 dirs_haiku=fpcres instantfpc
 dirs_haiku=fpcres instantfpc
 dirs_linux=fpcres instantfpc
 dirs_linux=fpcres instantfpc
 dirs_freebsd=fpcres instantfpc
 dirs_freebsd=fpcres instantfpc

+ 2567 - 0
utils/importtl/Makefile

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

+ 12 - 0
utils/importtl/Makefile.fpc

@@ -0,0 +1,12 @@
+#
+#   Makefile.fpc for h2pas
+#
+
+[target]
+programs=importtl
+
+[default]
+fpcdir=../..
+
+[require]
+packages=winunits-base

+ 79 - 0
utils/importtl/importtl.lpi

@@ -0,0 +1,79 @@
+<?xml version="1.0"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="9"/>
+    <PathDelim Value="\"/>
+    <General>
+      <Flags>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <MainUnitHasTitleStatement Value="False"/>
+        <UseDefaultCompilerOptions Value="True"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <MainUnit Value="0"/>
+      <Title Value="Type Library Import progral"/>
+      <UseAppBundle Value="False"/>
+      <ResourceType Value="res"/>
+      <Icon Value="0"/>
+    </General>
+    <i18n>
+      <EnableI18N LFM="False"/>
+    </i18n>
+    <VersionInfo>
+      <UseVersionInfo Value="True"/>
+      <MajorVersionNr Value="1"/>
+      <StringTable ProductVersion=""/>
+    </VersionInfo>
+    <BuildModes Count="1">
+      <Item1 Name="Default" Default="True"/>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+      <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+      <ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/>
+    </PublishOptions>
+    <RunParams>
+      <local>
+        <FormatVersion Value="1"/>
+        <CommandLineParams Value="C:\Programs\Acroread\Reader\acrord32.dll"/>
+      </local>
+    </RunParams>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="importtl.pas"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="importtl"/>
+      </Unit0>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <PathDelim Value="\"/>
+    <Target>
+      <Filename Value="project1"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir)"/>
+      <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
+    </SearchPaths>
+    <Other>
+      <CompilerMessages>
+        <UseMsgFile Value="True"/>
+      </CompilerMessages>
+      <CompilerPath Value="$(CompPath)"/>
+    </Other>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions Count="3">
+      <Item1>
+        <Name Value="EAbort"/>
+      </Item1>
+      <Item2>
+        <Name Value="ECodetoolError"/>
+      </Item2>
+      <Item3>
+        <Name Value="EFOpenError"/>
+      </Item3>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 75 - 0
utils/importtl/importtl.pas

@@ -0,0 +1,75 @@
+program importtl;
+
+{$mode objfpc}{$H+}
+{$apptype console}
+uses
+  classes,typelib,sysutils;
+
+var
+  unitname:string;
+  sTL,sOutDir:string;
+  F:text;
+  slDep:TStringList;
+  i:integer;
+  bNoRecurse,bHelp, bActivex:boolean;
+
+begin
+  slDep:=TStringList.Create;
+  bNoRecurse:=false;
+  bHelp:=false;
+  bActiveX:=false;
+  i:=1;
+  while i<=Paramcount do
+    begin
+    if pos('-n',ParamStr(i))>0 then bNoRecurse:=true
+    else if pos('-a',ParamStr(i))>0 then bActiveX:=true
+    else if pos('-h',ParamStr(i))>0 then bHelp:=true
+    else if pos('-d',ParamStr(i))>0 then
+      begin
+      sOutDir:=trim(copy(ParamStr(i), pos('-d',ParamStr(i))+2, 260));  // windows MAX_PATH
+      if sOutDir='' then
+        if i<Paramcount-1 then
+          begin
+          i:=i+1;
+          sOutDir:=trim(ParamStr(i));
+          end
+        else
+          begin
+          bHelp:=true;
+          sOutDir:='\';
+          end;
+      if not (sOutDir[length(sOutDir)] in [':','\']) then
+        sOutDir:=sOutDir+'\';
+      end;
+    i:=i+1;
+    end;
+  if bHelp or (Paramcount=0) or (pos('-',paramstr(Paramcount))=1) then
+    begin
+    writeln('Usage:  importtl [options] file');
+    writeln('Reads type information from "file" and converts it into a freepascal binding');
+    writeln('units.');
+    writeln('Options.');
+    writeln('  -h    : displays this text.');
+    writeln('  -a    : create ActiveXContainer descendants');
+    writeln('  -d dir: set output directory. Default: current directory.');
+    writeln('  -n    : do not recurse typelibs. Default: create bindingss for all');
+    writeln('          dependencies.');
+    exit;
+    end;
+  slDep.Add(paramstr(Paramcount));
+  i:=0;
+  repeat
+    writeln('Reading typelib from '+slDep[i]+ ' ...');
+    sTL:=ImportTypelib(slDep[i],unitname,slDep,bActiveX);
+    bActiveX:=false;  //don't create ActiveXContainer descendants in descendants
+    unitname:=sOutDir+unitname;
+    writeln('Writing to '+unitname);
+    AssignFile(F,unitname);
+    Rewrite(F);
+    Write(F,sTL);
+    CloseFile(F);
+    i:=i+1;
+  until bNoRecurse or (i=slDep.Count);
+  slDep.Destroy;
+end.
+