瀏覽代碼

merge 13886,13888-13889,13894-13897,13900-13907,13910-13922,13925-13931 revisions from the trunk

git-svn-id: branches/paul/features@13933 -
paul 15 年之前
父節點
當前提交
5ba2d8d3df
共有 50 個文件被更改,包括 5262 次插入735 次删除
  1. 11 4
      .gitattributes
  2. 17 5
      compiler/dbgdwarf.pas
  3. 2 0
      compiler/msg/errore.msg
  4. 3 2
      compiler/msgidx.inc
  5. 226 225
      compiler/msgtxt.inc
  6. 18 14
      compiler/ncnv.pas
  7. 12 2
      compiler/pdecsub.pas
  8. 122 37
      packages/Makefile
  9. 44 23
      packages/Makefile.fpc
  10. 27 83
      packages/fcl-base/Makefile
  11. 8 10
      packages/fcl-base/Makefile.fpc
  12. 3 3
      packages/fcl-db/src/codegen/fpcgtiopf.pp
  13. 2 0
      packages/fcl-db/src/codegen/fpddcodegen.pp
  14. 7 5
      packages/fcl-db/src/paradox/paradox.pp
  15. 2831 0
      packages/fcl-extra/Makefile
  16. 52 0
      packages/fcl-extra/Makefile.fpc
  17. 197 0
      packages/fcl-extra/fpmake.pp
  18. 2 2
      packages/fcl-extra/src/daemonapp.pp
  19. 0 0
      packages/fcl-extra/src/unix/daemonapp.inc
  20. 0 0
      packages/fcl-extra/src/win/ServiceManager.pas
  21. 0 0
      packages/fcl-extra/src/win/daemonapp.inc
  22. 6 0
      packages/fcl-fpcunit/src/DUnitCompatibleInterface.inc
  23. 1 1
      packages/fcl-net/src/mkxmlrpc.pp
  24. 191 4
      packages/fcl-passrc/src/pastree.pp
  25. 46 33
      packages/fcl-passrc/src/pparser.pp
  26. 70 41
      packages/fcl-xml/src/xmlread.pp
  27. 43 38
      packages/fcl-xml/src/xmlutils.pp
  28. 153 54
      packages/fcl-xml/src/xmlwrite.pp
  29. 3 3
      packages/fcl-xml/src/xpath.pp
  30. 4 12
      packages/fcl-xml/tests/extras2.pp
  31. 2 0
      packages/postgres/src/postgres3dyn.pp
  32. 4 0
      packages/pxlib/examples/ppxview.pp
  33. 6 0
      packages/pxlib/src/pxlib.pp
  34. 335 2
      packages/winunits-base/Makefile
  35. 3 0
      packages/winunits-base/Makefile.fpc
  36. 10 5
      packages/winunits-base/src/activex.pp
  37. 85 1
      packages/winunits-jedi/Makefile
  38. 2 2
      packages/winunits-jedi/Makefile.fpc
  39. 1 1
      rtl/bsd/ossysc.inc
  40. 12 2
      rtl/linux/ossysc.inc
  41. 58 46
      rtl/objpas/classes/compon.inc
  42. 33 33
      rtl/objpas/dateutil.inc
  43. 48 41
      rtl/objpas/sysutils/dati.inc
  44. 3 0
      rtl/unix/bunxh.inc
  45. 10 0
      tests/webtbf/tw14713.pp
  46. 9 0
      tests/webtbf/tw14713a.pp
  47. 27 0
      tests/webtbs/tw14812.pp
  48. 500 0
      utils/fpdoc/dw_dxml.pp
  49. 12 1
      utils/fpdoc/dw_xml.pp
  50. 1 0
      utils/fpdoc/fpdoc.pp

+ 11 - 4
.gitattributes

@@ -1123,7 +1123,6 @@ packages/fcl-base/src/bufstream.pp svneol=native#text/plain
 packages/fcl-base/src/cachecls.pp svneol=native#text/plain
 packages/fcl-base/src/contnrs.pp svneol=native#text/plain
 packages/fcl-base/src/custapp.pp svneol=native#text/plain
-packages/fcl-base/src/daemonapp.pp svneol=native#text/plain
 packages/fcl-base/src/dummy/eventlog.inc svneol=native#text/plain
 packages/fcl-base/src/eventlog.pp svneol=native#text/plain
 packages/fcl-base/src/fpexprpars.pp svneol=native#text/plain
@@ -1148,13 +1147,10 @@ packages/fcl-base/src/streamcoll.pp svneol=native#text/plain
 packages/fcl-base/src/streamex.pp svneol=native#text/plain
 packages/fcl-base/src/streamio.pp svneol=native#text/plain
 packages/fcl-base/src/syncobjs.pp svneol=native#text/plain
-packages/fcl-base/src/unix/daemonapp.inc svneol=native#text/plain
 packages/fcl-base/src/unix/eventlog.inc svneol=native#text/plain
 packages/fcl-base/src/uriparser.pp svneol=native#text/plain
 packages/fcl-base/src/wformat.pp svneol=native#text/plain
 packages/fcl-base/src/whtml.pp svneol=native#text/plain
-packages/fcl-base/src/win/ServiceManager.pas -text
-packages/fcl-base/src/win/daemonapp.inc svneol=native#text/plain
 packages/fcl-base/src/win/eventlog.inc svneol=native#text/plain
 packages/fcl-base/src/win/fclel.mc -text
 packages/fcl-base/src/win/fclel.rc -text
@@ -1357,6 +1353,13 @@ packages/fcl-db/tests/testdddiff.pp svneol=native#text/plain
 packages/fcl-db/tests/testfieldtypes.pas svneol=native#text/plain
 packages/fcl-db/tests/testsqlscript.pas svneol=native#text/plain
 packages/fcl-db/tests/toolsunit.pas -text
+packages/fcl-extra/Makefile svneol=native#text/plain
+packages/fcl-extra/Makefile.fpc svneol=native#text/plain
+packages/fcl-extra/fpmake.pp svneol=native#text/pascal
+packages/fcl-extra/src/daemonapp.pp svneol=native#text/plain
+packages/fcl-extra/src/unix/daemonapp.inc svneol=native#text/plain
+packages/fcl-extra/src/win/ServiceManager.pas svneol=native#text/plain
+packages/fcl-extra/src/win/daemonapp.inc svneol=native#text/plain
 packages/fcl-fpcunit/Makefile svneol=native#text/plain
 packages/fcl-fpcunit/Makefile.fpc svneol=native#text/plain
 packages/fcl-fpcunit/fpmake.pp svneol=native#text/plain
@@ -8730,6 +8733,8 @@ tests/webtbf/tw1432.pp svneol=native#text/plain
 tests/webtbf/tw14650.pp svneol=native#text/plain
 tests/webtbf/tw14650a.pp svneol=native#text/plain
 tests/webtbf/tw1467.pp svneol=native#text/plain
+tests/webtbf/tw14713.pp svneol=native#text/plain
+tests/webtbf/tw14713a.pp svneol=native#text/plain
 tests/webtbf/tw1483.pp svneol=native#text/plain
 tests/webtbf/tw1599.pp svneol=native#text/plain
 tests/webtbf/tw1599b.pp svneol=native#text/plain
@@ -9335,6 +9340,7 @@ tests/webtbs/tw14740.pp svneol=native#text/plain
 tests/webtbs/tw14743.pp svneol=native#text/pascal
 tests/webtbs/tw1477.pp svneol=native#text/plain
 tests/webtbs/tw1479.pp svneol=native#text/plain
+tests/webtbs/tw14812.pp svneol=native#text/plain
 tests/webtbs/tw1485.pp svneol=native#text/plain
 tests/webtbs/tw1489.pp svneol=native#text/plain
 tests/webtbs/tw1501.pp svneol=native#text/plain
@@ -10324,6 +10330,7 @@ utils/fpdoc/Makefile svneol=native#text/plain
 utils/fpdoc/Makefile.fpc svneol=native#text/plain
 utils/fpdoc/README.txt svneol=native#text/plain
 utils/fpdoc/dglobals.pp svneol=native#text/plain
+utils/fpdoc/dw_dxml.pp svneol=native#text/plain
 utils/fpdoc/dw_html.pp svneol=native#text/plain
 utils/fpdoc/dw_htmlchm.inc svneol=native#text/plain
 utils/fpdoc/dw_ipf.pp svneol=native#text/plain

+ 17 - 5
compiler/dbgdwarf.pas

@@ -1701,18 +1701,30 @@ implementation
         st             : tsymtable;
         i              : longint;
         vmtindexnr     : pint;
+        incurrentunit  : boolean;
       begin
         { only write debug info for procedures defined in the current module,
           except in case of methods (gcc-compatible)
         }
-        if not assigned(def.procstarttai) and
+        st:=def.owner;
+        while not(st.symtabletype in [globalsymtable,staticsymtable]) do
+          st:=st.defowner.owner;
+        incurrentunit:=st.iscurrentunit;
+
+        if not incurrentunit and
           (def.owner.symtabletype<>objectsymtable) then
           exit;
 
+        { happens for init procdef of units without init section }
+        if incurrentunit and
+           not assigned(def.procstarttai) then
+          exit;
+
         { Procdefs are not handled by the regular def writing code, so
           dbg_state is not set/checked for them. Do it here.  }
         if (def.dbg_state in [dbg_state_writing,dbg_state_written]) then
           exit;
+        defnumberlist.Add(def);
 
         { Write methods and only in the scope of their parent objectdefs.  }
         if (def.owner.symtabletype=objectsymtable) then
@@ -1779,7 +1791,7 @@ implementation
         { we can only write the start/end if this procedure is implemented in
           this module
         }
-        if assigned(def.procstarttai) then
+        if incurrentunit then
           begin
             { mark end of procedure }
             current_asmdata.getlabel(procendlabel,alt_dbgtype);
@@ -1819,8 +1831,8 @@ implementation
           end;
         { local type defs and vars should not be written
           inside the main proc }
-        if assigned(def.procstarttai)
-           and assigned(def.localst) and
+        if incurrentunit and
+           assigned(def.localst) and
            (def.localst.symtabletype=localsymtable) then
           write_symtable_syms(current_asmdata.asmlists[al_dwarf_info],def.localst);
 
@@ -1828,7 +1840,7 @@ implementation
         if assigned(def.parast) then
           write_symtable_defs(current_asmdata.asmlists[al_dwarf_info],def.parast);
         { only try to write the localst if the routine is implemented here }
-        if assigned(def.procstarttai) and
+        if incurrentunit and
            assigned(def.localst) and
            (def.localst.symtabletype=localsymtable) then
           begin

+ 2 - 0
compiler/msg/errore.msg

@@ -1507,6 +1507,8 @@ type_e_ordinal_or_string_expr_expected=04088_E_Ordinal or string expression expe
 % The expression must be an ordinal or string type.
 type_e_string_expr_expected=04089_E_String expression expected
 % The expression must be a string type.
+type_w_zero_to_nil=04090_W_Converting 0 to NIL
+% Use NIL rather than 0 when initialising a pointer. 
 % \end{description}
 #
 # Symtable

+ 3 - 2
compiler/msgidx.inc

@@ -425,6 +425,7 @@ const
   type_e_no_type_info=04087;
   type_e_ordinal_or_string_expr_expected=04088;
   type_e_string_expr_expected=04089;
+  type_w_zero_to_nil=04090;
   sym_e_id_not_found=05000;
   sym_f_internal_error_in_symtablestack=05001;
   sym_e_duplicate_id=05002;
@@ -799,9 +800,9 @@ const
   option_info=11024;
   option_help_pages=11025;
 
-  MsgTxtSize = 52059;
+  MsgTxtSize = 52087;
 
   MsgIdxMax : array[1..20] of longint=(
-    24,87,258,90,67,50,108,22,202,62,
+    24,87,258,91,67,50,108,22,202,62,
     48,20,1,1,1,1,1,1,1,1
   );

+ 226 - 225
compiler/msgtxt.inc

@@ -1,7 +1,7 @@
 {$ifdef Delphi}
-const msgtxt : array[0..000216] of string[240]=(
+const msgtxt : array[0..000217] of string[240]=(
 {$else Delphi}
-const msgtxt : array[0..000216,1..240] of char=(
+const msgtxt : array[0..000217,1..240] of char=(
 {$endif Delphi}
   '01000_T_Compiler: $1'#000+
   '01001_D_Compiler OS: $1'#000+
@@ -491,431 +491,433 @@ const msgtxt : array[0..000216,1..240] of char=(
   '04087_E_No type info available for this type'#000+
   '04088_E_Ordinal or string expression expected'#000+
   '04089_E_String expression expected'#000+
-  '05000_E_Identifier not found "$1"'#000+
-  '05001_F_Internal Error i','n SymTableStack()'#000+
+  '04090_W_Converting 0 to NIL'#000+
+  '05000_E_Identifier not found "','$1"'#000+
+  '05001_F_Internal Error in SymTableStack()'#000+
   '05002_E_Duplicate identifier "$1"'#000+
   '05003_H_Identifier already defined in $1 at line $2'#000+
   '05004_E_Unknown identifier "$1"'#000+
   '05005_E_Forward declaration not solved "$1"'#000+
-  '05007_E_Error in type definition'#000+
-  '05009_E_Forward type not re','solved "$1"'#000+
+  '05007_E_Error in type definition',#000+
+  '05009_E_Forward type not resolved "$1"'#000+
   '05010_E_Only static variables can be used in static methods or outside'+
   ' methods'#000+
   '05012_F_record or class type expected'#000+
   '05013_E_Instances of classes or objects with an abstract method are no'+
   't allowed'#000+
-  '05014_W_Label not defined "$1"'#000,
+  '050','14_W_Label not defined "$1"'#000+
   '05015_E_Label used but not defined "$1"'#000+
   '05016_E_Illegal label declaration'#000+
   '05017_E_GOTO and LABEL are not supported (use switch -Sg)'#000+
   '05018_E_Label not found'#000+
   '05019_E_identifier isn'#039't a label'#000+
-  '05020_E_label already defined'#000+
-  '05021_E_illegal type ','declaration of set elements'#000+
+  '05020_E_label already d','efined'#000+
+  '05021_E_illegal type declaration of set elements'#000+
   '05022_E_Forward class definition not resolved "$1"'#000+
   '05023_H_Unit "$1" not used in $2'#000+
   '05024_H_Parameter "$1" not used'#000+
   '05025_N_Local variable "$1" not used'#000+
-  '05026_H_Value parameter "$1" is assigned but never used'#000+
-  '050','27_N_Local variable "$1" is assigned but never used'#000+
+  '05026_H_Value parameter "$1" is',' assigned but never used'#000+
+  '05027_N_Local variable "$1" is assigned but never used'#000+
   '05028_H_Local $1 "$2" is not used'#000+
   '05029_N_Private field "$1.$2" is never used'#000+
   '05030_N_Private field "$1.$2" is assigned but never used'#000+
-  '05031_N_Private method "$1.$2" never used'#000+
-  '05032_E_Set',' type expected'#000+
+  '05031_N_Private method "$','1.$2" never used'#000+
+  '05032_E_Set type expected'#000+
   '05033_W_Function result does not seem to be set'#000+
   '05034_W_Type "$1" is not aligned correctly in current record for C'#000+
   '05035_E_Unknown record field identifier "$1"'#000+
-  '05036_W_Local variable "$1" does not seem to be initialized'#000+
-  '05037','_W_Variable "$1" does not seem to be initialized'#000+
+  '05036_W_Local variable "$1" does not ','seem to be initialized'#000+
+  '05037_W_Variable "$1" does not seem to be initialized'#000+
   '05038_E_identifier idents no member "$1"'#000+
   '05039_H_Found declaration: $1'#000+
   '05040_E_Data element too large'#000+
-  '05042_E_No matching implementation for interface method "$1" found'#000+
-  '05043_W_Symbol "$1" is',' deprecated'#000+
+  '05042_E_No matching implementation for interface method "$1" ','found'#000+
+  '05043_W_Symbol "$1" is deprecated'#000+
   '05044_W_Symbol "$1" is not portable'#000+
   '05055_W_Symbol "$1" is not implemented'#000+
   '05056_E_Can'#039't create unique type from this type'#000+
   '05057_H_Local variable "$1" does not seem to be initialized'#000+
-  '05058_H_Variable "$1" does not seem to be ini','tialized'#000+
+  '05058_H_Variable ','"$1" does not seem to be initialized'#000+
   '05059_W_Function result variable does not seem to initialized'#000+
   '05060_H_Function result variable does not seem to be initialized'#000+
   '05061_W_Variable "$1" read but nowhere assigned'#000+
-  '05062_H_Found abstract method: $1'#000+
-  '05063_W_Symbol "$1" is',' experimental'#000+
+  '05062_H_Found abstract metho','d: $1'#000+
+  '05063_W_Symbol "$1" is experimental'#000+
   '05064_W_Forward declaration "$1" not resolved, assumed external'#000+
   '05065_W_Symbol "$1" is belongs to a library'#000+
   '05066_W_Symbol "$1" is deprecated: "$2"'#000+
   '06009_E_Parameter list size exceeds 65535 bytes'#000+
-  '06012_E_File types must be var',' parameters'#000+
+  '06','012_E_File types must be var parameters'#000+
   '06013_E_The use of a far pointer isn'#039't allowed there'#000+
   '06015_E_EXPORT declared functions can'#039't be called'#000+
   '06016_W_Possible illegal call of constructor or destructor'#000+
   '06017_N_Inefficient code'#000+
-  '06018_W_unreachable code'#000+
-  '06020_E_Abstract',' methods can'#039't be called directly'#000+
+  '06018_W_unrea','chable code'#000+
+  '06020_E_Abstract methods can'#039't be called directly'#000+
   '06027_DL_Register $1 weight $2 $3'#000+
   '06029_DL_Stack frame is omitted'#000+
   '06031_E_Object or class methods can'#039't be inline.'#000+
   '06032_E_Procvar calls cannot be inline.'#000+
-  '06033_E_No code for inline procedure stored'#000+
-  '06035_E','_Element zero of an ansi/wide- or longstring can'#039't be acc'+
-  'essed, use (set)length instead'#000+
+  '06033_E_No code for inl','ine procedure stored'#000+
+  '06035_E_Element zero of an ansi/wide- or longstring can'#039't be acces'+
+  'sed, use (set)length instead'#000+
   '06037_E_Constructors or destructors can not be called inside a '#039'wi'+
   'th'#039' clause'#000+
-  '06038_E_Cannot call message handler methods directly'#000+
-  '06039_E_Jump in or out','side of an exception block'#000+
+  '06038_E_Cannot call message handler methods dir','ectly'#000+
+  '06039_E_Jump in or outside of an exception block'#000+
   '06040_E_Control flow statements aren'#039't allowed in a finally block'#000+
   '06041_W_Parameters size exceeds limit for certain cpu'#039's'#000+
   '06042_W_Local variable size exceed limit for certain cpu'#039's'#000+
-  '06043_E_Local variables size exc','eeds supported limit'#000+
+  '0604','3_E_Local variables size exceeds supported limit'#000+
   '06044_E_BREAK not allowed'#000+
   '06045_E_CONTINUE not allowed'#000+
   '06046_F_Unknown compilerproc "$1". Check if you use the correct run ti'+
   'me library.'#000+
-  '06047_F_Cannot find system type "$1". Check if you use the correct run'+
-  ' time librar','y.'#000+
+  '06047_F_Cannot find system type "$1". Check if you use',' the correct r'+
+  'un time library.'#000+
   '06048_H_Inherited call to abstract method ignored'#000+
   '06049_E_Goto label "$1" not defined or optimized away'#000+
   '07000_DL_Starting $1 styled assembler parsing'#000+
   '07001_DL_Finished $1 styled assembler parsing'#000+
-  '07002_E_Non-label pattern contains @'#000+
-  '0700','4_E_Error building record offset'#000+
+  '07002_E_Non-l','abel pattern contains @'#000+
+  '07004_E_Error building record offset'#000+
   '07005_E_OFFSET used without identifier'#000+
   '07006_E_TYPE used without identifier'#000+
   '07007_E_Cannot use local variable or parameters here'#000+
   '07008_E_need to use OFFSET here'#000+
-  '07009_E_need to use $ here'#000+
-  '07010_E_Cannot use ','multiple relocatable symbols'#000+
+  '07009_E_need to us','e $ here'#000+
+  '07010_E_Cannot use multiple relocatable symbols'#000+
   '07011_E_Relocatable symbol can only be added'#000+
   '07012_E_Invalid constant expression'#000+
   '07013_E_Relocatable symbol is not allowed'#000+
   '07014_E_Invalid reference syntax'#000+
-  '07015_E_You can not reach $1 from that code'#000+
-  '07016_E_Loc','al symbols/labels aren'#039't allowed as references'#000+
+  '07015_E_You can not reach $','1 from that code'#000+
+  '07016_E_Local symbols/labels aren'#039't allowed as references'#000+
   '07017_E_Invalid base and index register usage'#000+
   '07018_W_Possible error in object field handling'#000+
   '07019_E_Wrong scale factor specified'#000+
-  '07020_E_Multiple index register usage'#000+
-  '07021_E_Invalid operand ','type'#000+
+  '07020_E_Multiple index register us','age'#000+
+  '07021_E_Invalid operand type'#000+
   '07022_E_Invalid string as opcode operand: $1'#000+
   '07023_W_@CODE and @DATA not supported'#000+
   '07024_E_Null label references are not allowed'#000+
   '07025_E_Divide by zero in asm evaluator'#000+
   '07026_E_Illegal expression'#000+
-  '07027_E_escape sequence ignored: $1'#000+
-  '070','28_E_Invalid symbol reference'#000+
+  '07027_E_esc','ape sequence ignored: $1'#000+
+  '07028_E_Invalid symbol reference'#000+
   '07029_W_Fwait can cause emulation problems with emu387'#000+
   '07030_W_$1 without operand translated into $1P'#000+
   '07031_W_ENTER instruction is not supported by Linux kernel'#000+
-  '07032_W_Calling an overload function in assembler',#000+
+  '07032_W_Calling an ov','erload function in assembler'#000+
   '07033_E_Unsupported symbol type for operand'#000+
   '07034_E_Constant value out of bounds'#000+
   '07035_E_Error converting decimal $1'#000+
   '07036_E_Error converting octal $1'#000+
   '07037_E_Error converting binary $1'#000+
-  '07038_E_Error converting hexadecimal $1'#000+
-  '07039_H_$1 tr','anslated to $2'#000+
+  '07038_E_Error converting ','hexadecimal $1'#000+
+  '07039_H_$1 translated to $2'#000+
   '07040_W_$1 is associated to an overloaded function'#000+
   '07041_E_Cannot use SELF outside a method'#000+
   '07042_E_Cannot use OLDEBP outside a nested procedure'#000+
-  '07043_W_Procedures can'#039't return any value in asm code'#000+
-  '07044_E_SEG not supported'#000,
+  '07043_W_Procedures can'#039't return any value in asm cod','e'#000+
+  '07044_E_SEG not supported'#000+
   '07045_E_Size suffix and destination or source size do not match'#000+
   '07046_W_Size suffix and destination or source size do not match'#000+
   '07047_E_Assembler syntax error'#000+
   '07048_E_Invalid combination of opcode and operands'#000+
-  '07049_E_Assembler syntax error',' in operand'#000+
+  '07','049_E_Assembler syntax error in operand'#000+
   '07050_E_Assembler syntax error in constant'#000+
   '07051_E_Invalid String expression'#000+
   '07052_W_constant with symbol $1 for address which is not on a pointer'#000+
   '07053_E_Unrecognized opcode $1'#000+
-  '07054_E_Invalid or missing opcode'#000+
-  '07055_E_Invalid ','combination of prefix and opcode: $1'#000+
+  '07054_E_Invalid or mis','sing opcode'#000+
+  '07055_E_Invalid combination of prefix and opcode: $1'#000+
   '07056_E_Invalid combination of override and opcode: $1'#000+
   '07057_E_Too many operands on line'#000+
   '07058_W_NEAR ignored'#000+
   '07059_W_FAR ignored'#000+
   '07060_E_Duplicate local symbol $1'#000+
-  '07061_E_Undefined local symbol $1'#000+
-  '07062','_E_Unknown label identifier $1'#000+
+  '07061_E_Und','efined local symbol $1'#000+
+  '07062_E_Unknown label identifier $1'#000+
   '07063_E_Invalid register name'#000+
   '07064_E_Invalid floating point register name'#000+
   '07066_W_Modulo not supported'#000+
   '07067_E_Invalid floating point constant $1'#000+
-  '07068_E_Invalid floating point expression'#000+
-  '07069_E_Wrong symbol',' type'#000+
+  '07068_E_Invalid floating point exp','ression'#000+
+  '07069_E_Wrong symbol type'#000+
   '07070_E_Cannot index a local var or parameter with a register'#000+
   '07071_E_Invalid segment override expression'#000+
   '07072_W_Identifier $1 supposed external'#000+
   '07073_E_Strings not allowed as constants'#000+
-  '07074_No type of variable specified'#000+
-  '07075_E_ass','embler code not returned to text section'#000+
+  '07074_No type of va','riable specified'#000+
+  '07075_E_assembler code not returned to text section'#000+
   '07076_E_Not a directive or local symbol $1'#000+
   '07077_E_Using a defined name as a local label'#000+
   '07078_E_Dollar token is used without an identifier'#000+
-  '07079_W_32bit constant created for address'#000+
-  '07080_N_.align i','s target specific, use .balign or .p2align'#000+
+  '07079_W_32bit constant created ','for address'#000+
+  '07080_N_.align is target specific, use .balign or .p2align'#000+
   '07081_E_Can'#039't access fields directly for parameters'#000+
   '07082_E_Can'#039't access fields of objects/classes directly'#000+
-  '07083_E_No size specified and unable to determine the size of the oper'+
-  'ands'#000+
-  '07084_E_Cannot',' use RESULT in this function'#000+
+  '07083_E_No size specified and unable to determine the size of',' the op'+
+  'erands'#000+
+  '07084_E_Cannot use RESULT in this function'#000+
   '07086_W_"$1" without operand translated into "$1 %st,%st(1)"'#000+
   '07087_W_"$1 %st(n)" translated into "$1 %st,%st(n)"'#000+
   '07088_W_"$1 %st(n)" translated into "$1 %st(n),%st"'#000+
-  '07089_E_Char < not allowed here'#000+
-  '07090_E_Char >',' not allowed here'#000+
+  '07089_E_Char < not',' allowed here'#000+
+  '07090_E_Char > not allowed here'#000+
   '07093_W_ALIGN not supported'#000+
   '07094_E_Inc and Dec cannot be together'#000+
   '07095_E_Invalid reglist for movem'#000+
   '07096_E_Reglist invalid for opcode'#000+
   '07097_E_Higher cpu mode required ($1)'#000+
-  '07098_W_No size specified and unable to determin','e the size of the op'+
+  '07098_W_No size spec','ified and unable to determine the size of the op'+
   'erands, using DWORD as default'#000+
   '07099_E_Syntax error while trying to parse a shifter operand'#000+
   '07100_E_Address of packed component is not at a byte boundary'#000+
-  '07101_W_No size specified and unable to determine the size of the ','op'+
+  '07101_W_No size specified and unable t','o determine the size of the op'+
   'erands, using BYTE as default'#000+
   '07102_W_Use of +offset(%ebp) for parameters invalid here'#000+
   '07103_W_Use of +offset(%ebp) is not compatible with regcall convention'+
   #000+
-  '07104_W_Use of -offset(%ebp) is not recommended for local variable acc'+
-  'ess'#000+
-  '07105_','W_Use of -offset(%esp), access may cause a crash or value may '+
-  'be lost'#000+
+  '07104_W_Use of -offset(%ebp) is not recommended for ','local variable a'+
+  'ccess'#000+
+  '07105_W_Use of -offset(%esp), access may cause a crash or value may be'+
+  ' lost'#000+
   '07106_E_VMTOffset must be used in combination with a virtual method, a'+
   'nd "$1" is not virtual'#000+
-  '07107_E_Generating PIC, but reference is not PIC-safe'#000+
-  '08000_F_Too many assemb','ler files'#000+
+  '07107_E_Generating PIC, but reference is not PIC-','safe'#000+
+  '08000_F_Too many assembler files'#000+
   '08001_F_Selected assembler output not supported'#000+
   '08002_F_Comp not supported'#000+
   '08003_F_Direct not support for binary writers'#000+
   '08004_E_Allocating of data is only allowed in bss section'#000+
-  '08005_F_No binary writer selected'#000+
-  '08006_E_Asm: Opco','de $1 not in table'#000+
+  '08005_F_No binary write','r selected'#000+
+  '08006_E_Asm: Opcode $1 not in table'#000+
   '08007_E_Asm: $1 invalid combination of opcode and operands'#000+
   '08008_E_Asm: 16 Bit references not supported'#000+
   '08009_E_Asm: Invalid effective address'#000+
   '08010_E_Asm: Immediate or reference expected'#000+
-  '08011_E_Asm: $1 value exceeds bou','nds $2'#000+
+  '08011','_E_Asm: $1 value exceeds bounds $2'#000+
   '08012_E_Asm: Short jump is out of range $1'#000+
   '08013_E_Asm: Undefined label $1'#000+
   '08014_E_Asm: Comp type not supported for this target'#000+
   '08015_E_Asm: Extended type not supported for this target'#000+
-  '08016_E_Asm: Duplicate label $1'#000+
-  '08017_E_Asm: Red','efined label $1'#000+
+  '08016_E_Asm: Duplica','te label $1'#000+
+  '08017_E_Asm: Redefined label $1'#000+
   '08018_E_Asm: First defined here'#000+
   '08019_E_Asm: Invalid register $1'#000+
   '08020_E_Asm: 16 or 32 Bit references not supported'#000+
   '08021_E_Asm: 64 Bit operands not supported'#000+
-  '09000_W_Source operating system redefined'#000+
-  '09001_I_Assembling (pip','e) $1'#000+
+  '09000_W_Source operating system redef','ined'#000+
+  '09001_I_Assembling (pipe) $1'#000+
   '09002_E_Can'#039't create assembler file: $1'#000+
   '09003_E_Can'#039't create object file: $1'#000+
   '09004_E_Can'#039't create archive file: $1'#000+
   '09005_E_Assembler $1 not found, switching to external assembling'#000+
-  '09006_T_Using assembler: $1'#000+
-  '09007_E_Error while assemb','ling exitcode $1'#000+
+  '09006_T_Using assembler: $','1'#000+
+  '09007_E_Error while assembling exitcode $1'#000+
   '09008_E_Can'#039't call the assembler, error $1 switching to external a'+
   'ssembling'#000+
   '09009_I_Assembling $1'#000+
   '09010_I_Assembling with smartlinking $1'#000+
   '09011_W_Object $1 not found, Linking may fail !'#000+
-  '09012_W_Library $1 not found, Linking',' may fail !'#000+
+  '09012_W_L','ibrary $1 not found, Linking may fail !'#000+
   '09013_E_Error while linking'#000+
   '09014_E_Can'#039't call the linker, switching to external linking'#000+
   '09015_I_Linking $1'#000+
   '09016_E_Util $1 not found, switching to external linking'#000+
   '09017_T_Using util $1'#000+
-  '09018_E_Creation of Executables not suppo','rted'#000+
+  '09018_E_Creat','ion of Executables not supported'#000+
   '09019_E_Creation of Dynamic/Shared Libraries not supported'#000+
   '09020_I_Closing script $1'#000+
   '09021_E_resource compiler "$1" not found, switching to external mode'#000+
   '09022_I_Compiling resource $1'#000+
-  '09023_T_unit $1 can'#039't be statically linked, switchi','ng to smart l'+
+  '09023_T_unit $1 can'#039't b','e statically linked, switching to smart l'+
   'inking'#000+
   '09024_T_unit $1 can'#039't be smart linked, switching to static linking'+
   #000+
   '09025_T_unit $1 can'#039't be shared linked, switching to static linkin'+
   'g'#000+
   '09026_E_unit $1 can'#039't be smart or static linked'#000+
-  '09027_E_unit $1 can'#039't be shared or st','atic linked'#000+
+  '09027_E_u','nit $1 can'#039't be shared or static linked'#000+
   '09028_D_Calling resource compiler "$1" with "$2" as command line'#000+
   '09029_E_Error while compiling resources'#000+
   '09030_E_Can'#039't call the resource compiler "$1", switching to extern'+
   'al mode'#000+
-  '09031_E_Can'#039't open resource file "$1"'#000+
-  '09032_E_Can',#039't write resource file "$1"'#000+
+  '09031_E_Can'#039't open re','source file "$1"'#000+
+  '09032_E_Can'#039't write resource file "$1"'#000+
   '09128_F_Can'#039't post process executable $1'#000+
   '09129_F_Can'#039't open executable $1'#000+
   '09130_X_Size of Code: $1 bytes'#000+
   '09131_X_Size of initialized data: $1 bytes'#000+
-  '09132_X_Size of uninitialized data: $1 bytes'#000+
-  '09133_X_Stack space',' reserved: $1 bytes'#000+
+  '09132_X_Size of uninitialized data: ','$1 bytes'#000+
+  '09133_X_Stack space reserved: $1 bytes'#000+
   '09134_X_Stack space committed: $1 bytes'#000+
   '09200_F_Executable image size is too big for $1 target.'#000+
   '09201_W_Object file "$1" contains 32-bit absolute relocation to symbol'+
   ' "$2".'#000+
-  '10000_T_Unitsearch: $1'#000+
+  '10000_T_Unitsearch:',' $1'#000+
   '10001_T_PPU Loading $1'#000+
-  '1','0002_U_PPU Name: $1'#000+
+  '10002_U_PPU Name: $1'#000+
   '10003_U_PPU Flags: $1'#000+
   '10004_U_PPU Crc: $1'#000+
   '10005_U_PPU Time: $1'#000+
   '10006_U_PPU File too short'#000+
   '10007_U_PPU Invalid Header (no PPU at the begin)'#000+
   '10008_U_PPU Invalid Version $1'#000+
-  '10009_U_PPU is compiled for another processor'#000+
-  '1001','0_U_PPU is compiled for an other target'#000+
+  '10009_U_PPU is compile','d for another processor'#000+
+  '10010_U_PPU is compiled for an other target'#000+
   '10011_U_PPU Source: $1'#000+
   '10012_U_Writing $1'#000+
   '10013_F_Can'#039't Write PPU-File'#000+
   '10014_F_Error reading PPU-File'#000+
   '10015_F_unexpected end of PPU-File'#000+
-  '10016_F_Invalid PPU-File entry: $1'#000+
-  '10017_F_PPU Dbx count proble','m'#000+
+  '10016_F_Invalid PPU-File entry: $1'#000,
+  '10017_F_PPU Dbx count problem'#000+
   '10018_E_Illegal unit name: $1'#000+
   '10019_F_Too much units'#000+
   '10020_F_Circular unit reference between $1 and $2'#000+
   '10021_F_Can'#039't compile unit $1, no sources available'#000+
   '10022_F_Can'#039't find unit $1 used by $2'#000+
-  '10023_W_Unit $1 was not found but $2 exists'#000+
-  '1','0024_F_Unit $1 searched but $2 found'#000+
+  '10023_W_Unit $1 w','as not found but $2 exists'#000+
+  '10024_F_Unit $1 searched but $2 found'#000+
   '10025_W_Compiling the system unit requires the -Us switch'#000+
   '10026_F_There were $1 errors compiling module, stopping'#000+
   '10027_U_Load from $1 ($2) unit $3'#000+
-  '10028_U_Recompiling $1, checksum changed for $2'#000+
-  '10029_U','_Recompiling $1, source found only'#000+
+  '10028_U_Recompiling $1, che','cksum changed for $2'#000+
+  '10029_U_Recompiling $1, source found only'#000+
   '10030_U_Recompiling unit, static lib is older than ppufile'#000+
   '10031_U_Recompiling unit, shared lib is older than ppufile'#000+
-  '10032_U_Recompiling unit, obj and asm are older than ppufile'#000+
-  '10033_U_Recompiling unit, ','obj is older than asm'#000+
+  '10032_U_Recompiling unit, obj and asm are older than ppufil','e'#000+
+  '10033_U_Recompiling unit, obj is older than asm'#000+
   '10034_U_Parsing interface of $1'#000+
   '10035_U_Parsing implementation of $1'#000+
   '10036_U_Second load for unit $1'#000+
   '10037_U_PPU Check file $1 time $2'#000+
-  '10040_W_Can'#039't recompile unit $1, but found modifed include files'#000+
-  '10041_U_File $1 is',' newer than PPU file $2'#000+
+  '10040_W_Can'#039't recompile unit $1, but found modifed incl','ude files'+
+  #000+
+  '10041_U_File $1 is newer than PPU file $2'#000+
   '10042_U_Trying to use a unit which was compiled with a different FPU m'+
   'ode'#000+
   '10043_U_Loading interface units from $1'#000+
   '10044_U_Loading implementation units from $1'#000+
-  '10045_U_Interface CRC changed for unit $1'#000+
-  '10046_U_Impleme','ntation CRC changed for unit $1'#000+
+  '10045_U_Interface CRC changed',' for unit $1'#000+
+  '10046_U_Implementation CRC changed for unit $1'#000+
   '10047_U_Finished compiling unit $1'#000+
   '10048_U_Add dependency of $1 to $2'#000+
   '10049_U_No reload, is caller: $1'#000+
   '10050_U_No reload, already in second compile: $1'#000+
-  '10051_U_Flag for reload: $1'#000+
+  '10051_U_Flag for reload: $1'#000,
   '10052_U_Forced reloading'#000+
-  '100','53_U_Previous state of $1: $2'#000+
+  '10053_U_Previous state of $1: $2'#000+
   '10054_U_Already compiling $1, setting second compile'#000+
   '10055_U_Loading unit $1'#000+
   '10056_U_Finished loading unit $1'#000+
   '10057_U_Registering new unit $1'#000+
   '10058_U_Re-resolving unit $1'#000+
-  '10059_U_Skipping re-resolving unit $1, ','still loading used units'#000+
+  '10059_U_Ski','pping re-resolving unit $1, still loading used units'#000+
   '10060_U_Unloading resource unit $1 (not needed)'#000+
   '10061_E_Unit $1 was compiled using a different whole program optimizat'+
-  'ion feedback input ($2, $3); recompile it without wpo or use the same '+
-  'wpo feedback input file for',' this compilation invocation'#000+
+  'ion feedback input ($2, $3); recompile it without wpo or use the same',
+  ' wpo feedback input file for this compilation invocation'#000+
   '11000_O_$1 [options] <inputfile> [options]'#000+
   '11001_W_Only one source file supported, changing source file to compil'+
   'e from "$1" into "$2"'#000+
   '11002_W_DEF file can be created only for OS/2'#000+
-  '11003_E_nested response files ','are not supported'#000+
+  '11','003_E_nested response files are not supported'#000+
   '11004_F_No source file name in command line'#000+
   '11005_N_No option inside $1 config file'#000+
   '11006_E_Illegal parameter: $1'#000+
   '11007_H_-? writes help pages'#000+
   '11008_F_Too many config files nested'#000+
-  '11009_F_Unable to open file $1'#000+
-  '11010_D_Rea','ding further options from $1'#000+
+  '11009_F_Unable',' to open file $1'#000+
+  '11010_D_Reading further options from $1'#000+
   '11011_W_Target is already set to: $1'#000+
   '11012_W_Shared libs not supported on DOS platform, reverting to static'+
   #000+
   '11013_F_In options file $1 at line $2 too many \var{\#IF(N)DEFs} encou'+
-  'ntered'#000+
-  '11014_F_In options file $1',' at line $2 unexpected \var{\#ENDIFs} enco'+
-  'untered'#000+
+  'ntere','d'#000+
+  '11014_F_In options file $1 at line $2 unexpected \var{\#ENDIFs} encoun'+
+  'tered'#000+
   '11015_F_Open conditional at the end of the options file'#000+
   '11016_W_Debug information generation is not supported by this executab'+
   'le'#000+
-  '11017_H_Try recompiling with -dGDB'#000+
-  '11018_W_You are using the ','obsolete switch $1'#000+
+  '11017_H_Try recompiling with -dGD','B'#000+
+  '11018_W_You are using the obsolete switch $1'#000+
   '11019_W_You are using the obsolete switch $1, please use $2'#000+
   '11020_N_Switching assembler to default source writing assembler'#000+
   '11021_W_Assembler output selected "$1" is not compatible with "$2"'#000+
-  '11022_W_"$1" assembler use for','ced'#000+
+  '11','022_W_"$1" assembler use forced'#000+
   '11026_T_Reading options from file $1'#000+
   '11027_T_Reading options from environment $1'#000+
   '11028_D_Handling option "$1"'#000+
   '11029_O_*** press enter ***'#000+
   '11030_H_Start of reading config file $1'#000+
-  '11031_H_End of reading config file $1'#000+
-  '11032_D_interpreting',' option "$1"'#000+
+  '11031_H_End of reading config ','file $1'#000+
+  '11032_D_interpreting option "$1"'#000+
   '11036_D_interpreting firstpass option "$1"'#000+
   '11033_D_interpreting file option "$1"'#000+
   '11034_D_Reading config file "$1"'#000+
   '11035_D_found source file name "$1"'#000+
   '11039_E_Unknown code page'#000+
-  '11040_F_Config file $1 is a directory'#000+
-  '11041_W_Assem','bler output selected "$1" cannot generate debug info, d'+
-  'ebugging disabled'#000+
+  '11040_F_Config file $1 ','is a directory'#000+
+  '11041_W_Assembler output selected "$1" cannot generate debug info, deb'+
+  'ugging disabled'#000+
   '11042_W_Use of ppc386.cfg is deprecated, please use fpc.cfg instead'#000+
   '11043_F_In options file $1 at line $2 \var{\#ELSE} directive without \'+
-  'var{\#IF(N)DEF} found'#000+
-  '11044_F','_Option "$1" is not, or not yet, supported on the current tar'+
-  'get platform'#000+
+  'v','ar{\#IF(N)DEF} found'#000+
+  '11044_F_Option "$1" is not, or not yet, supported on the current targe'+
+  't platform'#000+
   '11045_F_The feature "$1" is not, or not yet, supported on the selected'+
   ' target platform'#000+
-  '11046_N_DWARF debug information cannot be used with smart linking on t'+
-  'his targe','t, switching to static linking'#000+
+  '11046_N_DWARF debug information cannot be used with',' smart linking on'+
+  ' this target, switching to static linking'#000+
   '11047_W_Option "$1" is ignored for the current target platform.'#000+
   '12000_F_Cannot open whole program optimization feedback file "$1"'#000+
-  '12001_D_Processing whole program optimization information in wpo feedb'+
-  'ack file ','"$1"'#000+
+  '12001_D_Processing whole program optimization infor','mation in wpo fee'+
+  'dback file "$1"'#000+
   '12002_D_Finished processing the whole program optimization information'+
   ' in wpo feedback file "$1"'#000+
   '12003_E_Expected section header, but got "$2" at line $1 of wpo feedba'+
   'ck file'#000+
-  '12004_W_No handler registered for whole program optimization',' section'+
+  '12004_W_No handler registered fo','r whole program optimization section'+
   ' "$2" at line $1 of wpo feedback file, ignoring'#000+
   '12005_D_Found whole program optimization section "$1" with information'+
   ' about "$2"'#000+
   '12006_F_The selected whole program optimizations require a previously '+
-  'generated feedback file (use -Fw',' to specify)'#000+
+  'gene','rated feedback file (use -Fw to specify)'#000+
   '12007_E_No collected information necessary to perform "$1" whole progr'+
   'am optimization found'#000+
   '12008_F_Specify a whole program optimization feedback file to store th'+
   'e generated info in (using -FW)'#000+
-  '12009_E_Not generating any whole ','program optimization information, y'+
+  '12009','_E_Not generating any whole program optimization information, y'+
   'et a feedback file was specified (using -FW)'#000+
   '12010_E_Not performing any whole program optimizations, yet an input f'+
   'eedback file was specified (using -Fw)'#000+
-  '12011_D_Skipping whole program optimization section',' "$1", because no'+
+  '12011_D_Skipping whole ','program optimization section "$1", because no'+
   't needed by the requested optimizations'#000+
   '12012_W_Overriding previously read information for "$1" from feedback '+
   'input file using information in section "$2"'#000+
-  '12013_E_Cannot extract symbol liveness information from program when',' '+
-  'stripping symbols, use -Xs-'#000+
+  '12013_E_Cannot extract symbol liveness i','nformation from program when'+
+  ' stripping symbols, use -Xs-'#000+
   '12014_E_Cannot extract symbol liveness information from program when w'+
   'hen not linking'#000+
   '12015_F_Cannot find "$1" or "$2" to extract symbol liveness informatio'+
   'n from linked program'#000+
-  '12016_E_Error during reading symb','ol liveness information produced by'+
+  '12016','_E_Error during reading symbol liveness information produced by'+
   ' "$1"'#000+
   '12017_F_Error executing "$1" (exitcode: $2) to extract symbol informat'+
   'ion from linked program'#000+
   '12018_E_Collection of symbol liveness information can only help when u'+
-  'sing smart linking, use -CX -XX'#000+
-  '120','19_E_Cannot create specified whole program optimisation feedback '+
-  'file "$1"'#000+
+  'sing sm','art linking, use -CX -XX'#000+
+  '12019_E_Cannot create specified whole program optimisation feedback fi'+
+  'le "$1"'#000+
   '11023_Free Pascal Compiler version $FPCFULLVERSION [$FPCDATE] for $FPC'+
   'CPU'#010+
   'Copyright (c) 1993-2009 by Florian Klaempfl'#000+
-  '11024_Free Pascal Compiler version $FPCVERSION'#010,
+  '11024_Free Pascal C','ompiler version $FPCVERSION'#010+
   #010+
   'Compiler Date      : $FPCDATE'#010+
   'Compiler CPU Target: $FPCCPU'#010+
@@ -929,10 +931,10 @@ const msgtxt : array[0..000216,1..240] of char=(
   'Supported FPU instruction sets:'#010+
   '  $FPUINSTRUCTIONSETS'#010+
   #010+
-  'Supported ABI targets:'#010+
+  'Supported A','BI targets:'#010+
   '  $ABITARGETS'#010+
   #010+
-  'S','upported Optimizations:'#010+
+  'Supported Optimizations:'#010+
   '  $OPTIMIZATIONS'#010+
   #010+
   'Supported Whole Program Optimizations:'#010+
@@ -942,8 +944,8 @@ const msgtxt : array[0..000216,1..240] of char=(
   'Supported Microcontroller types:'#010+
   '  $CONTROLLERTYPES'#010+
   #010+
-  'This program comes under the GNU General Public Licence'#010+
-  'For more information rea','d COPYING.FPC'#010+
+  'This program comes under the GNU General Public Lice','nce'#010+
+  'For more information read COPYING.FPC'#010+
   #010+
   'Report bugs, suggestions, etc. to:'#010+
   '                 http://bugs.freepascal.org'#010+
@@ -951,61 +953,61 @@ const msgtxt : array[0..000216,1..240] of char=(
   '                 [email protected]'#000+
   '11025_**0*_Put + after a boolean switch option to enable it, - to disa'+
   'ble it'#010+
-  '**1a_The compiler doesn'#039't del','ete the generated assembler file'#010+
+  '*','*1a_The compiler doesn'#039't delete the generated assembler file'#010+
   '**2al_List sourcecode lines in assembler file'#010+
   '**2an_List node info in assembler file'#010+
   '*L2ap_Use pipes instead of creating temporary assembler files'#010+
-  '**2ar_List register allocation/release info in assembler fil','e'#010+
+  '**2ar_List register allocation/r','elease info in assembler file'#010+
   '**2at_List temp allocation/release info in assembler file'#010+
   '**1A<x>_Output format:'#010+
   '**2Adefault_Use default assembler'#010+
   '3*2Aas_Assemble using GNU AS'#010+
   '3*2Anasmcoff_COFF (Go32v2) file using Nasm'#010+
-  '3*2Anasmelf_ELF32 (Linux) file using Nasm'#010+
-  '3*2Anasmw','in32_Win32 object file using Nasm'#010+
+  '3*2Anasmelf_ELF32 (Linu','x) file using Nasm'#010+
+  '3*2Anasmwin32_Win32 object file using Nasm'#010+
   '3*2Anasmwdosx_Win32/WDOSX object file using Nasm'#010+
   '3*2Awasm_Obj file using Wasm (Watcom)'#010+
   '3*2Anasmobj_Obj file using Nasm'#010+
   '3*2Amasm_Obj file using Masm (Microsoft)'#010+
-  '3*2Atasm_Obj file using Tasm (Borland)'#010+
-  '3*2Aelf','_ELF (Linux) using internal writer'#010+
+  '3*2Atasm_Obj file ','using Tasm (Borland)'#010+
+  '3*2Aelf_ELF (Linux) using internal writer'#010+
   '3*2Acoff_COFF (Go32v2) using internal writer'#010+
   '3*2Apecoff_PE-COFF (Win32) using internal writer'#010+
   '4*2Aas_Assemble using GNU AS'#010+
   '6*2Aas_Unix o-file using GNU AS'#010+
-  '6*2Agas_GNU Motorola assembler'#010+
-  '6*2Amit_MIT Syntax ','(old GAS)'#010+
+  '6*2Agas_GNU Motorola a','ssembler'#010+
+  '6*2Amit_MIT Syntax (old GAS)'#010+
   '6*2Amot_Standard Motorola assembler'#010+
   'A*2Aas_Assemble using GNU AS'#010+
   'P*2Aas_Assemble using GNU AS'#010+
   'S*2Aas_Assemble using GNU AS'#010+
   '**1b_Generate browser info'#010+
   '**2bl_Generate local symbol info'#010+
-  '**1B_Build all modules'#010+
-  '**1C<x>_Code generation ','options:'#010+
+  '**1B_Build all modu','les'#010+
+  '**1C<x>_Code generation options:'#010+
   '**2Ca<x>_Select ABI, see fpc -i for possible values'#010+
   '**2Cb_Generate big-endian code'#010+
   '**2Cc<x>_Set default calling convention to <x>'#010+
   '**2CD_Create also dynamic library (not supported)'#010+
-  '**2Ce_Compilation with emulated floating point opco','des'#010+
+  '**2Ce_Compilation with ','emulated floating point opcodes'#010+
   '**2Cf<x>_Select fpu instruction set to use, see fpc -i for possible va'+
   'lues'#010+
   '**2CF<x>_Minimal floating point constant precision (default, 32, 64)'#010+
   '**2Cg_Generate PIC code'#010+
-  '**2Ch<n>_<n> bytes heap (between 1023 and 67107840)'#010+
-  '**2Ci_IO-checkin','g'#010+
+  '**2Ch<n>_<n> bytes heap (between 1023 an','d 67107840)'#010+
+  '**2Ci_IO-checking'#010+
   '**2Cn_Omit linking stage'#010+
   '**2Co_Check overflow of integer operations'#010+
   '**2CO_Check for possible overflow of integer operations'#010+
   '**2Cp<x>_Select instruction set, see fpc -i for possible values'#010+
-  '**2CP<x>=<y>_ packing settings'#010+
-  '**3CPPACKSET=<y>_ <','y> set allocation: 0, 1 or DEFAULT or NORMAL, 2, '+
-  '4 and 8'#010+
+  '**2CP<x>=<y>_ packing ','settings'#010+
+  '**3CPPACKSET=<y>_ <y> set allocation: 0, 1 or DEFAULT or NORMAL, 2, 4 '+
+  'and 8'#010+
   '**2Cr_Range checking'#010+
   '**2CR_Verify object method call validity'#010+
   '**2Cs<n>_Set stack checking size to <n>'#010+
   '**2Ct_Stack checking (for testing only, see manual)'#010+
-  '**2CX_Create also smartlinked',' library'#010+
+  '*','*2CX_Create also smartlinked library'#010+
   '**1d<x>_Defines the symbol <x>'#010+
   '**1D_Generate a DEF file'#010+
   '**2Dd<x>_Set description to <x>'#010+
@@ -1013,129 +1015,128 @@ const msgtxt : array[0..000216,1..240] of char=(
   '*O2Dw_PM application'#010+
   '**1e<x>_Set path to executable'#010+
   '**1E_Same as -Cn'#010+
-  '**1fPIC_Same as -Cg'#010+
-  '**1F<x>_Set file names',' and paths:'#010+
+  '**1fPIC_Same a','s -Cg'#010+
+  '**1F<x>_Set file names and paths:'#010+
   '**2Fa<x>[,y]_(for a program) load units <x> and [y] before uses is par'+
   'sed'#010+
   '**2Fc<x>_Set input codepage to <x>'#010+
   '**2FC<x>_Set RC compiler binary name to <x>'#010+
-  '**2Fd_Disable the compiler'#039's internal directory cache'#010+
-  '**2FD<x>_Set the dire','ctory where to search for compiler utilities'#010+
+  '**2Fd_Disable the compiler'#039's internal directory',' cache'#010+
+  '**2FD<x>_Set the directory where to search for compiler utilities'#010+
   '**2Fe<x>_Redirect error output to <x>'#010+
   '**2Ff<x>_Add <x> to framework path (Darwin only)'#010+
   '**2FE<x>_Set exe/unit output path to <x>'#010+
   '**2Fi<x>_Add <x> to include path'#010+
-  '**2Fl<x>_Add <x> to library path'#010+
-  '*','*2FL<x>_Use <x> as dynamic linker'#010+
+  '**2Fl<','x>_Add <x> to library path'#010+
+  '**2FL<x>_Use <x> as dynamic linker'#010+
   '**2Fm<x>_Load unicode conversion table from <x>.txt in the compiler di'+
   'r'#010+
   '**2Fo<x>_Add <x> to object path'#010+
   '**2Fr<x>_Load error message file <x>'#010+
-  '**2FR<x>_Set resource (.res) linker to <x>'#010+
-  '**2Fu<x>_Add <x> to un','it path'#010+
+  '**2FR<x>_Set resource (.res) linker t','o <x>'#010+
+  '**2Fu<x>_Add <x> to unit path'#010+
   '**2FU<x>_Set unit output path to <x>, overrides -FE'#010+
   '**2FW<x>_Store generated whole-program optimization feedback in <x>'#010+
   '**2Fw<x>_Load previously stored whole-program optimization feedback fr'+
   'om <x>'#010+
-  '*g1g_Generate debug information (de','fault format for target)'#010+
+  '*g1g_Ge','nerate debug information (default format for target)'#010+
   '*g2gc_Generate checks for pointers'#010+
   '*g2gh_Use heaptrace unit (for memory leak/corruption debugging)'#010+
   '*g2gl_Use line info unit (show more info with backtraces)'#010+
-  '*g2go<x>_Set debug information options'#010+
-  '*g3godwarfsets_ Ena','ble DWARF set debug information (breaks gdb < 6.5'+
-  ')'#010+
+  '*g2go<x>_Set debug information',' options'#010+
+  '*g3godwarfsets_ Enable DWARF set debug information (breaks gdb < 6.5)'#010+
   '*g3gostabsabsincludes_ Store absolute/full include file paths in Stabs'+
   #010+
   '*g2gp_Preserve case in stabs symbol names'#010+
   '*g2gs_Generate Stabs debug information'#010+
-  '*g2gt_Trash local variables (to detec','t uninitialized uses)'#010+
+  '*g2gt_Tra','sh local variables (to detect uninitialized uses)'#010+
   '*g2gv_Generates programs traceable with Valgrind'#010+
   '*g2gw_Generate DWARFv2 debug information (same as -gw2)'#010+
   '*g2gw2_Generate DWARFv2 debug information'#010+
   '*g2gw3_Generate DWARFv3 debug information'#010+
-  '**1i_Information'#010+
-  '**2iD_Return',' compiler date'#010+
+  '*','*1i_Information'#010+
+  '**2iD_Return compiler date'#010+
   '**2iV_Return short compiler version'#010+
   '**2iW_Return full compiler version'#010+
   '**2iSO_Return compiler OS'#010+
   '**2iSP_Return compiler host processor'#010+
   '**2iTO_Return target OS'#010+
   '**2iTP_Return target processor'#010+
-  '**1I<x>_Add <x> to include path'#010+
-  '**1','k<x>_Pass <x> to the linker'#010+
+  '**1I<x>','_Add <x> to include path'#010+
+  '**1k<x>_Pass <x> to the linker'#010+
   '**1l_Write logo'#010+
   '**1M<x>_Set language mode to <x>'#010+
   '**2Mfpc_Free Pascal dialect (default)'#010+
   '**2Mobjfpc_FPC mode with Object Pascal support'#010+
   '**2Mdelphi_Delphi 7 compatibility mode'#010+
-  '**2Mtp_TP/BP 7.0 compatibility mode'#010+
-  '**2','Mmacpas_Macintosh Pascal dialects compatibility mode'#010+
+  '**2Mtp_TP/B','P 7.0 compatibility mode'#010+
+  '**2Mmacpas_Macintosh Pascal dialects compatibility mode'#010+
   '**1n_Do not read the default config files'#010+
   '**1N<x>_Node tree optimizations'#010+
   '**2Nu_Unroll loops'#010+
   '**1o<x>_Change the name of the executable produced to <x>'#010+
-  '**1O<x>_Optimizations:'#010+
-  '**2O-_Disable',' optimizations'#010+
+  '**1O<x>_','Optimizations:'#010+
+  '**2O-_Disable optimizations'#010+
   '**2O1_Level 1 optimizations (quick and debugger friendly)'#010+
   '**2O2_Level 2 optimizations (-O1 + quick optimizations)'#010+
   '**2O3_Level 3 optimizations (-O2 + slow optimizations)'#010+
   '**2Oa<x>=<y>_Set alignment'#010+
-  '**2Oo[NO]<x>_Enable or disabl','e optimizations, see fpc -i for possibl'+
+  '*','*2Oo[NO]<x>_Enable or disable optimizations, see fpc -i for possibl'+
   'e values'#010+
   '**2Op<x>_Set target cpu for optimizing, see fpc -i for possible values'+
   #010+
   '**2OW<x>_Generate whole-program optimization feedback for optimization'+
-  ' <x>, see fpc -i for possible values'#010+
-  '**2Ow<x>_Perfo','rm whole-program optimization <x>, see fpc -i for poss'+
-  'ible values'#010+
+  ' <x>, see fpc -i for po','ssible values'#010+
+  '**2Ow<x>_Perform whole-program optimization <x>, see fpc -i for possib'+
+  'le values'#010+
   '**2Os_Optimize for size rather than speed'#010+
   '**1pg_Generate profile code for gprof (defines FPC_PROFILE)'#010+
   '**1R<x>_Assembler reading style:'#010+
-  '**2Rdefault_Use default assembler for t','arget'#010+
+  '**2Rdefault','_Use default assembler for target'#010+
   '3*2Ratt_Read AT&T style assembler'#010+
   '3*2Rintel_Read Intel style assembler'#010+
   '6*2RMOT_Read motorola style assembler'#010+
   '**1S<x>_Syntax options:'#010+
   '**2S2_Same as -Mobjfpc'#010+
   '**2Sc_Support operators like C (*=,+=,/= and -=)'#010+
-  '**2Sa_Turn on assertions'#010+
-  '**2S','d_Same as -Mdelphi'#010+
+  '*','*2Sa_Turn on assertions'#010+
+  '**2Sd_Same as -Mdelphi'#010+
   '**2Se<x>_Error options. <x> is a combination of the following:'#010+
   '**3*_<n> : Compiler halts after the <n> errors (default is 1)'#010+
   '**3*_w : Compiler also halts after warnings'#010+
-  '**3*_n : Compiler also halts after notes'#010+
-  '**3*_h : Co','mpiler also halts after hints'#010+
+  '**3*_n : Compiler also h','alts after notes'#010+
+  '**3*_h : Compiler also halts after hints'#010+
   '**2Sg_Enable LABEL and GOTO (default in -Mtp and -Mdelphi)'#010+
   '**2Sh_Use ansistrings by default instead of shortstrings'#010+
-  '**2Si_Turn on inlining of procedures/functions declared as "inline"'#010+
+  '**2Si_Turn on inlining of procedures/functions declared as "inline','"'#010+
   '**2Sk_Load fpcylix unit'#010+
-  '**','2SI<x>_Set interface style to <x>'#010+
+  '**2SI<x>_Set interface style to <x>'#010+
   '**3SIcom_COM compatible interface (default)'#010+
   '**3SIcorba_CORBA compatible interface'#010+
   '**2Sm_Support macros like C (global)'#010+
   '**2So_Same as -Mtp'#010+
-  '**2Ss_Constructor name must be init (destructor must be done)'#010+
-  '**2St_','Allow static keyword in objects'#010+
+  '**2Ss_Constructor name must be init (des','tructor must be done)'#010+
+  '**2St_Allow static keyword in objects'#010+
   '**2Sx_Enable exception keywords (default in Delphi/ObjFPC modes)'#010+
   '**1s_Do not call assembler and linker'#010+
   '**2sh_Generate script to link on host'#010+
-  '**2st_Generate script to link on target'#010+
-  '**2sr_Skip register allocat','ion phase (use with -alr)'#010+
+  '**2st_Generate script to link on target',#010+
+  '**2sr_Skip register allocation phase (use with -alr)'#010+
   '**1T<x>_Target operating system:'#010+
   '3*2Temx_OS/2 via EMX (including EMX/RSX extender)'#010+
   '3*2Tfreebsd_FreeBSD'#010+
   '3*2Tgo32v2_Version 2 of DJ Delorie DOS extender'#010+
   '3*2Tlinux_Linux'#010+
   '3*2Tnetbsd_NetBSD'#010+
-  '3*2Tnetware_Novell Netware Mo','dule (clib)'#010+
+  '3','*2Tnetware_Novell Netware Module (clib)'#010+
   '3*2Tnetwlibc_Novell Netware Module (libc)'#010+
   '3*2Topenbsd_OpenBSD'#010+
   '3*2Tos2_OS/2 / eComStation'#010+
   '3*2Tsunos_SunOS/Solaris'#010+
   '3*2Tsymbian_Symbian OS'#010+
   '3*2Twatcom_Watcom compatible DOS extender'#010+
-  '3*2Twdosx_WDOSX DOS extender'#010+
-  '3*2Twin32_Windows 32 ','Bit'#010+
+  '3*2Twdosx_WDOSX DOS ex','tender'#010+
+  '3*2Twin32_Windows 32 Bit'#010+
   '3*2Twince_Windows CE'#010+
   '4*2Tlinux_Linux'#010+
   '6*2Tamiga_Commodore Amiga'#010+
@@ -1145,90 +1146,90 @@ const msgtxt : array[0..000216,1..240] of char=(
   '6*2Tpalmos_PalmOS'#010+
   'A*2Tlinux_Linux'#010+
   'A*2Twince_Windows CE'#010+
-  'P*2Tamiga_AmigaOS on PowerPC'#010+
-  'P','*2Tdarwin_Darwin and Mac OS X on PowerPC'#010+
+  'P*','2Tamiga_AmigaOS on PowerPC'#010+
+  'P*2Tdarwin_Darwin and Mac OS X on PowerPC'#010+
   'P*2Tlinux_Linux on PowerPC'#010+
   'P*2Tmacos_Mac OS (classic) on PowerPC'#010+
   'P*2Tmorphos_MorphOS'#010+
   'S*2Tlinux_Linux'#010+
   '**1u<x>_Undefines the symbol <x>'#010+
   '**1U_Unit options:'#010+
-  '**2Un_Do not check where the unit name matches',' the file name'#010+
+  '**2Un_Do not check',' where the unit name matches the file name'#010+
   '**2Ur_Generate release unit files (never automatically recompiled)'#010+
   '**2Us_Compile a system unit'#010+
   '**1v<x>_Be verbose. <x> is a combination of the following letters:'#010+
-  '**2*_e : Show errors (default)       0 : Show nothing (except e','rrors'+
+  '**2*_e : Show errors (default)     ','  0 : Show nothing (except errors'+
   ')'#010+
   '**2*_w : Show warnings               u : Show unit info'#010+
   '**2*_n : Show notes                  t : Show tried/used files'#010+
   '**2*_h : Show hints                  c : Show conditionals'#010+
-  '**2*_i : Show general info           d : Show debug inf','o'#010+
+  '**2*_i : Show general info ','          d : Show debug info'#010+
   '**2*_l : Show linenumbers            r : Rhide/GCC compatibility mode'#010+
   '**2*_s : Show time stamps            q : Show message numbers'#010+
   '**2*_a : Show everything             x : Executable info (Win32 only)'#010+
-  '**2*_b : Write file names messages  ',' p : Write tree.log with parse t'+
+  '**2*_b :',' Write file names messages   p : Write tree.log with parse t'+
   'ree'#010+
   '**2*_    with full path              v : Write fpcdebug.txt with'#010+
   '**2*_                                    lots of debugging info'#010+
-  '**2*_m<x>,<y> : Don'#039't show messages numbered <x> and <y>'#010+
-  '3*1W<x>_Target-spe','cific options (targets)'#010+
+  '**2*_m<x>,<y> : Don'#039't show messages numbered <x','> and <y>'#010+
+  '3*1W<x>_Target-specific options (targets)'#010+
   'A*1W<x>_Target-specific options (targets)'#010+
   'P*1W<x>_Target-specific options (targets)'#010+
   'p*1W<x>_Target-specific options (targets)'#010+
   '3*2Wb_Create a bundle instead of a library (Darwin)'#010+
-  'P*2Wb_Create a bundle instead of a lib','rary (Darwin)'#010+
+  'P*2Wb_Crea','te a bundle instead of a library (Darwin)'#010+
   'p*2Wb_Create a bundle instead of a library (Darwin)'#010+
   '3*2WB_Create a relocatable image (Windows)'#010+
   'A*2WB_Create a relocatable image (Windows, Symbian)'#010+
-  '3*2WC_Specify console type application (EMX, OS/2, Windows)'#010+
-  'A*2WC_Specify conso','le type application (Windows)'#010+
+  '3*2WC_Specify console type application (EMX, OS/2, ','Windows)'#010+
+  'A*2WC_Specify console type application (Windows)'#010+
   'P*2WC_Specify console type application (Classic Mac OS)'#010+
   '3*2WD_Use DEFFILE to export functions of DLL or EXE (Windows)'#010+
   'A*2WD_Use DEFFILE to export functions of DLL or EXE (Windows)'#010+
-  '3*2We_Use external resources (','Darwin)'#010+
+  '3*','2We_Use external resources (Darwin)'#010+
   'P*2We_Use external resources (Darwin)'#010+
   'p*2We_Use external resources (Darwin)'#010+
   '3*2WF_Specify full-screen type application (EMX, OS/2)'#010+
   '3*2WG_Specify graphic type application (EMX, OS/2, Windows)'#010+
-  'A*2WG_Specify graphic type application (W','indows)'#010+
+  'A*2WG_Specify',' graphic type application (Windows)'#010+
   'P*2WG_Specify graphic type application (Classic Mac OS)'#010+
   '3*2Wi_Use internal resources (Darwin)'#010+
   'P*2Wi_Use internal resources (Darwin)'#010+
   'p*2Wi_Use internal resources (Darwin)'#010+
-  '3*2WN_Do not generate relocation code, needed for debugging (W','indows'+
+  '3*2WN_Do not generate relocation c','ode, needed for debugging (Windows'+
   ')'#010+
   'A*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
   '3*2WR_Generate relocation code (Windows)'#010+
   'A*2WR_Generate relocation code (Windows)'#010+
-  'P*2WT_Specify MPW tool type application (Classic Mac OS)'#010+
-  '3*2WX_Enable executable',' stack (Linux)'#010+
+  'P*2WT_Specify MPW tool type application (Classic Mac',' OS)'#010+
+  '3*2WX_Enable executable stack (Linux)'#010+
   'A*2WX_Enable executable stack (Linux)'#010+
   'p*2WX_Enable executable stack (Linux)'#010+
   'P*2WX_Enable executable stack (Linux)'#010+
   '**1X_Executable options:'#010+
-  '**2Xc_Pass --shared/-dynamic to the linker (BeOS, Darwin, FreeBSD, Lin'+
-  'ux)'#010+
-  '**2Xd_Do not',' use standard library search path (needed for cross comp'+
-  'ile)'#010+
+  '**2Xc_Pass --shared/-dynamic to the linker (BeOS, Darwin, ','FreeBSD, L'+
+  'inux)'#010+
+  '**2Xd_Do not use standard library search path (needed for cross compil'+
+  'e)'#010+
   '**2Xe_Use external linker'#010+
   '**2Xg_Create debuginfo in a separate file and add a debuglink section '+
   'to executable'#010+
-  '**2XD_Try to link units dynamically      (defines FPC_LINK_DYNAMIC)'#010+
-  '*','*2Xi_Use internal linker'#010+
+  '**2XD_Try to link units dynamically      ','(defines FPC_LINK_DYNAMIC)'#010+
+  '**2Xi_Use internal linker'#010+
   '**2Xm_Generate link map'#010+
   '**2XM<x>_Set the name of the '#039'main'#039' program routine (default i'+
   's '#039'main'#039')'#010+
   '**2XP<x>_Prepend the binutils names with the prefix <x>'#010+
-  '**2Xr<x>_Set the linker'#039's rlink-path to <x> (needed for cross c','o'+
+  '**2Xr<x>_Set the linker'#039's rlink-pat','h to <x> (needed for cross co'+
   'mpile, see the ld manual for more information) (BeOS, Linux)'#010+
   '**2XR<x>_Prepend <x> to all linker search paths (BeOS, Darwin, FreeBSD'+
   ', Linux, Mac OS, Solaris)'#010+
   '**2Xs_Strip all symbols from executable'#010+
-  '**2XS_Try to link units statically (defaul','t, defines FPC_LINK_STATIC'+
+  '**2XS_Try to l','ink units statically (default, defines FPC_LINK_STATIC'+
   ')'#010+
   '**2Xt_Link with static libraries (-static is passed to linker)'#010+
   '**2XX_Try to smartlink units             (defines FPC_LINK_SMART)'#010+
   '**1*_'#010+
   '**1?_Show this help'#010+
-  '**1h_Shows this help without waiting'
+  '**1h_Shows this help without ','waiting'
 );

+ 18 - 14
compiler/ncnv.pas

@@ -785,9 +785,6 @@ implementation
 
     function ttypeconvnode.typecheck_cord_to_pointer : tnode;
 
-      var
-        t : tnode;
-
       begin
         result:=nil;
         if left.nodetype=ordconstn then
@@ -806,8 +803,14 @@ implementation
                 internalerror(2001020801);
               {$endif} {$endif}
             {$endif}
-            t:=cpointerconstnode.create(TConstPtrUInt(tordconstnode(left).value.uvalue),resultdef);
-            result:=t;
+            
+            if not(nf_explicit in flags) then
+              if (tordconstnode(left).value.svalue=0) then
+                CGMessage(type_w_zero_to_nil)
+              else
+                { in Delphi mode, these aren't caught in compare_defs_ext }
+                IncompatibleTypes(left.resultdef,resultdef);
+            result:=cpointerconstnode.create(TConstPtrUInt(tordconstnode(left).value.uvalue),resultdef);
           end
          else
           internalerror(200104023);
@@ -1699,12 +1702,8 @@ implementation
               te_convert_l3,
               te_convert_l4,
               te_convert_l5:
-                begin
-                  result := simplify;
-                  if assigned(result) then
-                    exit;
-                  { nothing to do }
-                end;
+                { nothing to do }
+                ;
 
               te_convert_operator :
                 begin
@@ -1916,9 +1915,14 @@ implementation
               CGMessage(type_w_pointer_to_longint_conv_not_portable);
           end;
 
-        result := simplify;
-        if assigned(result) then
-          exit;
+        { tc_cord_2_pointer still requires a type check, which
+          simplify does not do }
+        if (convtype<>tc_cord_2_pointer) then
+          begin
+            result := simplify;
+            if assigned(result) then
+              exit;
+          end;
 
         { now call the resultdef helper to do constant folding }
         result:=typecheck_call_helper(convtype);

+ 12 - 2
compiler/pdecsub.pas

@@ -395,10 +395,11 @@ implementation
         old_block_type : tblock_type;
         currparast : tparasymtable;
         parseprocvar : tppv;
-        explicit_paraloc : boolean;
         locationstr : string;
         paranr : integer;
         dummytype : ttypesym;
+        explicit_paraloc,
+        need_array: boolean;
       begin
         old_block_type:=block_type;
         explicit_paraloc:=false;
@@ -497,7 +498,16 @@ implementation
            begin
              consume(_COLON);
              { check for an open array }
-             if token=_ARRAY then
+             need_array:=false;
+             { bitpacked open array are not yet supported }
+             if (token=_PACKED) and
+                not(cs_bitpacking in current_settings.localswitches) then
+               begin
+                 consume(_PACKED);
+                 need_array:=true;
+               end;
+             if (token=_ARRAY) or
+                need_array then
               begin
                 consume(_ARRAY);
                 consume(_OF);

+ 122 - 37
packages/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/08/28]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/10/18]
 #
 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 m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
@@ -265,19 +265,19 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad  gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users  iconvenc libxml proj4 imlib utmp  fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph libc unixutil graph pxlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad  gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users  iconvenc libxml proj4 fcl-extra imlib utmp  fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph libc unixutil graph pxlib
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv graph unzip gdbint
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick gdbint libpng mad tcl opengl gtk1 gtk2 librsvg a52 cdrom fpgtk openal fftw lua oggvorbis sdl openssl graph pcap httpd13 httpd20 httpd22 pxlib numlib winceunits cairo libxml gmp
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick gdbint libpng mad tcl opengl gtk1 gtk2 librsvg a52 cdrom fpgtk openal fftw lua fcl-extra oggvorbis sdl openssl graph pcap httpd13 httpd20 httpd22 pxlib numlib winceunits cairo libxml gmp
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo  bfd aspell svgalib imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg httpd13 httpd20 httpd22 pxlib numlib users iconvenc gmp
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo  bfd aspell svgalib imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg httpd13 httpd20 httpd22 pxlib numlib users iconvenc gmp fcl-extra
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo bfd aspell svgalib imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg httpd13 httpd20 httpd22 pxlib numlib iconvenc
@@ -289,7 +289,7 @@ ifeq ($(FULL_TARGET),i386-netbsd)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 bfd svgalib imlib utmp  fpgtk xforms fftw pcap ggi  openssl gnome1 httpd13 httpd20 httpd22 numlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 bfd svgalib fcl-extra imlib utmp  fpgtk xforms fftw pcap ggi  openssl gnome1 httpd13 httpd20 httpd22 numlib
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic
@@ -304,7 +304,7 @@ ifeq ($(FULL_TARGET),i386-wdosx)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp graph univint sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms  gnome1 httpd13 httpd20 httpd22 imlib opengles objcrtl
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra graph univint sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms  gnome1 httpd13 httpd20 httpd22 imlib opengles objcrtl
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib
@@ -325,10 +325,10 @@ ifeq ($(FULL_TARGET),i386-symbian)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad  gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users  iconvenc libxml proj4 imlib utmp  fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad  gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users  iconvenc libxml proj4 fcl-extra imlib utmp  fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo  bfd aspell svgalib imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg httpd13 httpd20 httpd22 pxlib numlib users iconvenc gmp
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo  bfd aspell svgalib imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg httpd13 httpd20 httpd22 pxlib numlib users iconvenc gmp fcl-extra
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib
@@ -349,7 +349,7 @@ ifeq ($(FULL_TARGET),m68k-embedded)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad  gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users  iconvenc libxml proj4 imlib utmp  fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad  gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users  iconvenc libxml proj4 fcl-extra imlib utmp  fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib
@@ -361,7 +361,7 @@ ifeq ($(FULL_TARGET),powerpc-macos)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp graph univint sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib objcrtl
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra graph univint sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib objcrtl
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv opengl
@@ -370,40 +370,40 @@ ifeq ($(FULL_TARGET),powerpc-embedded)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad  gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users  iconvenc libxml proj4 imlib utmp  fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad  gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users  iconvenc libxml proj4 fcl-extra imlib utmp  fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 bfd svgalib imlib utmp  fpgtk xforms fftw pcap ggi  openssl gnome1 httpd13 httpd20 httpd22 numlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 bfd svgalib fcl-extra imlib utmp  fpgtk xforms fftw pcap ggi  openssl gnome1 httpd13 httpd20 httpd22 numlib
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad  gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users  iconvenc libxml proj4 imlib utmp  fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad  gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users  iconvenc libxml proj4 fcl-extra imlib utmp  fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo  bfd aspell svgalib imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg httpd13 httpd20 httpd22 pxlib numlib users iconvenc gmp
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo  bfd aspell svgalib imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg httpd13 httpd20 httpd22 pxlib numlib users iconvenc gmp fcl-extra
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick tcl opengl gtk1 fpgtk fftw sdl openssl cdrom httpd13 httpd20 httpd22 numlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick tcl opengl gtk1 fpgtk fftw sdl openssl cdrom httpd13 httpd20 httpd22 numlib fcl-extra
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad  gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users  iconvenc libxml proj4 imlib utmp  fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad  gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users  iconvenc libxml proj4 fcl-extra imlib utmp  fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  palmunits
 endif
 ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp httpd13 httpd20 httpd22 opengles objcrtl
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra httpd13 httpd20 httpd22 opengles objcrtl
 endif
 ifeq ($(FULL_TARGET),arm-wince)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  winceunits httpd22 fcl-web fastcgi tcl fftw unzip zlib sqlite mysql ibase postgres oracle odbc sdl openssl oggvorbis numlib
@@ -421,10 +421,10 @@ ifeq ($(FULL_TARGET),arm-symbian)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad  gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users  iconvenc libxml proj4 imlib utmp  fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad  gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users  iconvenc libxml proj4 fcl-extra imlib utmp  fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic
@@ -433,7 +433,7 @@ ifeq ($(FULL_TARGET),avr-embedded)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic
 endif
 ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad  gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users  iconvenc libxml proj4 imlib utmp  fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic  fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad  gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users  iconvenc libxml proj4 fcl-extra imlib utmp  fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic
@@ -1600,6 +1600,7 @@ TARGET_DIRS_USERS=1
 TARGET_DIRS_ICONVENC=1
 TARGET_DIRS_LIBXML=1
 TARGET_DIRS_PROJ4=1
+TARGET_DIRS_FCL-EXTRA=1
 TARGET_DIRS_IMLIB=1
 TARGET_DIRS_UTMP=1
 TARGET_DIRS_FPGTK=1
@@ -1699,6 +1700,7 @@ TARGET_DIRS_FPGTK=1
 TARGET_DIRS_OPENAL=1
 TARGET_DIRS_FFTW=1
 TARGET_DIRS_LUA=1
+TARGET_DIRS_FCL-EXTRA=1
 TARGET_DIRS_OGGVORBIS=1
 TARGET_DIRS_SDL=1
 TARGET_DIRS_OPENSSL=1
@@ -1815,6 +1817,7 @@ TARGET_DIRS_NUMLIB=1
 TARGET_DIRS_USERS=1
 TARGET_DIRS_ICONVENC=1
 TARGET_DIRS_GMP=1
+TARGET_DIRS_FCL-EXTRA=1
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 TARGET_DIRS_HASH=1
@@ -2064,6 +2067,7 @@ TARGET_DIRS_CAIRO=1
 TARGET_DIRS_GTK1=1
 TARGET_DIRS_BFD=1
 TARGET_DIRS_SVGALIB=1
+TARGET_DIRS_FCL-EXTRA=1
 TARGET_DIRS_IMLIB=1
 TARGET_DIRS_UTMP=1
 TARGET_DIRS_FPGTK=1
@@ -2262,6 +2266,7 @@ TARGET_DIRS_OPENSSL=1
 TARGET_DIRS_NUMLIB=1
 TARGET_DIRS_ICONVENC=1
 TARGET_DIRS_GMP=1
+TARGET_DIRS_FCL-EXTRA=1
 TARGET_DIRS_GRAPH=1
 TARGET_DIRS_UNIVINT=1
 TARGET_DIRS_SDL=1
@@ -2508,6 +2513,7 @@ TARGET_DIRS_USERS=1
 TARGET_DIRS_ICONVENC=1
 TARGET_DIRS_LIBXML=1
 TARGET_DIRS_PROJ4=1
+TARGET_DIRS_FCL-EXTRA=1
 TARGET_DIRS_IMLIB=1
 TARGET_DIRS_UTMP=1
 TARGET_DIRS_FPGTK=1
@@ -2598,6 +2604,7 @@ TARGET_DIRS_NUMLIB=1
 TARGET_DIRS_USERS=1
 TARGET_DIRS_ICONVENC=1
 TARGET_DIRS_GMP=1
+TARGET_DIRS_FCL-EXTRA=1
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 TARGET_DIRS_HASH=1
@@ -2885,6 +2892,7 @@ TARGET_DIRS_USERS=1
 TARGET_DIRS_ICONVENC=1
 TARGET_DIRS_LIBXML=1
 TARGET_DIRS_PROJ4=1
+TARGET_DIRS_FCL-EXTRA=1
 TARGET_DIRS_IMLIB=1
 TARGET_DIRS_UTMP=1
 TARGET_DIRS_FPGTK=1
@@ -3066,6 +3074,7 @@ TARGET_DIRS_OPENSSL=1
 TARGET_DIRS_NUMLIB=1
 TARGET_DIRS_ICONVENC=1
 TARGET_DIRS_GMP=1
+TARGET_DIRS_FCL-EXTRA=1
 TARGET_DIRS_GRAPH=1
 TARGET_DIRS_UNIVINT=1
 TARGET_DIRS_SDL=1
@@ -3194,6 +3203,7 @@ TARGET_DIRS_USERS=1
 TARGET_DIRS_ICONVENC=1
 TARGET_DIRS_LIBXML=1
 TARGET_DIRS_PROJ4=1
+TARGET_DIRS_FCL-EXTRA=1
 TARGET_DIRS_IMLIB=1
 TARGET_DIRS_UTMP=1
 TARGET_DIRS_FPGTK=1
@@ -3327,6 +3337,7 @@ TARGET_DIRS_CAIRO=1
 TARGET_DIRS_GTK1=1
 TARGET_DIRS_BFD=1
 TARGET_DIRS_SVGALIB=1
+TARGET_DIRS_FCL-EXTRA=1
 TARGET_DIRS_IMLIB=1
 TARGET_DIRS_UTMP=1
 TARGET_DIRS_FPGTK=1
@@ -3427,6 +3438,7 @@ TARGET_DIRS_USERS=1
 TARGET_DIRS_ICONVENC=1
 TARGET_DIRS_LIBXML=1
 TARGET_DIRS_PROJ4=1
+TARGET_DIRS_FCL-EXTRA=1
 TARGET_DIRS_IMLIB=1
 TARGET_DIRS_UTMP=1
 TARGET_DIRS_FPGTK=1
@@ -3517,6 +3529,7 @@ TARGET_DIRS_NUMLIB=1
 TARGET_DIRS_USERS=1
 TARGET_DIRS_ICONVENC=1
 TARGET_DIRS_GMP=1
+TARGET_DIRS_FCL-EXTRA=1
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
 TARGET_DIRS_HASH=1
@@ -3567,6 +3580,7 @@ TARGET_DIRS_OPENSSL=1
 TARGET_DIRS_NUMLIB=1
 TARGET_DIRS_ICONVENC=1
 TARGET_DIRS_GMP=1
+TARGET_DIRS_FCL-EXTRA=1
 TARGET_DIRS_OPENGL=1
 TARGET_DIRS_X11=1
 TARGET_DIRS_CAIRO=1
@@ -3627,6 +3641,7 @@ TARGET_DIRS_HTTPD13=1
 TARGET_DIRS_HTTPD20=1
 TARGET_DIRS_HTTPD22=1
 TARGET_DIRS_NUMLIB=1
+TARGET_DIRS_FCL-EXTRA=1
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 TARGET_DIRS_HASH=1
@@ -3714,6 +3729,7 @@ TARGET_DIRS_USERS=1
 TARGET_DIRS_ICONVENC=1
 TARGET_DIRS_LIBXML=1
 TARGET_DIRS_PROJ4=1
+TARGET_DIRS_FCL-EXTRA=1
 TARGET_DIRS_IMLIB=1
 TARGET_DIRS_UTMP=1
 TARGET_DIRS_FPGTK=1
@@ -3807,6 +3823,7 @@ TARGET_DIRS_OPENSSL=1
 TARGET_DIRS_NUMLIB=1
 TARGET_DIRS_ICONVENC=1
 TARGET_DIRS_GMP=1
+TARGET_DIRS_FCL-EXTRA=1
 TARGET_DIRS_HTTPD13=1
 TARGET_DIRS_HTTPD20=1
 TARGET_DIRS_HTTPD22=1
@@ -4005,6 +4022,7 @@ TARGET_DIRS_USERS=1
 TARGET_DIRS_ICONVENC=1
 TARGET_DIRS_LIBXML=1
 TARGET_DIRS_PROJ4=1
+TARGET_DIRS_FCL-EXTRA=1
 TARGET_DIRS_IMLIB=1
 TARGET_DIRS_UTMP=1
 TARGET_DIRS_FPGTK=1
@@ -4075,6 +4093,7 @@ TARGET_DIRS_OPENSSL=1
 TARGET_DIRS_NUMLIB=1
 TARGET_DIRS_ICONVENC=1
 TARGET_DIRS_GMP=1
+TARGET_DIRS_FCL-EXTRA=1
 TARGET_DIRS_OPENGL=1
 TARGET_DIRS_X11=1
 TARGET_DIRS_CAIRO=1
@@ -4197,6 +4216,7 @@ TARGET_DIRS_USERS=1
 TARGET_DIRS_ICONVENC=1
 TARGET_DIRS_LIBXML=1
 TARGET_DIRS_PROJ4=1
+TARGET_DIRS_FCL-EXTRA=1
 TARGET_DIRS_IMLIB=1
 TARGET_DIRS_UTMP=1
 TARGET_DIRS_FPGTK=1
@@ -7029,6 +7049,51 @@ proj4:
 	$(MAKE) -C proj4 all
 .PHONY: proj4_all proj4_debug proj4_smart proj4_release proj4_units proj4_examples proj4_shared proj4_install proj4_sourceinstall proj4_exampleinstall proj4_distinstall proj4_zipinstall proj4_zipsourceinstall proj4_zipexampleinstall proj4_zipdistinstall proj4_clean proj4_distclean proj4_cleanall proj4_info proj4_makefiles proj4
 endif
+ifdef TARGET_DIRS_FCL-EXTRA
+fcl-extra_all:
+	$(MAKE) -C fcl-extra all
+fcl-extra_debug:
+	$(MAKE) -C fcl-extra debug
+fcl-extra_smart:
+	$(MAKE) -C fcl-extra smart
+fcl-extra_release:
+	$(MAKE) -C fcl-extra release
+fcl-extra_units:
+	$(MAKE) -C fcl-extra units
+fcl-extra_examples:
+	$(MAKE) -C fcl-extra examples
+fcl-extra_shared:
+	$(MAKE) -C fcl-extra shared
+fcl-extra_install:
+	$(MAKE) -C fcl-extra install
+fcl-extra_sourceinstall:
+	$(MAKE) -C fcl-extra sourceinstall
+fcl-extra_exampleinstall:
+	$(MAKE) -C fcl-extra exampleinstall
+fcl-extra_distinstall:
+	$(MAKE) -C fcl-extra distinstall
+fcl-extra_zipinstall:
+	$(MAKE) -C fcl-extra zipinstall
+fcl-extra_zipsourceinstall:
+	$(MAKE) -C fcl-extra zipsourceinstall
+fcl-extra_zipexampleinstall:
+	$(MAKE) -C fcl-extra zipexampleinstall
+fcl-extra_zipdistinstall:
+	$(MAKE) -C fcl-extra zipdistinstall
+fcl-extra_clean:
+	$(MAKE) -C fcl-extra clean
+fcl-extra_distclean:
+	$(MAKE) -C fcl-extra distclean
+fcl-extra_cleanall:
+	$(MAKE) -C fcl-extra cleanall
+fcl-extra_info:
+	$(MAKE) -C fcl-extra info
+fcl-extra_makefiles:
+	$(MAKE) -C fcl-extra makefiles
+fcl-extra:
+	$(MAKE) -C fcl-extra all
+.PHONY: fcl-extra_all fcl-extra_debug fcl-extra_smart fcl-extra_release fcl-extra_units fcl-extra_examples fcl-extra_shared fcl-extra_install fcl-extra_sourceinstall fcl-extra_exampleinstall fcl-extra_distinstall fcl-extra_zipinstall fcl-extra_zipsourceinstall fcl-extra_zipexampleinstall fcl-extra_zipdistinstall fcl-extra_clean fcl-extra_distclean fcl-extra_cleanall fcl-extra_info fcl-extra_makefiles fcl-extra
+endif
 ifdef TARGET_DIRS_IMLIB
 imlib_all:
 	$(MAKE) -C imlib all
@@ -8498,24 +8563,39 @@ fpmkunit_debug: fcl-base_debug fcl-process_debug paszlib_debug
 fpmkunit_smart: fcl-base_smart fcl-process_smart paszlib_smart
 fpmkunit_release: fcl-base_release fcl-process_release paszlib_release
 fpmkunit_shared: fcl-base_shared fcl-process_shared paszlib_shared
-ifneq ($(findstring $(OS_TARGET),win32 win64),)
-fcl-base_all: paszlib_all winunits-base_all winunits-jedi_all
-fcl-base_debug: paszlib_debug winunits-base_debug winunits-jedi_debug
-fcl-base_smart: paszlib_smart winunits-base_smart winunits-jedi_smart
-fcl-base_release: paszlib_release winunits-base_release winunits-jedi_release
-fcl-base_shared: paszlib_shared winunits-base_shared winunits-jedi_shared
+ifneq ($(findstring $(FULL_TARGET),powerpc-darwin i386-darwin),)
+fcl-base_all: univint_all paszlib_all
+fcl-base_debug: univint_debug paszlib_debug
+fcl-base_smart: univint_smart paszlib_smart
+fcl-base_release: univint_release paszlib_release
+fcl-base_shared: univint_shared paszlib_shared
+else
 fcl-base_all: paszlib_all
 fcl-base_debug: paszlib_debug
 fcl-base_smart: paszlib_smart
 fcl-base_release: paszlib_release
 fcl-base_shared: paszlib_shared
 endif
+ifneq ($(findstring $(OS_TARGET),win32 win64),)
+fcl-extra_all: fcl-base winunits-base_all winunits-jedi_all
+fcl-extra_debug: fcl-base_debug winunits-base_debug winunits-jedi_debug
+fcl-extra_smart: fcl-base_smart winunits-base_smart winunits-jedi_smart
+fcl-extra_release: fcl-base_release winunits-base_release winunits-jedi_release
+fcl-extra_shared: fcl-base_shared winunits-base_shared winunits-jedi_shared
+else
 ifneq ($(findstring $(FULL_TARGET),powerpc-darwin i386-darwin),)
-fcl-base_all: univint_all
-fcl-base_debug: univint_debug
-fcl-base_smart: univint_smart
-fcl-base_release: univint_release
-fcl-base_shared: univint_shared
+fcl-extra_all: univint_all fcl-base_all
+fcl-extra_debug: univint_debug fcl-base_debug
+fcl-extra_smart: univint_smart fcl-base_release
+fcl-extra_release: univint_release fcl-base_release
+fcl-extra_shared: univint_shared fcl-base_shared
+else
+fcl-extra_all: fcl-base_all
+fcl-extra_debug: fcl-base_debug
+fcl-extra_smart: fcl-base_smart
+fcl-extra_release: fcl-base_release
+fcl-extra_shared: fcl-base_shared
+endif
 endif
 fcl-xml_all: fcl-base_all
 fcl-xml_debug: fcl-base_debug
@@ -8693,11 +8773,16 @@ unixutil_shared: libc_shared fcl-base_shared
 unixutil_smart: libc_smart fcl-base_smart
 unixutil_debug: libc_debug fcl-base_debug
 unixutil_release: libc_release fcl-base_release
-winunits-jedi_all: winunits-base_all
-winunits-jedi_shared: winunits-base_shared
-winunits-jedi_smart: winunits-base_smart
-winunits-jedi_debug: winunits-base_debug
-winunits-jedi_release: winunits-base_release
+winunits-base_all: fcl-registry fcl-base_all
+winunits-base_shared: fcl-registry fcl-base_shared
+winunits-base_smart: fcl-registry fcl-base_smart
+winunits-base_debug: fcl-registry fcl-base_debug
+winunits-base_release: fcl-registry fcl-base_release
+winunits-jedi_all: winunits-base_all fcl-registry fcl-base_all
+winunits-jedi_shared: winunits-base_shared fcl-registry fcl-base_shared
+winunits-jedi_smart: winunits-base_smart fcl-registry fcl-base_smart
+winunits-jedi_debug: winunits-base_debug fcl-registry fcl-base_debug
+winunits-jedi_release: winunits-base_release fcl-registry fcl-base_release
 xforms_all: x11_all
 xforms_shared: x11_shared
 xforms_smart: x11_smart

+ 44 - 23
packages/Makefile.fpc

@@ -24,16 +24,16 @@ dirs_haiku=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc pos
 dirs_freebsd=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
                gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo  bfd aspell svgalib \
                imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg httpd13 httpd20 httpd22 pxlib numlib \
-               users iconvenc gmp
+               users iconvenc gmp fcl-extra
 dirs_darwin=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
-                libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp
+                libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra
 dirs_i386_darwin=graph univint sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms  gnome1 httpd13 httpd20 httpd22 imlib opengles objcrtl
 dirs_powerpc_darwin=graph univint sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib objcrtl
 dirs_x86_64_darwin=opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib
 dirs_powerpc64_darwin=opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib
 dirs_arm_darwin= httpd13 httpd20 httpd22 opengles objcrtl
 dirs_solaris=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
-               libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 bfd svgalib \
+               libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 bfd svgalib fcl-extra \
                imlib utmp  fpgtk xforms fftw pcap ggi  openssl gnome1 httpd13 httpd20 httpd22 numlib
 dirs_netbsd=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
                gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib \
@@ -43,13 +43,13 @@ dirs_openbsd=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc
                imlib utmp  fpgtk xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib
 dirs_linux=fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick \
                gdbint libpng x11 uuid ldap modplug dts mad  gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg \
-               a52 bfd aspell svgalib newt cdrom users  iconvenc libxml proj4 \
+               a52 bfd aspell svgalib newt cdrom users  iconvenc libxml proj4 fcl-extra \
                imlib utmp  fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp
 dirs_win32=fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick \
-               gdbint libpng mad tcl opengl gtk1 gtk2 librsvg a52 cdrom fpgtk openal fftw lua \
+               gdbint libpng mad tcl opengl gtk1 gtk2 librsvg a52 cdrom fpgtk openal fftw lua fcl-extra \
                oggvorbis sdl openssl graph pcap httpd13 httpd20 httpd22 pxlib numlib winceunits cairo libxml gmp
 dirs_win64=fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick \
-                tcl opengl gtk1 fpgtk fftw sdl openssl cdrom httpd13 httpd20 httpd22 numlib
+                tcl opengl gtk1 fpgtk fftw sdl openssl cdrom httpd13 httpd20 httpd22 numlib fcl-extra
 dirs_wince=winceunits httpd22 fcl-web fastcgi tcl fftw unzip zlib sqlite mysql ibase postgres oracle odbc sdl openssl oggvorbis numlib
 dirs_os2=fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib
 dirs_emx=fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib
@@ -74,13 +74,13 @@ fpmkunit_smart: fcl-base_smart fcl-process_smart paszlib_smart
 fpmkunit_release: fcl-base_release fcl-process_release paszlib_release
 fpmkunit_shared: fcl-base_shared fcl-process_shared paszlib_shared
 
-
-ifneq ($(findstring $(OS_TARGET),win32 win64),)
-fcl-base_all: paszlib_all winunits-base_all winunits-jedi_all
-fcl-base_debug: paszlib_debug winunits-base_debug winunits-jedi_debug
-fcl-base_smart: paszlib_smart winunits-base_smart winunits-jedi_smart
-fcl-base_release: paszlib_release winunits-base_release winunits-jedi_release
-fcl-base_shared: paszlib_shared winunits-base_shared winunits-jedi_shared
+ifneq ($(findstring $(FULL_TARGET),powerpc-darwin i386-darwin),)
+fcl-base_all: univint_all paszlib_all
+fcl-base_debug: univint_debug paszlib_debug
+fcl-base_smart: univint_smart paszlib_smart
+fcl-base_release: univint_release paszlib_release
+fcl-base_shared: univint_shared paszlib_shared
+else
 fcl-base_all: paszlib_all
 fcl-base_debug: paszlib_debug
 fcl-base_smart: paszlib_smart
@@ -88,12 +88,26 @@ fcl-base_release: paszlib_release
 fcl-base_shared: paszlib_shared
 endif
 
+ifneq ($(findstring $(OS_TARGET),win32 win64),)
+fcl-extra_all: fcl-base winunits-base_all winunits-jedi_all
+fcl-extra_debug: fcl-base_debug winunits-base_debug winunits-jedi_debug
+fcl-extra_smart: fcl-base_smart winunits-base_smart winunits-jedi_smart
+fcl-extra_release: fcl-base_release winunits-base_release winunits-jedi_release
+fcl-extra_shared: fcl-base_shared winunits-base_shared winunits-jedi_shared
+else
 ifneq ($(findstring $(FULL_TARGET),powerpc-darwin i386-darwin),)
-fcl-base_all: univint_all
-fcl-base_debug: univint_debug
-fcl-base_smart: univint_smart
-fcl-base_release: univint_release
-fcl-base_shared: univint_shared
+fcl-extra_all: univint_all fcl-base_all
+fcl-extra_debug: univint_debug fcl-base_debug
+fcl-extra_smart: univint_smart fcl-base_release
+fcl-extra_release: univint_release fcl-base_release
+fcl-extra_shared: univint_shared fcl-base_shared
+else
+fcl-extra_all: fcl-base_all
+fcl-extra_debug: fcl-base_debug
+fcl-extra_smart: fcl-base_smart
+fcl-extra_release: fcl-base_release
+fcl-extra_shared: fcl-base_shared
+endif
 endif
 
 fcl-xml_all: fcl-base_all
@@ -298,11 +312,18 @@ unixutil_smart: libc_smart fcl-base_smart
 unixutil_debug: libc_debug fcl-base_debug
 unixutil_release: libc_release fcl-base_release
 
-winunits-jedi_all: winunits-base_all
-winunits-jedi_shared: winunits-base_shared
-winunits-jedi_smart: winunits-base_smart
-winunits-jedi_debug: winunits-base_debug
-winunits-jedi_release: winunits-base_release
+winunits-base_all: fcl-registry fcl-base_all
+winunits-base_shared: fcl-registry fcl-base_shared
+winunits-base_smart: fcl-registry fcl-base_smart
+winunits-base_debug: fcl-registry fcl-base_debug
+winunits-base_release: fcl-registry fcl-base_release
+
+winunits-jedi_all: winunits-base_all fcl-registry fcl-base_all
+winunits-jedi_shared: winunits-base_shared fcl-registry fcl-base_shared
+winunits-jedi_smart: winunits-base_smart fcl-registry fcl-base_smart
+winunits-jedi_debug: winunits-base_debug fcl-registry fcl-base_debug
+winunits-jedi_release: winunits-base_release fcl-registry fcl-base_release
+
 
 xforms_all: x11_all
 xforms_shared: x11_shared

+ 27 - 83
packages/fcl-base/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/08/02]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/10/02]
 #
 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 m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
@@ -273,19 +273,19 @@ ifeq ($(OS_TARGET),win64)
 INSTALL_DATADIR=${INSTALL_UNITDIR}
 endif
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs   fptimer
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  fileinfo syncobjs daemonapp ServiceManager fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  fileinfo syncobjs  fptimer
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs fptimer
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs
@@ -294,10 +294,10 @@ ifeq ($(FULL_TARGET),i386-haiku)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  fptimer
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs fptimer
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
@@ -306,13 +306,13 @@ ifeq ($(FULL_TARGET),i386-netware)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  fptimer
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs fptimer
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
@@ -333,13 +333,13 @@ ifeq ($(FULL_TARGET),i386-symbian)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs   fptimer
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs fptimer
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  fptimer
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
@@ -348,7 +348,7 @@ ifeq ($(FULL_TARGET),m68k-atari)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  fptimer
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
@@ -357,10 +357,10 @@ ifeq ($(FULL_TARGET),m68k-embedded)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs   fptimer
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  fptimer
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
@@ -369,7 +369,7 @@ ifeq ($(FULL_TARGET),powerpc-macos)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs fptimer
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
@@ -378,40 +378,40 @@ ifeq ($(FULL_TARGET),powerpc-embedded)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs   fptimer
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  fptimer
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs fptimer
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs   fptimer
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs fptimer
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs fptimer
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  fileinfo syncobjs daemonapp ServiceManager fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  fileinfo syncobjs  fptimer
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs   fptimer
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
 endif
 ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs fptimer
 endif
 ifeq ($(FULL_TARGET),arm-wince)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  fileinfo syncobjs fptimer
@@ -429,10 +429,10 @@ ifeq ($(FULL_TARGET),arm-symbian)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs   fptimer
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs fptimer
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
@@ -441,7 +441,7 @@ ifeq ($(FULL_TARGET),avr-embedded)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
 endif
 ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85  syncobjs   fptimer
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
 override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
@@ -1924,8 +1924,6 @@ REQUIRE_PACKAGES_RTL=1
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_WINUNITS-BASE=1
-REQUIRE_PACKAGES_WINUNITS-JEDI=1
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 REQUIRE_PACKAGES_RTL=1
@@ -2049,8 +2047,6 @@ REQUIRE_PACKAGES_UNIVINT=1
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_WINUNITS-BASE=1
-REQUIRE_PACKAGES_WINUNITS-JEDI=1
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 REQUIRE_PACKAGES_RTL=1
@@ -2125,58 +2121,6 @@ ifdef UNITDIR_RTL
 override COMPILER_UNITDIR+=$(UNITDIR_RTL)
 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
-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
-endif
-ifdef REQUIRE_PACKAGES_WINUNITS-JEDI
-PACKAGEDIR_WINUNITS-JEDI:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /winunits-jedi/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_WINUNITS-JEDI),)
-ifneq ($(wildcard $(PACKAGEDIR_WINUNITS-JEDI)/units/$(TARGETSUFFIX)),)
-UNITDIR_WINUNITS-JEDI=$(PACKAGEDIR_WINUNITS-JEDI)/units/$(TARGETSUFFIX)
-else
-UNITDIR_WINUNITS-JEDI=$(PACKAGEDIR_WINUNITS-JEDI)
-endif
-ifdef CHECKDEPEND
-$(PACKAGEDIR_WINUNITS-JEDI)/$(FPCMADE):
-	$(MAKE) -C $(PACKAGEDIR_WINUNITS-JEDI) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_WINUNITS-JEDI)/$(FPCMADE)
-endif
-else
-PACKAGEDIR_WINUNITS-JEDI=
-UNITDIR_WINUNITS-JEDI:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /winunits-jedi/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_WINUNITS-JEDI),)
-UNITDIR_WINUNITS-JEDI:=$(firstword $(UNITDIR_WINUNITS-JEDI))
-else
-UNITDIR_WINUNITS-JEDI=
-endif
-endif
-ifdef UNITDIR_WINUNITS-JEDI
-override COMPILER_UNITDIR+=$(UNITDIR_WINUNITS-JEDI)
-endif
-endif
 ifdef REQUIRE_PACKAGES_UNIVINT
 PACKAGEDIR_UNIVINT:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /univint/Makefile.fpc,$(PACKAGESDIR))))))
 ifneq ($(PACKAGEDIR_UNIVINT),)

+ 8 - 10
packages/fcl-base/Makefile.fpc

@@ -7,8 +7,6 @@ name=fcl-base
 version=2.5.1
 
 [require]
-packages_win32=winunits-base winunits-jedi
-packages_win64=winunits-base winunits-jedi
 packages_darwin=univint
 
 [target]
@@ -19,14 +17,14 @@ units=contnrs inifiles rtfpars idea base64 gettext \
       maskutils fpexprpars ascii85
 units_beos=syncobjs
 units_haiku=syncobjs
-units_freebsd=syncobjs daemonapp fptimer
-units_darwin=syncobjs daemonapp fptimer
-units_solaris=syncobjs daemonapp fptimer
-units_netbsd=daemonapp fptimer
-units_openbsd=daemonapp fptimer
-units_linux=syncobjs daemonapp fptimer
-units_win32=fileinfo syncobjs daemonapp ServiceManager fptimer
-units_win64=fileinfo syncobjs daemonapp ServiceManager fptimer
+units_freebsd=syncobjs fptimer
+units_darwin=syncobjs fptimer
+units_solaris=syncobjs fptimer
+units_netbsd=  fptimer
+units_openbsd= fptimer
+units_linux=syncobjs   fptimer
+units_win32=fileinfo syncobjs  fptimer
+units_win64=fileinfo syncobjs  fptimer
 units_wince=fileinfo syncobjs fptimer
 # syncobjs requires GetLastOSError function
 units_netware=syncobjs

+ 3 - 3
packages/fcl-db/src/codegen/fpcgtiopf.pp

@@ -340,7 +340,7 @@ begin
   EndMethod(Strings,S);
   // AcceptVisitor
   S:=BeginAcceptVisitor(Strings,C,ObjectClassName);
-  AddLn(Strings,'Result:=Result and (Visited.ObjectState in [posCreate,posdelete,posUpdate]);');
+  AddLn(Strings,'Result:=Result and (Visited.ObjectState in [posCreate,posDelete,posUpdate]);');
   DecIndent;
   EndMethod(Strings,S);
   S:=BeginSetupParams(Strings,C,ObjectClassName,True);
@@ -431,7 +431,7 @@ begin
   // Common setup case
   If (V in [voCreate,voUpdate]) and (UseCommonSetupParams) then
     A:=Format('TUpdateCreate%sVisitor',[StripType(ObjectClassName)])
-  else If (V in [voCreate,voDelete,voUpdate,voCommonSetupParams]) then
+  else If (V in [voCreate,voDelete,voUpdate,voCommonSetupParams,voSingleSaveVisitor]) then
     A:='TtiVisitorUpdate'
   else
     A:='TtiVisitorSelect';
@@ -1226,7 +1226,7 @@ begin
 end;
 
 Initialization
-  RegisterCodeGenerator('tiOPF','tiOPF class and visitors for the data',TTiOPFCodeGenerator);
+  RegisterCodeGenerator('tiOPF','tiOPF classes and hard-coded visitors for the data',TTiOPFCodeGenerator);
 
 Finalization
   UnRegisterCodeGenerator(TTiOPFCodeGenerator);

+ 2 - 0
packages/fcl-db/src/codegen/fpddcodegen.pp

@@ -1279,6 +1279,8 @@ begin
     begin
     Addln(Strings,'Unit '+CodeOptions.UnitName+';');
     Addln(Strings);
+    Addln(Strings, '{$mode objfpc}{$H+}');
+    Addln(Strings);
     Addln(Strings,'Interface');
     Addln(Strings);
     S:=GetInterfaceUsesClause;

+ 7 - 5
packages/fcl-db/src/paradox/paradox.pp

@@ -633,7 +633,7 @@ var
   No,pft,flen : integer;
   pxf          : PPx_field;
   Value        : Pchar;
-  Y,M,D        : cint;
+  D            : clong;
   longv        : Clong;
   R            : Double;
   c            : Char;
@@ -656,7 +656,9 @@ begin
         If result then
           begin
           Move(Value^,Buffer^,flen);
-          doc^.free(doc,value);
+          If (Flen<=Field.DataSize) then
+            Pchar(Buffer)[flen]:=#0;
+          FDoc^.free(FDoc,value);
           end;
         end;
       pxfDate:
@@ -695,7 +697,7 @@ begin
         begin
         Result:=(PX_get_data_byte(FDoc,Buf,flen,@C)>0);
         If result then
-          PBoolean(Buffer)^:=(C<>#0);
+          PWordBool(Buffer)^:=(C<>#0);
         end;
       pxfBytes:
         begin
@@ -728,9 +730,9 @@ begin
           begin
           R:=R/1000.0;
           longv:=trunc(R /86400);
-          PX_SdnToGregorian(longv+1721425,@Y,@M,@D);
+          D:=Longv+1721425-2415019;
           longv:=(Trunc(r) mod 86400);
-          PDateTime(Buffer)^:=EncodeDate(Y,M,d)+(Longv/MSecsPerday);
+          PDateTime(Buffer)^:=D+(Longv/MSecsPerday);
           end;
         end;
       pxfBCD:

+ 2831 - 0
packages/fcl-extra/Makefile

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

+ 52 - 0
packages/fcl-extra/Makefile.fpc

@@ -0,0 +1,52 @@
+#
+#   Makefile.fpc for Free Component Library
+#
+
+[package]
+name=fcl-extra
+version=2.5.1
+
+[require]
+packages=fcl-base
+packages_win32=winunits-base winunits-jedi  
+packages_win64=winunits-base winunits-jedi   
+packages_darwin=univint  
+
+[target]
+ 
+units_freebsd=daemonapp
+units_darwin=daemonapp 
+units_solaris= daemonapp 
+units_netbsd=daemonapp 
+units_openbsd=daemonapp
+units_linux=daemonapp  
+units_win32= daemonapp ServiceManager 
+units_win64=daemonapp ServiceManager 
+rsts=daemonapp servicemanager
+ 
+[compiler]
+options=-S2h
+includedir=src/$(OS_TARGET) src src/dummy
+includedir_linux=src/unix
+includedir_freebsd=src/unix
+includedir_darwin=src/unix
+includedir_netbsd=src/unix
+includedir_openbsd=src/unix
+includedir_solaris=src/unix
+includedir_qnx=src/unix
+includedir_beos=src/unix
+includedir_haiku=src/unix
+includedir_emx=src/os2
+includedir_win32=src/win
+includedir_win64=src/win
+includedir_wince=src/win
+sourcedir=src/$(OS_TARGET) src
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../..
+
+[rules]
+.NOTPARALLEL:

+ 197 - 0
packages/fcl-extra/fpmake.pp

@@ -0,0 +1,197 @@
+{$ifndef ALLPACKAGES}
+{$mode objfpc}{$H+}
+program fpmake;
+
+uses fpmkunit;
+
+Var
+  T : TTarget;
+  P : TPackage;
+begin
+  With Installer do
+    begin
+{$endif ALLPACKAGES}
+
+    P:=AddPackage('fcl-base');
+{$ifdef ALLPACKAGES}
+    P.Directory:='fcl-base';
+{$endif ALLPACKAGES}
+    P.Version:='2.2.2-0';
+    P.Dependencies.Add('winunits-jedi',[Win32,Win64]);
+
+    P.Author := '<various>';
+    P.License := 'LGPL with modification, ';
+    P.ExternalURL := 'www.freepascal.org';
+    P.Email := '';
+    P.Description := 'Base library of Free Component Libraries(FCL), FPC''s OOP library.';
+    P.NeedLibC:= false;
+
+    P.SourcePath.Add('src');
+    P.SourcePath.Add('src/unix',AllUnixOSes);
+    P.SourcePath.Add('src/win',AllWindowsOSes);
+    P.SourcePath.Add('src/$(OS)',AllOSes-AllWindowsOSes-AllUnixOSes);
+    P.IncludePath.Add('src');
+    P.IncludePath.Add('src/unix',AllUnixOSes);
+    P.IncludePath.Add('src/win',AllWindowsOSes);
+    P.IncludePath.Add('src/$(OS)',AllOSes-AllWindowsOSes-AllUnixOSes);
+    P.IncludePath.Add('src/dummy',AllOSes);
+
+    T:=P.Targets.AddUnit('ascii85.pp');
+    T:=P.Targets.AddUnit('avl_tree.pp');
+    T:=P.Targets.AddUnit('base64.pp');
+    T:=P.Targets.AddUnit('blowfish.pp');
+    T:=P.Targets.AddUnit('bufstream.pp');
+    T:=P.Targets.AddUnit('cachecls.pp');
+      T.ResourceStrings:=true;
+    T:=P.Targets.AddUnit('contnrs.pp');
+    T:=P.Targets.AddUnit('custapp.pp');
+      T.ResourceStrings:=true;
+    T:=P.Targets.AddUnit('daemonapp.pp',AllWindowsOSes+AllUnixOSes);
+      with T.Dependencies do
+        begin
+          AddInclude('daemonapp.inc');
+          AddUnit('custapp');
+          AddUnit('eventlog');
+        end;
+    T:=P.Targets.AddUnit('eventlog.pp');
+      T.ResourceStrings:=true;
+      with T.Dependencies do
+        begin
+          AddInclude('eventlog.inc');
+        end;
+    T:=P.Targets.AddUnit('fptimer.pp',AllWindowsOSes+AllUnixOSes);
+    T:=P.Targets.AddUnit('gettext.pp');
+    T:=P.Targets.AddUnit('idea.pp');
+    T:=P.Targets.AddUnit('inicol.pp');
+      T.ResourceStrings:=true;
+      with T.Dependencies do
+        begin
+          AddUnit('inifiles');
+        end;
+    T:=P.Targets.AddUnit('inifiles.pp');
+      with T.Dependencies do
+        begin
+          AddUnit('contnrs');
+        end;
+    T:=P.Targets.AddUnit('iostream.pp');
+    T:=P.Targets.AddUnit('libtar.pp');
+    T:=P.Targets.AddUnit('maskutils.pp');
+    T:=P.Targets.AddUnit('pooledmm.pp');
+    T:=P.Targets.AddUnit('rtfpars.pp');
+      with T.Dependencies do
+        begin
+          AddInclude('rtfdata.inc');
+        end;
+    T:=P.Targets.AddUnit('rttiutils.pp');
+    T:=P.Targets.AddUnit('streamcoll.pp');
+      T.ResourceStrings:=true;
+    T:=P.Targets.AddUnit('streamex.pp');
+    T:=P.Targets.AddUnit('streamio.pp');
+    T:=P.Targets.AddUnit('syncobjs.pp',AllOSes-[GO32v2,OS2,EMX]);
+    T:=P.Targets.AddUnit('uriparser.pp');
+    T:=P.Targets.AddUnit('wformat.pp');
+    T:=P.Targets.AddUnit('whtml.pp');
+      with T.Dependencies do
+        begin
+          AddUnit('wformat');
+        end;
+    T:=P.Targets.AddUnit('wtex.pp');
+      with T.Dependencies do
+        begin
+          AddUnit('wformat');
+        end;
+    T:=P.Targets.AddUnit('fpexprpars.pp');
+
+    // Windows units
+    T:=P.Targets.AddUnit('ServiceManager.pas',[Win32,Win64]);
+    T:=P.Targets.AddUnit('fileinfo.pp',AllWindowsOSes);
+
+    // Additional sources
+    P.Sources.AddSrcFiles('src/win/fclel.*');
+
+    // Examples
+    P.ExamplePath.Add('examples');
+      T:=P.Targets.AddExampleProgram('asiotest.pp');
+      T:=P.Targets.AddExampleProgram('b64dec.pp');
+      T:=P.Targets.AddExampleProgram('b64enc.pp');
+      T:=P.Targets.AddExampleProgram('b64.pp');
+      T:=P.Targets.AddExampleProgram('b64test2.pp');
+      T:=P.Targets.AddExampleProgram('b64test.pp');
+      T:=P.Targets.AddExampleProgram('base64decodingtestcase.pas');
+      T:=P.Targets.AddExampleProgram('cachetest.pp');
+      T:=P.Targets.AddExampleProgram('cfgtest.pp');
+      T:=P.Targets.AddExampleProgram('daemon.pp');
+      T:=P.Targets.AddExampleProgram('daemon.txt');
+      T:=P.Targets.AddExampleProgram('dbugsrv.pp');
+      T:=P.Targets.AddExampleProgram('debugtest.pp');
+      T:=P.Targets.AddExampleProgram('doecho.pp');
+      T:=P.Targets.AddExampleProgram('dparser.pp');
+      T:=P.Targets.AddExampleProgram('dsockcli.pp');
+      T:=P.Targets.AddExampleProgram('dsocksvr.pp');
+      T:=P.Targets.AddExampleProgram('fpdoc.dtd');
+      T:=P.Targets.AddExampleProgram('fstream.pp');
+      T:=P.Targets.AddExampleProgram('htdump.pp');
+      T:=P.Targets.AddExampleProgram('ipcclient.pp');
+      T:=P.Targets.AddExampleProgram('ipcserver.pp');
+      T:=P.Targets.AddExampleProgram('isockcli.pp');
+      T:=P.Targets.AddExampleProgram('isocksvr.pp');
+      T:=P.Targets.AddExampleProgram('istream.pp');
+      T:=P.Targets.AddExampleProgram('list.pp');
+      T:=P.Targets.AddExampleProgram('mstream.pp');
+      T:=P.Targets.AddExampleProgram('poolmm1.pp');
+      T:=P.Targets.AddExampleProgram('poolmm2.pp');
+      T:=P.Targets.AddExampleProgram('restest.pp');
+      T:=P.Targets.AddExampleProgram('showver.pp');
+      T:=P.Targets.AddExampleProgram('sockcli.pp');
+      T:=P.Targets.AddExampleProgram('socksvr.pp');
+      T:=P.Targets.AddExampleProgram('sstream.pp');
+      T:=P.Targets.AddExampleProgram('stringl.pp');
+      T:=P.Targets.AddExampleProgram('tarmakerconsgzip.pas');
+      T:=P.Targets.AddExampleProgram('tarmakercons.pas');
+      T:=P.Targets.AddExampleProgram('testapp.pp');
+      T:=P.Targets.AddExampleProgram('testbf.pp');
+      T:=P.Targets.AddExampleProgram('testbs.pp');
+      T:=P.Targets.AddExampleProgram('testcgi.pp');
+      T:=P.Targets.AddExampleProgram('testcont.pp');
+      T:=P.Targets.AddExampleProgram('testez.pp');
+      T:=P.Targets.AddExampleProgram('testhres.pp');
+      T:=P.Targets.AddExampleProgram('testnres.pp');
+      T:=P.Targets.AddExampleProgram('testol.pp');
+      T:=P.Targets.AddExampleProgram('testproc.pp');
+      T:=P.Targets.AddExampleProgram('testreg.pp');
+      T:=P.Targets.AddExampleProgram('testrhre.pp');
+      T:=P.Targets.AddExampleProgram('testrnre.pp');
+      T:=P.Targets.AddExampleProgram('testrsre.pp');
+      T:=P.Targets.AddExampleProgram('testrtf.pp');
+      T:=P.Targets.AddExampleProgram('testser.pp');
+      T:=P.Targets.AddExampleProgram('testsres.pp');
+      T:=P.Targets.AddExampleProgram('testtimer.pp');
+      T:=P.Targets.AddExampleProgram('testunzip.pp');
+      T:=P.Targets.AddExampleProgram('testur.pp');
+      T:=P.Targets.AddExampleProgram('testweb.pp');
+      T:=P.Targets.AddExampleProgram('testz2.pp');
+      T:=P.Targets.AddExampleProgram('testzip.pp');
+      T:=P.Targets.AddExampleProgram('testz.pp');
+      T:=P.Targets.AddExampleProgram('threads.pp');
+      T:=P.Targets.AddExampleProgram('tidea.pp');
+      T:=P.Targets.AddExampleProgram('tstelcmd.pp');
+      T:=P.Targets.AddExampleProgram('tstelgtk.pp');
+      T:=P.Targets.AddExampleProgram('txmlreg.pp');
+      T:=P.Targets.AddExampleProgram('xmldump.pp');
+
+      // example data files.
+      // README
+      // kword.xml
+      // overview.rtf
+      // showver.rc
+      // showver.res
+      // simple.xml
+      // parser.dat
+      // testcgi.html
+
+{$ifndef ALLPACKAGES}
+    Run;
+    end;
+end.
+{$endif ALLPACKAGES}
+

+ 2 - 2
packages/fcl-base/src/daemonapp.pp → packages/fcl-extra/src/daemonapp.pp

@@ -360,7 +360,6 @@ Type
     procedure SetupLogger;
     procedure StopLogger;
     Procedure DoRun; override;
-    Property  OnRun : TNotifyEvent Read FOnRun Write FOnRun;
     Property SysData : TObject Read FSysData Write FSysData;
   Public
     Procedure ShowException(E : Exception); override;
@@ -370,6 +369,7 @@ Type
     procedure RunDaemons;
     procedure UnInstallDaemons;
     procedure CreateForm(InstanceClass: TComponentClass; var Reference); virtual;
+    Property  OnRun : TNotifyEvent Read FOnRun Write FOnRun;
     Property Logger : TEventLog Read FLogger;
     Property GUIMainLoop : TGuiLoopEvent Read FGUIMainLoop Write FGuiMainLoop;
     Property GuiHandle : THandle Read FGUIHandle Write FGUIHandle;
@@ -418,6 +418,7 @@ Var
   SStatus : Array[1..5] of string =
     ('Stop','Pause','Continue','Interrogate','Shutdown');
   DefaultDaemonOptions : TDaemonOptions =  [doAllowStop,doAllowPause];
+  AppClass      : TCustomDaemonApplicationClass;
   
 implementation
 
@@ -429,7 +430,6 @@ Var
   MapperClass   : TCustomDaemonMapperClass;
   DesignMapper  : TCustomDaemonMapper;
   DaemonClasses : TStringList;
-  AppClass      : TCustomDaemonApplicationClass;
   
 {$ifdef svcdebug}
 Var

+ 0 - 0
packages/fcl-base/src/unix/daemonapp.inc → packages/fcl-extra/src/unix/daemonapp.inc


+ 0 - 0
packages/fcl-base/src/win/ServiceManager.pas → packages/fcl-extra/src/win/ServiceManager.pas


+ 0 - 0
packages/fcl-base/src/win/daemonapp.inc → packages/fcl-extra/src/win/daemonapp.inc


+ 6 - 0
packages/fcl-fpcunit/src/DUnitCompatibleInterface.inc

@@ -16,6 +16,7 @@
     class procedure CheckNull(obj: IUnknown; msg: string = ''); overload;
     class procedure CheckNull(obj: TObject; msg: string = ''); overload;
     class procedure CheckNotNull(obj: TObject; msg: string = ''); overload;
+    class procedure CheckNotNull(obj: IUnknown; msg: string = ''); overload; virtual;
     class procedure CheckIs(obj :TObject; pClass: TClass; msg: string = ''); overload;
     class procedure CheckSame(expected, actual: TObject; msg: string = ''); overload;
     class procedure FailNotEquals(expected, actual: string; msg: string = ''; errorAddr: Pointer = nil); virtual;
@@ -120,6 +121,11 @@ begin
   AssertNotNull(msg, obj);
 end;
 
+class procedure TAssert.CheckNotNull(obj: IUnknown; msg: string);
+begin
+  AssertNotNullIntf(msg, obj);
+end;
+
 class procedure TAssert.CheckIs(obj: TObject; pClass: TClass; msg: string);
 begin
   Assert(pClass <> nil);

+ 1 - 1
packages/fcl-net/src/mkxmlrpc.pp

@@ -738,7 +738,7 @@ begin
         // Create dispatcher method
         ProcMember := TPasProcedure.Create('Dispatch', ServerClass);
         ProcMember.Visibility := visProtected;
-        ProcMember.IsOverride := True;
+        ProcMember.AddModifier(pmOverride);
         ProcMember.ProcType := TPasProcedureType.Create('', ProcMember);
         ProcMember.ProcType.CreateArgument('AParser', 'TXMLRPCParser').
           Visibility := visPublic;

+ 191 - 4
packages/fcl-passrc/src/pastree.pp

@@ -63,19 +63,30 @@ resourcestring
   SPasTreeDestructorImpl = 'destructor implementation';
 
 type
+  // Visitor pattern.
+  TPassTreeVisitor = class;
+
+  TPasElementBase = class
+    procedure Accept(Visitor: TPassTreeVisitor); virtual; abstract;
+  end;
+
 
   TPasModule = class;
 
   TPasMemberVisibility = (visDefault, visPrivate, visProtected, visPublic,
     visPublished, visAutomated);
 
+  TCallingConvention = (ccDefault,ccRegister,ccPascal,ccCDecl,ccStdCall,ccOldFPCCall,ccSafeCall);
+
   TPasMemberVisibilities = set of TPasMemberVisibility;
   TPasMemberHint = (hDeprecated,hLibrary,hPlatform);
   TPasMemberHints = set of TPasMemberHint; 
 
   TPTreeElement = class of TPasElement;
 
-  TPasElement = class
+  { TPasElement }
+
+  TPasElement = class(TPasElementBase)
   private
     FRefCount: LongWord;
     FName: string;
@@ -94,12 +105,15 @@ type
     function GetModule: TPasModule;
     function ElementTypeName: string; virtual;
     function GetDeclaration(full : Boolean) : string; virtual;
+    procedure Accept(Visitor: TPassTreeVisitor); override;
     property RefCount: LongWord read FRefCount;
     property Name: string read FName write FName;
     property Parent: TPasElement read FParent;
     Property Hints : TPasMemberHints Read FHints Write FHints;
   end;
 
+  { TPasSection }
+
   TPasSection = class(TPasElement)
   public
     constructor Create(const AName: string; AParent: TPasElement); override;
@@ -112,6 +126,8 @@ type
     Functions, Variables, Properties: TList;
   end;
 
+  { TPasModule }
+
   TPasModule = class(TPasElement)
   public
     destructor Destroy; override;
@@ -122,6 +138,8 @@ type
     PackageName: string;
   end;
 
+  { TPasPackage }
+
   TPasPackage = class(TPasElement)
   public
     constructor Create(const AName: string; AParent: TPasElement); override;
@@ -131,6 +149,8 @@ type
     Modules: TList;     // List of TPasModule objects
   end;
 
+  { TPasResString }
+
   TPasResString = class(TPasElement)
   public
     function ElementTypeName: string; override;
@@ -139,11 +159,15 @@ type
     Value: string;
   end;
 
+  { TPasType }
+
   TPasType = class(TPasElement)
   public
     function ElementTypeName: string; override;
   end;
 
+  { TPasPointerType }
+
   TPasPointerType = class(TPasType)
   public
     destructor Destroy; override;
@@ -153,6 +177,8 @@ type
     DestType: TPasType;
   end;
 
+  { TPasAliasType }
+
   TPasAliasType = class(TPasType)
   public
     destructor Destroy; override;
@@ -162,11 +188,15 @@ type
     DestType: TPasType;
   end;
 
+  { TPasTypeAliasType }
+
   TPasTypeAliasType = class(TPasAliasType)
   public
     function ElementTypeName: string; override;
   end;
 
+  { TPasClassOfType }
+
   TPasClassOfType = class(TPasAliasType)
   public
     function ElementTypeName: string; override;
@@ -174,6 +204,8 @@ type
   end;
 
 
+  { TPasRangeType }
+
   TPasRangeType = class(TPasType)
   public
     function ElementTypeName: string; override;
@@ -182,6 +214,8 @@ type
     RangeStart, RangeEnd: string;
   end;
 
+  { TPasArrayType }
+
   TPasArrayType = class(TPasType)
   public
     destructor Destroy; override;
@@ -193,6 +227,8 @@ type
     ElType: TPasType;
   end;
 
+  { TPasFileType }
+
   TPasFileType = class(TPasType)
   public
     destructor Destroy; override;
@@ -202,6 +238,8 @@ type
     ElType: TPasType;
   end;
 
+  { TPasEnumValue }
+
   TPasEnumValue = class(TPasElement)
   public
     function ElementTypeName: string; override;
@@ -211,6 +249,8 @@ type
     AssignedValue : string;
   end;
 
+  { TPasEnumType }
+
   TPasEnumType = class(TPasType)
   public
     constructor Create(const AName: string; AParent: TPasElement); override;
@@ -222,6 +262,8 @@ type
     Values: TList;      // List of TPasEnumValue objects
   end;
 
+  { TPasSetType }
+
   TPasSetType = class(TPasType)
   public
     destructor Destroy; override;
@@ -233,6 +275,8 @@ type
 
   TPasRecordType = class;
 
+  { TPasVariant }
+
   TPasVariant = class(TPasElement)
   public
     constructor Create(const AName: string; AParent: TPasElement); override;
@@ -242,6 +286,8 @@ type
     Members: TPasRecordType;
   end;
 
+  { TPasRecordType }
+
   TPasRecordType = class(TPasType)
   public
     constructor Create(const AName: string; AParent: TPasElement); override;
@@ -260,6 +306,8 @@ type
 
   TPasObjKind = (okObject, okClass, okInterface);
 
+  { TPasClassType }
+
   TPasClassType = class(TPasType)
   public
     constructor Create(const AName: string; AParent: TPasElement); override;
@@ -276,6 +324,8 @@ type
 
   TArgumentAccess = (argDefault, argConst, argVar, argOut);
 
+  { TPasArgument }
+
   TPasArgument = class(TPasElement)
   public
     destructor Destroy; override;
@@ -287,6 +337,8 @@ type
     Value: string;
   end;
 
+  { TPasProcedureType }
+
   TPasProcedureType = class(TPasType)
   public
     constructor Create(const AName: string; AParent: TPasElement); override;
@@ -301,6 +353,8 @@ type
     Args: TList;        // List of TPasArgument objects
   end;
 
+  { TPasResultElement }
+
   TPasResultElement = class(TPasElement)
   public
     destructor Destroy; override;
@@ -309,6 +363,8 @@ type
     ResultType: TPasType;
   end;
 
+  { TPasFunctionType }
+
   TPasFunctionType = class(TPasProcedureType)
   public
     destructor Destroy; override;
@@ -326,12 +382,17 @@ type
     function ElementTypeName: string; override;
   end;
 
+  { TPasTypeRef }
+
   TPasTypeRef = class(TPasUnresolvedTypeRef)
+  public
   public
     // function GetDeclaration(full : Boolean): string; override;
     RefType: TPasType;
   end;
 
+  { TPasVariable }
+
   TPasVariable = class(TPasElement)
   public
     destructor Destroy; override;
@@ -344,11 +405,16 @@ type
     AbsoluteLocation : String;
   end;
 
+  { TPasConst }
+
   TPasConst = class(TPasVariable)
+  public
   public
     function ElementTypeName: string; override;
   end;
 
+  { TPasProperty }
+
   TPasProperty = class(TPasVariable)
   public
     constructor Create(const AName: string; AParent: TPasElement); override;
@@ -362,11 +428,15 @@ type
     IsDefault, IsNodefault: Boolean;
   end;
 
+  { TPasProcedureBase }
+
   TPasProcedureBase = class(TPasElement)
   public
     function TypeName: string; virtual; abstract;
   end;
 
+  { TPasOverloadedProc }
+
   TPasOverloadedProc = class(TPasProcedureBase)
   public
     constructor Create(const AName: string; AParent: TPasElement); override;
@@ -377,7 +447,19 @@ type
     Overloads: TList;           // List of TPasProcedure nodes
   end;
 
+  TProcedureModifier = (pmVirtual, pmDynamic, pmAbstract, pmOverride,
+                        pmExported, pmOverload, pmMessage, pmReintroduce,
+                        pmStatic,pmInline,pmAssembler,pmVarargs,
+                        pmCompilerProc,pmExternal,pmExtdecl);
+  TProcedureModifiers = Set of TProcedureModifier;
+  TProcedureMessageType = (pmtInteger,pmtString);
+                        
   TPasProcedure = class(TPasProcedureBase)
+  Private
+    FCallingConvention : TCallingConvention;
+    FModifiers : TProcedureModifiers;
+    FMessageName : String;
+    FMessageType : TProcedureMessageType;
   public
     destructor Destroy; override;
     function ElementTypeName: string; override;
@@ -385,9 +467,21 @@ type
     function GetDeclaration(full: Boolean): string; override;
     procedure GetModifiers(List: TStrings);
   public
-    ProcType: TPasProcedureType;
-    IsVirtual, IsDynamic, IsAbstract, IsOverride,
-      IsOverload, IsMessage, isReintroduced, isStatic: Boolean;
+    ProcType : TPasProcedureType;
+    Procedure AddModifier(AModifier : TProcedureModifier);
+    Function IsVirtual : Boolean;
+    Function IsDynamic : Boolean;
+    Function IsAbstract : Boolean;
+    Function IsOverride : Boolean;
+    Function IsExported : Boolean;
+    Function IsOverload : Boolean;
+    Function IsMessage: Boolean;
+    Function IsReintroduced : Boolean;
+    Function IsStatic : Boolean;
+    Property Modifiers : TProcedureModifiers Read FModifiers Write FModifiers;
+    Property CallingConvention : TCallingConvention Read FCallingConvention Write FCallingConvention;
+    Property MessageName : String Read FMessageName Write FMessageName;
+    property MessageType : TProcedureMessageType Read FMessageType Write FMessageType;
   end;
 
   TPasFunction = class(TPasProcedure)
@@ -396,18 +490,24 @@ type
     function GetDeclaration (full : boolean) : string; override;
   end;
 
+  { TPasOperator }
+
   TPasOperator = class(TPasProcedure)
   public
     function ElementTypeName: string; override;
     function GetDeclaration (full : boolean) : string; override;
   end;
 
+  { TPasConstructor }
+
   TPasConstructor = class(TPasProcedure)
   public
     function ElementTypeName: string; override;
     function TypeName: string; override;
   end;
 
+  { TPasDestructor }
+
   TPasDestructor = class(TPasProcedure)
   public
     function ElementTypeName: string; override;
@@ -417,6 +517,8 @@ type
 
   TPasImplBlock = class;
 
+  { TPasProcedureImpl }
+
   TPasProcedureImpl = class(TPasElement)
   public
     constructor Create(const AName: string; AParent: TPasElement); override;
@@ -429,12 +531,16 @@ type
     Body: TPasImplBlock;
   end;
 
+  { TPasConstructorImpl }
+
   TPasConstructorImpl = class(TPasProcedureImpl)
   public
     function ElementTypeName: string; override;
     function TypeName: string; override;
   end;
 
+  { TPasDestructorImpl }
+
   TPasDestructorImpl = class(TPasProcedureImpl)
   public
     function ElementTypeName: string; override;
@@ -444,11 +550,15 @@ type
   TPasImplElement = class(TPasElement)
   end;
 
+  { TPasImplCommand }
+
   TPasImplCommand = class(TPasImplElement)
   public
     Command: string;
   end;
 
+  { TPasImplCommands }
+
   TPasImplCommands = class(TPasImplElement)
   public
     constructor Create(const AName: string; AParent: TPasElement); override;
@@ -457,6 +567,8 @@ type
     Commands: TStrings;
   end;
 
+  { TPasImplIfElse }
+
   TPasImplIfElse = class(TPasImplElement)
   public
     destructor Destroy; override;
@@ -465,6 +577,8 @@ type
     IfBranch, ElseBranch: TPasImplElement;
   end;
 
+  { TPasImplForLoop }
+
   TPasImplForLoop = class(TPasImplElement)
   public
     destructor Destroy; override;
@@ -474,6 +588,8 @@ type
     Body: TPasImplElement;
   end;
 
+  { TPasImplBlock }
+
   TPasImplBlock = class(TPasImplElement)
   public
     constructor Create(const AName: string; AParent: TPasElement); override;
@@ -487,6 +603,11 @@ type
     Elements: TList;    // TPasImplElement objects
   end;
 
+  { TPassTreeVisitor }
+
+  TPassTreeVisitor = class
+    procedure Visit(obj: TPasElement); virtual;
+  end;
 
 const
   AccessNames: array[TArgumentAccess] of string[6] = ('', 'const ', 'var ', 'out ');
@@ -635,6 +756,11 @@ begin
     Result := '';
 end;
 
+procedure TPasElement.Accept(Visitor: TPassTreeVisitor);
+begin
+  Visitor.Visit(Self);
+end;
+
 constructor TPasSection.Create(const AName: string; AParent: TPasElement);
 begin
   inherited Create(AName, AParent);
@@ -1457,6 +1583,58 @@ begin
   DoAdd(IsMessage,' Message');
 end;
 
+Procedure TPasProcedure.AddModifier(AModifier : TProcedureModifier);
+
+begin
+  Include(FModifiers,AModifier);
+end;
+
+Function TPasProcedure.IsVirtual : Boolean;
+begin
+  Result:=pmVirtual in FModifiers;
+end;
+
+Function TPasProcedure.IsDynamic : Boolean;
+begin
+  Result:=pmDynamic in FModifiers;
+end;
+
+Function TPasProcedure.IsAbstract : Boolean;
+begin
+  Result:=pmAbstract in FModifiers;
+end;
+
+Function TPasProcedure.IsOverride : Boolean;
+begin
+  Result:=pmOverride in FModifiers;
+end;
+
+Function TPasProcedure.IsExported : Boolean;
+begin
+  Result:=pmExported in FModifiers;
+end;
+
+Function TPasProcedure.IsOverload : Boolean;
+begin
+  Result:=pmOverload in FModifiers;
+end;
+
+Function TPasProcedure.IsMessage: Boolean;
+begin
+  Result:=pmMessage in FModifiers;
+end;
+
+Function TPasProcedure.IsReintroduced : Boolean;
+begin
+  Result:=pmReintroduce in FModifiers;
+end;
+
+Function TPasProcedure.IsStatic : Boolean;
+
+begin
+  Result:=pmStatic in FModifiers;
+end;
+
 function TPasProcedure.GetDeclaration (full : boolean) : string;
 
 Var
@@ -1550,4 +1728,13 @@ begin
     Result:='';
 end;
 
+
+
+{ TPassTreeVisitor }
+
+procedure TPassTreeVisitor.Visit(obj: TPasElement);
+begin
+  // Needs to be implemented by descendents.
+end;
+
 end.

+ 46 - 33
packages/fcl-passrc/src/pparser.pp

@@ -124,7 +124,7 @@ type
 
     function ParseType(Parent: TPasElement; Prefix : String): TPasType;overload;
     function ParseType(Parent: TPasElement): TPasType;overload;
-    function ParseComplexType: TPasType;
+    function ParseComplexType(Parent : TPasElement = Nil): TPasType;
     procedure ParseArrayType(Element: TPasArrayType);
     procedure ParseFileType(Element: TPasFileType);
     function ParseExpression: String;
@@ -516,20 +516,20 @@ begin
   end;
 end;
 
-function TPasParser.ParseComplexType: TPasType;
+function TPasParser.ParseComplexType(Parent : TPasElement = Nil): TPasType;
 begin
   NextToken;
   case CurToken of
     tkProcedure:
       begin
-        Result := TPasProcedureType(CreateElement(TPasProcedureType, '', nil));
+        Result := TPasProcedureType(CreateElement(TPasProcedureType, '', Parent));
         ParseProcedureOrFunctionHeader(Result,
           TPasProcedureType(Result), ptProcedure, True);
         UngetToken;        // Unget semicolon
       end;
     tkFunction:
       begin
-        Result := Engine.CreateFunctionType('', 'Result', nil, False,
+        Result := Engine.CreateFunctionType('', 'Result', Parent, False,
 	  Scanner.CurFilename, Scanner.CurRow);
         ParseProcedureOrFunctionHeader(Result,
           TPasFunctionType(Result), ptFunction, True);
@@ -538,7 +538,7 @@ begin
     else
     begin
       UngetToken;
-      Result := ParseType(nil);
+      Result := ParseType(Parent);
       exit;
     end;
   end;
@@ -1198,7 +1198,7 @@ begin
       ExpectIdentifier;
     end;
 
-    VarType := ParseComplexType;
+    VarType := ParseComplexType(Parent);
 
     H:=CheckHint(Nil,False);
     NextToken;
@@ -1523,73 +1523,77 @@ begin
       Tok:=UpperCase(CurTokenString);
       If (Tok='CDECL') then
         begin
- {       El['calling-conv'] := 'cdecl';}
+        TPasProcedure(Parent).CallingConvention:=ccCDecl;
+        ExpectToken(tkSemicolon);
+        end 
+      else If (Tok='EXPORT') then
+        begin
+        TPasProcedure(Parent).AddModifier(pmExported);
         ExpectToken(tkSemicolon);
         end 
       else if (Tok='PASCAL') then
         begin
-{        El['calling-conv'] := 'pascal';}
+        TPasProcedure(Parent).CallingConvention:=ccPascal;
         ExpectToken(tkSemicolon);
         end 
       else if (Tok='STDCALL') then
         begin
-{        El['calling-conv'] := 'stdcall';}
+        TPasProcedure(Parent).CallingConvention:=ccStdCall;
         ExpectToken(tkSemicolon);
         end 
       else if (Tok='OLDFPCCALL') then
         begin
-{        El['calling-conv'] := 'oldfpccall';}
+        TPasProcedure(Parent).CallingConvention:=ccOldFPCCall;
         ExpectToken(tkSemicolon);
         end 
       else if (Tok='EXTDECL') then
         begin
-{        El['calling-conv'] := 'extdecl';}
+        TPasProcedure(Parent).AddModifier(pmExternal);
         ExpectToken(tkSemicolon);
         end 
       else if (Tok='REGISTER') then
         begin
-{        El['calling-conv'] := 'register';}
+        TPasProcedure(Parent).CallingConvention:=ccRegister;
         ExpectToken(tkSemicolon);
         end 
       else if (Tok='COMPILERPROC') then
         begin
-{      El['calling-conv'] := 'compilerproc';}
+        TPasProcedure(Parent).AddModifier(pmCompilerProc);
         ExpectToken(tkSemicolon);
         end
       else if (Tok='VARARGS') then
         begin
-{      'varargs': needs CDECL & EXTERNAL }
+        TPasProcedure(Parent).AddModifier(pmVarArgs);
         ExpectToken(tkSemicolon);
         end
       else if (tok='DEPRECATED') then  
         begin
-{       El['calling-conv'] := 'deprecated';}
         element.hints:=element.hints+[hDeprecated];
         ExpectToken(tkSemicolon);
         end
       else if (tok='PLATFORM') then  
         begin
-{       El['calling-conv'] := 'deprecated';}
         element.hints:=element.hints+[hPlatform];
         ExpectToken(tkSemicolon);
         end
       else if (tok='LIBRARY') then  
         begin
-{       El['calling-conv'] := 'deprecated';}
         element.hints:=element.hints+[hLibrary];
         ExpectToken(tkSemicolon);
         end
       else if (tok='OVERLOAD') then
         begin
-        TPasProcedure(Parent).IsOverload := True;
+        TPasProcedure(Parent).AddModifier(pmOverload);
         ExpectToken(tkSemicolon);
         end 
       else if (tok='INLINE') then
         begin
+        TPasProcedure(Parent).AddModifier(pmInline);
         ExpectToken(tkSemicolon);
         end 
       else if (tok='ASSEMBLER') then
         begin
+        TPasProcedure(Parent).AddModifier(pmAssembler);
         ExpectToken(tkSemicolon);
         end 
       else if (tok = 'EXTERNAL') then  
@@ -1621,7 +1625,8 @@ begin
       end  
     else if (CurToken = tkInline) then
       begin
-{      TPasProcedure(Parent).IsInline := True;}
+      if Parent is TPasProcedure then
+        TPasProcedure(Parent).AddModifier(pmInline);
       ExpectToken(tkSemicolon);
       end 
     else if (CurToken = tkSquaredBraceOpen) then
@@ -2018,38 +2023,46 @@ var
       begin
         s := UpperCase(CurTokenString);
         if s = 'VIRTUAL' then
-          Proc.IsVirtual := True
+          Proc.AddModifier(pmVirtual)
         else if s = 'DYNAMIC' then
-          Proc.IsDynamic := True
+          Proc.AddModifier(pmDynamic)
         else if s = 'ABSTRACT' then
-          Proc.IsAbstract := True
+          Proc.AddModifier(pmAbstract)
         else if s = 'OVERRIDE' then
-          Proc.IsOverride := True
+          Proc.AddModifier(pmOverride)
         else if s = 'REINTRODUCE' then
-          Proc.IsReintroduced := True
+          Proc.AddModifier(pmReintroduce)
         else if s = 'OVERLOAD' then
-          Proc.IsOverload := True
+          Proc.AddModifier(pmOverload)
         else if s = 'STATIC' then
-          Proc.IsStatic := True
+          Proc.AddModifier(pmStatic)
         else if s = 'MESSAGE' then begin
-          Proc.IsMessage := True;
+          Proc.AddModifier(pmMessage);
           repeat
             NextToken;
+            If CurToken<>tkSemicolon then
+              begin
+              Proc.MessageName:=CurtokenString;
+              If (CurToken=tkString) then
+                Proc.Messagetype:=pmtString;
+              end;  
           until CurToken = tkSemicolon;
           UngetToken;
         end 
 	else if s = 'CDECL' then
-{      El['calling-conv'] := 'cdecl';}
+	  Proc.CallingConvention:=ccCDecl
 	else if s = 'PASCAL' then
-{      El['calling-conv'] := 'cdecl';}
+	  Proc.CallingConvention:=ccPascal
         else if s = 'STDCALL' then
-{      El['calling-conv'] := 'stdcall';}
+          Proc.CallingConvention:=ccStdCall
         else if s = 'OLDFPCCALL' then
-{      El['calling-conv'] := 'oldfpccall';}
+          Proc.CallingConvention:=ccOldFPCCall
         else if s = 'EXTDECL' then
-{      El['calling-conv'] := 'extdecl';}
+          Proc.AddModifier(pmExtdecl)
         else if s = 'DEPRECATED' then
-{      El['calling-conv'] := 'deprecated';}
+         Proc.Hints:=Proc.Hints+[hDeprecated]
+        else if s = 'EXPORT' then
+          Proc.AddModifier(pmExported)
         else
         begin
           UngetToken;

+ 70 - 41
packages/fcl-xml/src/xmlread.pp

@@ -67,7 +67,10 @@ type
     FResolveExternals: Boolean;
     FNamespaces: Boolean;
     FDisallowDoctype: Boolean;
+    FCanonical: Boolean;
     FMaxChars: Cardinal;
+    function GetCanonical: Boolean;
+    procedure SetCanonical(aValue: Boolean);
   public
     property Validate: Boolean read FValidate write FValidate;
     property PreserveWhitespace: Boolean read FPreserveWhitespace write FPreserveWhitespace;
@@ -78,6 +81,7 @@ type
     property Namespaces: Boolean read FNamespaces write FNamespaces;
     property DisallowDoctype: Boolean read FDisallowDoctype write FDisallowDoctype;
     property MaxChars: Cardinal read FMaxChars write FMaxChars;
+    property CanonicalForm: Boolean read GetCanonical write SetCanonical;
   end;
 
   // NOTE: DOM 3 LS ACTION_TYPE enumeration starts at 1
@@ -191,10 +195,8 @@ type
     LFPos: PWideChar;
     FXML11Rules: Boolean;
     FSystemID: WideString;
-    FPublicID: WideString;
     FCharCount: Cardinal;
     function GetSystemID: WideString;
-    function GetPublicID: WideString;
   protected
     function Reload: Boolean; virtual;
   public
@@ -208,7 +210,6 @@ type
     function SetEncoding(const AEncoding: string): Boolean; virtual;
     function Matches(const arg: WideString): Boolean;
     property SystemID: WideString read GetSystemID write FSystemID;
-    property PublicID: WideString read GetPublicID write FPublicID;
   end;
 
   TXMLDecodingSource = class(TXMLCharSource)
@@ -337,6 +338,7 @@ type
     FDTDStartPos: PWideChar;
     FIntSubset: TWideCharBuf;
     FAttrTag: Cardinal;
+    FOwnsDoctype: Boolean;
 
     FNSHelper: TNSSupport;
     FWorkAtts: array of TPrefixedAttr;
@@ -353,6 +355,7 @@ type
     FResolveExternals: Boolean;
     FNamespaces: Boolean;
     FDisallowDoctype: Boolean;
+    FCanonical: Boolean;
     FMaxChars: Cardinal;
 
     procedure SkipQuote(out Delim: WideChar; required: Boolean = True);
@@ -423,7 +426,7 @@ type
     procedure ExpectChoiceOrSeq(CP: TContentParticle);
     procedure ParseElementDecl;
     procedure ParseNotationDecl;
-    function ResolveEntity(const AbsSysID, PublicID, BaseURI: WideString; out Source: TXMLCharSource): Boolean;
+    function ResolveEntity(const SystemID, PublicID, BaseURI: WideString; out Source: TXMLCharSource): Boolean;
     procedure ProcessDefaultAttributes(Element: TDOMElement; Map: TDOMNamedNodeMap);
     procedure ProcessNamespaceAtts(Element: TDOMElement);
     procedure AddBinding(Attr: TDOMAttr; PrefixPtr: PWideChar; PrefixLen: Integer);
@@ -683,6 +686,30 @@ begin
     CompareMem(ABuf.Buffer, Pointer(Arg), ABuf.Length*sizeof(WideChar));
 end;
 
+{ TDOMParseOptions }
+
+function TDOMParseOptions.GetCanonical: Boolean;
+begin
+  Result := FCanonical and FExpandEntities and FCDSectionsAsText and
+  { (not normalizeCharacters) and } FNamespaces and
+  { namespaceDeclarations and } FPreserveWhitespace;
+end;
+
+procedure TDOMParseOptions.SetCanonical(aValue: Boolean);
+begin
+  FCanonical := aValue;
+  if aValue then
+  begin
+    FExpandEntities := True;
+    FCDSectionsAsText := True;
+    FNamespaces := True;
+    FPreserveWhitespace := True;
+    { normalizeCharacters := False; }
+    { namespaceDeclarations := True; }
+    { wellFormed := True; }
+  end;
+end;
+
 { TXMLInputSource }
 
 constructor TXMLInputSource.Create(AStream: TStream);
@@ -806,16 +833,6 @@ begin
   Result := True; // always succeed
 end;
 
-function TXMLCharSource.GetPublicID: WideString;
-begin
-  if FPublicID <> '' then
-    Result := FPublicID
-  else if Assigned(FParent) then
-    Result := FParent.PublicID
-  else
-    Result := '';
-end;
-
 function TXMLCharSource.GetSystemID: WideString;
 begin
   if FSystemID <> '' then
@@ -1163,14 +1180,17 @@ begin
   Loc.LinePos := FSource.FBuf-FSource.LFPos;
 end;
 
-function TXMLReader.ResolveEntity(const AbsSysID, PublicID, BaseURI: WideString; out Source: TXMLCharSource): Boolean;
+function TXMLReader.ResolveEntity(const SystemID, PublicID, BaseURI: WideString; out Source: TXMLCharSource): Boolean;
 var
+  AbsSysID: WideString;
   Filename: string;
   Stream: TStream;
   fd: THandle;
 begin
   Source := nil;
   Result := False;
+  if not ResolveRelativeURI(BaseURI, SystemID, AbsSysID) then
+    Exit;
   { TODO: alternative resolvers
     These may be 'internal' resolvers or a handler set by application.
     Internal resolvers should probably produce a TStream
@@ -1186,7 +1206,6 @@ begin
       Stream := THandleOwnerStream.Create(fd);
       Source := TXMLStreamInputSource.Create(Stream, True);
       Source.SystemID := AbsSysID;    // <- Revisit: Really need absolute sysID?
-      Source.PublicID := PublicID;
     end;
   end;
   Result := Assigned(Source);
@@ -1240,9 +1259,15 @@ end;
 procedure TXMLReader.DoErrorPos(Severity: TErrorSeverity; const descr: string; const ErrPos: TLocation);
 var
   E: EXMLReadError;
+  sysid: WideString;
 begin
   if Assigned(FSource) then
-    E := EXMLReadError.CreateFmt('In ''%s'' (line %d pos %d): %s', [FSource.SystemID, ErrPos.Line, ErrPos.LinePos, descr])
+  begin
+    sysid := FSource.FSystemID;
+    if (sysid = '') and Assigned(FSource.FEntity) then
+      sysid := TDOMEntityEx(FSource.FEntity).FURI;
+    E := EXMLReadError.CreateFmt('In ''%s'' (line %d pos %d): %s', [sysid, ErrPos.Line, ErrPos.LinePos, descr]);
+  end
   else
     E := EXMLReadError.Create(descr);
   E.FSeverity := Severity;
@@ -1421,6 +1446,7 @@ begin
   FResolveExternals := FCtrl.Options.ResolveExternals;
   FNamespaces := FCtrl.Options.Namespaces;
   FDisallowDoctype := FCtrl.Options.DisallowDoctype;
+  FCanonical := FCtrl.Options.CanonicalForm;
   FMaxChars := FCtrl.Options.MaxChars;
 end;
 
@@ -1438,6 +1464,8 @@ begin
   ClearRefs(FIDRefs);
   FNsAttHash.Free;
   FNSHelper.Free;
+  if FOwnsDoctype then
+    FDocType.Free;
 
   FNotationRefs.Free;
   FIDRefs.Free;
@@ -1712,7 +1740,7 @@ var
 begin
   if (AEntity.SystemID <> '') and not AEntity.FResolved then
   begin
-    Result := ResolveEntity(AEntity.FURI, AEntity.PublicID, '', Src);
+    Result := ResolveEntity(AEntity.SystemID, AEntity.PublicID, AEntity.FURI, Src);
     if not Result then
     begin
       // TODO: a detailed message like SysErrorMessage(GetLastError) would be great here 
@@ -1723,10 +1751,11 @@ begin
   else
   begin
     Src := TXMLCharSource.Create(AEntity.FReplacementText);
-    // needed in case of prefetched external PE
-    Src.SystemID := AEntity.FURI;
     Src.FLineNo := AEntity.FStartLocation.Line;
     Src.LFPos := Src.FBuf - AEntity.FStartLocation.LinePos;
+    // needed in case of prefetched external PE
+    if AEntity.SystemID <> '' then
+      Src.SystemID := AEntity.FURI;
   end;
 
   AEntity.FOnStack := True;
@@ -1864,6 +1893,7 @@ begin
       PEnt.FCharCount := FValue.Length;
       PEnt.FStartLocation.Line := 1;
       PEnt.FStartLocation.LinePos := 1;
+      PEnt.FURI := FSource.SystemID;    // replace base URI with absolute one
     finally
       ContextPop;
       PEnt.FResolved := True;
@@ -1994,10 +2024,10 @@ var
   IsXML11: Boolean;
 begin
   SkipS(True);
-  // VersionInfo: optional in TextDecl, required in XmlDecl
+  // [24] VersionInfo: optional in TextDecl, required in XmlDecl
   if (not TextDecl) or (FSource.FBuf^ = 'v') then
   begin
-    ExpectString('version');                              // [24]
+    ExpectString('version');
     ExpectEq;
     SkipQuotedLiteral(TmpStr);
     IsXML11 := False;
@@ -2011,19 +2041,17 @@ begin
     begin
       if doc.InheritsFrom(TXMLDocument) then
         TXMLDocument(doc).XMLVersion := TmpStr;
-      if IsXML11 then
-        XML11_BuildTables;
     end
     else   // parsing external entity
       if IsXML11 and not FXML11 then
         FatalError('XML 1.0 document cannot invoke XML 1.1 entities', -1);
 
-    if FSource.FBuf^ <> '?' then
+    if TextDecl or (FSource.FBuf^ <> '?') then
       SkipS(True);
   end;
 
-  // EncodingDecl: required in TextDecl, optional in XmlDecl
-  if TextDecl or (FSource.FBuf^ = 'e') then                    // [80]
+  // [80] EncodingDecl: required in TextDecl, optional in XmlDecl
+  if TextDecl or (FSource.FBuf^ = 'e') then
   begin
     ExpectString('encoding');
     ExpectEq;
@@ -2040,10 +2068,10 @@ begin
       TXMLDocument(doc).Encoding := TmpStr;
 
     if FSource.FBuf^ <> '?' then
-      SkipS(True);
+      SkipS(not TextDecl);
   end;
 
-  // SDDecl: forbidden in TextDecl, optional in XmlDecl
+  // [32] SDDecl: forbidden in TextDecl, optional in XmlDecl
   if (not TextDecl) and (FSource.FBuf^ = 's') then
   begin
     ExpectString('standalone');
@@ -2057,6 +2085,10 @@ begin
   end;
 
   ExpectString('?>');
+  { Switch to 1.1 rules only after declaration is parsed completely. This is to
+    ensure that NEL and LSEP within declaration are rejected (rmt-056, rmt-057) }
+  if (not TextDecl) and IsXML11 then
+    XML11_BuildTables;
 end;
 
 procedure TXMLReader.DTDReloadHook;
@@ -2081,7 +2113,6 @@ end;
 procedure TXMLReader.ParseDoctypeDecl;    // [28]
 var
   Src: TXMLCharSource;
-  DoctypeURI: WideString;
 begin
   if FState >= rsDTD then
     FatalError('Markup declaration is not allowed here');
@@ -2100,7 +2131,10 @@ begin
     SkipS;
   finally
     // DONE: append node after its name has been set; always append to avoid leak
-    Doc.AppendChild(FDocType);
+    if FCanonical then
+      FOwnsDoctype := True
+    else
+      Doc.AppendChild(FDocType);
     FCursor := nil;
   end;
 
@@ -2124,8 +2158,7 @@ begin
 
   if (FDocType.SystemID <> '') then
   begin
-    ResolveRelativeURI(FSource.SystemID, FDocType.SystemID, DoctypeURI);
-    if ResolveEntity(DocTypeURI, FDocType.PublicID, '', Src) then
+    if ResolveEntity(FDocType.SystemID, FDocType.PublicID, FSource.SystemID, Src) then
     begin
       Initialize(Src);
       try
@@ -2551,6 +2584,8 @@ begin
     CheckNCName;
     ExpectWhitespace;
 
+    // remember where the entity is declared
+    Entity.FURI := FSource.SystemID;
     if (FSource.FBuf^ = '"') or (FSource.FBuf^ = '''') then
     begin
       NDataAllowed := False;
@@ -2562,14 +2597,8 @@ begin
       SetString(Entity.FReplacementText, FEntityValue.Buffer, FEntityValue.Length);
       Entity.FCharCount := FEntityValue.Length;
     end
-    else
-    begin
-      if not ParseExternalID(Entity.FSystemID, Entity.FPublicID, False) then
-        FatalError('Expected entity value or external ID');
-      { need to resolve entity's SystemID relative to the current source,
-        which may differ from the source at the point of inclusion }
-      ResolveRelativeURI(FSource.SystemID, Entity.SystemID, Entity.FURI);
-    end;
+    else if not ParseExternalID(Entity.FSystemID, Entity.FPublicID, False) then
+      FatalError('Expected entity value or external ID');
 
     if NDataAllowed then                // [76]
     begin

+ 43 - 38
packages/fcl-xml/src/xmlutils.pp

@@ -110,7 +110,11 @@ type
     Prefix: PHashItem;
   end;
 
-  TAttributeAction = (aaUnchanged, aaPrefix, aaBoth);
+  TAttributeAction = (
+    aaUnchanged,
+    aaPrefix,         // only override the prefix
+    aaBoth            // override prefix and emit namespace definition
+  );
 
   TNSSupport = class(TObject)
   private
@@ -494,8 +498,7 @@ begin
   else
   begin
     New(Result);
-    // SetString for WideStrings trims on zero chars
-    // need to investigate and report
+    // SetString for WideStrings trims on zero chars [fixed, #14740]
     SetLength(Result^.Key, KeyLength);
     Move(Key^, Pointer(Result^.Key)^, KeyLength*sizeof(WideChar));
     Result^.HashValue := h;
@@ -709,7 +712,7 @@ begin
   result.uri := nsURI;
   result.Prefix := aPrefix;
   result.PrevPrefixBinding := aPrefix^.Data;
-  aPrefix^.Data := result; // ** null binding not used here **
+  aPrefix^.Data := result;
 end;
 
 function TNSSupport.DefaultNSBinding: TBinding;
@@ -742,47 +745,49 @@ var
 begin
   Binding := nil;
   Pfx := nil;
-  if Prefix <> '' then
-    Pfx := FPrefixes.FindOrAdd(PWideChar(Prefix), Length(Prefix));
   Result := aaUnchanged;
-  // no prefix, not bound, or bound to wrong URI
-  if (Pfx = nil) or (Pfx^.Data = nil) or (TBinding(Pfx^.Data).uri <> nsURI) then
+  if Prefix <> '' then
+    Pfx := FPrefixes.FindOrAdd(PWideChar(Prefix), Length(Prefix))
+  else if nsURI = '' then
+    Exit;
+  { if the prefix is already bound to correct URI, we're done }
+  if Assigned(Pfx) and Assigned(Pfx^.Data) and (TBinding(Pfx^.Data).uri = nsURI) then
+    Exit;
+
+  { see if there's another prefix bound to the target URI }
+  // TODO: should use something faster than linear search
+  for i := FNesting downto 0 do
   begin
-    // see if there's another prefix bound to the target URI
-    // TODO: should use something faster than linear search
-    for i := FNesting downto 0 do
+    b := FBindingStack[i];
+    while Assigned(b) do
     begin
-      b := FBindingStack[i];
-      while Assigned(b) do
+      if (b.uri = nsURI) and (b.Prefix <> @FDefaultPrefix) then
       begin
-        if (b.uri = nsURI) and (b.Prefix <> @FDefaultPrefix) then
-        begin
-          Binding := b;   // found one -> override the attribute's prefix
-          Result := aaPrefix;
-          Exit;
-        end;
-        b := b.Next;
+        Binding := b;   // found one -> override the attribute's prefix
+        Result := aaPrefix;
+        Exit;
       end;
+      b := b.Next;
     end;
-    // no prefix, or bound (to wrong URI) -> must use generated prefix instead
-    if (Pfx = nil) or Assigned(Pfx^.Data) then
-    repeat
-      Inc(FPrefixSeqNo);
-      i := FPrefixSeqNo;    // This is just 'NS'+IntToStr(FPrefixSeqNo);
-      p := @Buf[high(Buf)]; // done without using strings
-      while i <> 0 do
-      begin
-        p^ := WideChar(i mod 10+ord('0'));
-        dec(p);
-        i := i div 10;
-      end;
-      p^ := 'S'; dec(p);
-      p^ := 'N';
-      Pfx := FPrefixes.FindOrAdd(p, @Buf[high(Buf)]-p+1);
-    until Pfx^.Data = nil;
-    Binding := BindPrefix(nsURI, Pfx);
-    Result := aaBoth;
   end;
+  { no prefix, or bound (to wrong URI) -> use generated prefix instead }
+  if (Pfx = nil) or Assigned(Pfx^.Data) then
+  repeat
+    Inc(FPrefixSeqNo);
+    i := FPrefixSeqNo;    // This is just 'NS'+IntToStr(FPrefixSeqNo);
+    p := @Buf[high(Buf)]; // done without using strings
+    while i <> 0 do
+    begin
+      p^ := WideChar(i mod 10+ord('0'));
+      dec(p);
+      i := i div 10;
+    end;
+    p^ := 'S'; dec(p);
+    p^ := 'N';
+    Pfx := FPrefixes.FindOrAdd(p, @Buf[high(Buf)]-p+1);
+  until Pfx^.Data = nil;
+  Binding := BindPrefix(nsURI, Pfx);
+  Result := aaBoth;
 end;
 
 function TNSSupport.IsPrefixBound(P: PWideChar; Len: Integer; out

+ 153 - 54
packages/fcl-xml/src/xmlwrite.pp

@@ -40,11 +40,20 @@ implementation
 uses SysUtils, xmlutils;
 
 type
-  TSpecialCharCallback = procedure(c: WideChar) of object;
+  TXMLWriter = class;
+  TSpecialCharCallback = procedure(Sender: TXMLWriter; const s: DOMString;
+    var idx: Integer);
+
+  PAttrFixup = ^TAttrFixup;
+  TAttrFixup = record
+    Attr: TDOMNode;
+    Prefix: PHashItem;
+  end;
 
   TXMLWriter = class(TObject)
   private
     FInsideTextNode: Boolean;
+    FCanonical: Boolean;
     FIndent: WideString;
     FIndentCount: Integer;
     FBuffer: PChar;
@@ -52,7 +61,9 @@ type
     FCapacity: Integer;
     FLineBreak: string;
     FNSHelper: TNSSupport;
+    FAttrFixups: TFPList;
     FScratch: TFPList;
+    FNSDefs: TFPList;
     procedure wrtChars(Src: PWideChar; Length: Integer);
     procedure IncIndent;
     procedure DecIndent; {$IFDEF HAS_INLINE} inline; {$ENDIF}
@@ -62,8 +73,6 @@ type
     procedure wrtQuotedLiteral(const ws: WideString);
     procedure ConvWrite(const s: WideString; const SpecialChars: TSetOfChar;
       const SpecialCharCallback: TSpecialCharCallback);
-    procedure AttrSpecialCharCallback(c: WideChar);
-    procedure TextNodeSpecialCharCallback(c: WideChar);
     procedure WriteNSDef(B: TBinding);
     procedure NamespaceFixup(Element: TDOMElement);
   protected
@@ -165,10 +174,18 @@ begin
   FLineBreak := sLineBreak;
   FNSHelper := TNSSupport.Create;
   FScratch := TFPList.Create;
+  FNSDefs := TFPList.Create;
+  FAttrFixups := TFPList.Create;
 end;
 
 destructor TXMLWriter.Destroy;
+var
+  I: Integer;
 begin
+  for I := FAttrFixups.Count-1 downto 0 do
+    Dispose(PAttrFixup(FAttrFixups.List^[I]));
+  FAttrFixups.Free;
+  FNSDefs.Free;
   FScratch.Free;
   FNSHelper.Free;
   if FBufPos > FBuffer then
@@ -312,7 +329,7 @@ begin
     if (s[EndPos] < #255) and (Char(ord(s[EndPos])) in SpecialChars) then
     begin
       wrtChars(@s[StartPos], EndPos - StartPos);
-      SpecialCharCallback(s[EndPos]);
+      SpecialCharCallback(Self, s, EndPos);
       StartPos := EndPos + 1;
     end;
     Inc(EndPos);
@@ -327,29 +344,31 @@ const
   ltStr = '&lt;';
   gtStr = '&gt;';
 
-procedure TXMLWriter.AttrSpecialCharCallback(c: WideChar);
+procedure AttrSpecialCharCallback(Sender: TXMLWriter; const s: DOMString;
+  var idx: Integer);
 begin
-  case c of
-    '"': wrtStr(QuotStr);
-    '&': wrtStr(AmpStr);
-    '<': wrtStr(ltStr);
+  case s[idx] of
+    '"': Sender.wrtStr(QuotStr);
+    '&': Sender.wrtStr(AmpStr);
+    '<': Sender.wrtStr(ltStr);
     // Escape whitespace using CharRefs to be consistent with W3 spec § 3.3.3
-    #9: wrtStr('&#x9;');
-    #10: wrtStr('&#xA;');
-    #13: wrtStr('&#xD;');
+    #9: Sender.wrtStr('&#x9;');
+    #10: Sender.wrtStr('&#xA;');
+    #13: Sender.wrtStr('&#xD;');
   else
-    wrtChr(c);
+    Sender.wrtChr(s[idx]);
   end;
 end;
 
-procedure TXMLWriter.TextnodeSpecialCharCallback(c: WideChar);
+procedure TextnodeSpecialCharCallback(Sender: TXMLWriter; const s: DOMString;
+  var idx: Integer);
 begin
-  case c of
-    '<': wrtStr(ltStr);
-    '>': wrtStr(gtStr); // Required only in ']]>' literal, otherwise optional
-    '&': wrtStr(AmpStr);
+  case s[idx] of
+    '<': Sender.wrtStr(ltStr);
+    '>': Sender.wrtStr(gtStr); // Required only in ']]>' literal, otherwise optional
+    '&': Sender.wrtStr(AmpStr);
   else
-    wrtChr(c);
+    Sender.wrtChr(s[idx]);
   end;
 end;
 
@@ -379,69 +398,144 @@ begin
     wrtStr(B.Prefix^.Key);
   end;
   wrtChars('="', 2);
-  ConvWrite(B.uri, AttrSpecialChars, {$IFDEF FPC}@{$ENDIF}AttrSpecialCharCallback);
+  ConvWrite(B.uri, AttrSpecialChars, @AttrSpecialCharCallback);
   wrtChr('"');
 end;
 
+// clone of system.FPC_WIDESTR_COMPARE which cannot be called directly
+function Compare(const s1, s2: DOMString): integer;
+var
+  maxi, temp: integer;
+begin
+  Result := 0;
+  if pointer(S1) = pointer(S2) then
+    exit;
+  maxi := Length(S1);
+  temp := Length(S2);
+  if maxi > temp then
+    maxi := temp;
+  Result := CompareWord(S1[1], S2[1], maxi);
+  if Result = 0 then
+    Result := Length(S1)-Length(S2);
+end;
+
+function SortNSDefs(Item1, Item2: Pointer): Integer;
+begin
+  Result := Compare(TBinding(Item1).Prefix^.Key, TBinding(Item2).Prefix^.Key);
+end;
+
+function SortAtts(Item1, Item2: Pointer): Integer;
+var
+  p1: PAttrFixup absolute Item1;
+  p2: PAttrFixup absolute Item2;
+  s1, s2: DOMString;
+begin
+  Result := Compare(p1^.Attr.namespaceURI, p2^.Attr.namespaceURI);
+  if Result = 0 then
+  begin
+    // TODO: Must fix the parser so it doesn't produce Level 1 attributes
+    if nfLevel2 in p1^.Attr.Flags then
+      s1 := p1^.Attr.localName
+    else
+      s1 := p1^.Attr.nodeName;
+    if nfLevel2 in p2^.Attr.Flags then
+      s2 := p2^.Attr.localName
+    else
+      s2 := p2^.Attr.nodeName;
+    Result := Compare(s1, s2);
+  end;
+end;
+
 procedure TXMLWriter.NamespaceFixup(Element: TDOMElement);
 var
   B: TBinding;
-  i: Integer;
-  attr: TDOMNode;
+  i, j: Integer;
+  node: TDOMNode;
   s: DOMString;
   action: TAttributeAction;
+  p: PAttrFixup;
 begin
   FScratch.Count := 0;
+  FNSDefs.Count := 0;
   if Element.hasAttributes then
   begin
+    j := 0;
     for i := 0 to Element.Attributes.Length-1 do
     begin
-      attr := Element.Attributes[i];
-      if nfLevel2 in attr.Flags then
+      node := Element.Attributes[i];
+      if TDOMNode_NS(node).NSI.NSIndex = 2 then
       begin
-        if TDOMNode_NS(attr).NSI.NSIndex = 2 then
+        if TDOMNode_NS(node).NSI.PrefixLen = 0 then
+          s := ''
+        else
+          s := node.localName;
+        FNSHelper.DefineBinding(s, node.nodeValue, B);
+        if Assigned(B) then  // drop redundant namespace declarations
+          FNSDefs.Add(B);
+      end
+      else if TDOMAttr(node).Specified then
+      begin
+        // obtain a TAttrFixup record (allocate if needed)
+        if j >= FAttrFixups.Count then
         begin
-          if TDOMNode_NS(attr).NSI.PrefixLen = 0 then
-            s := ''
-          else
-            s := attr.localName;
-          FNSHelper.DefineBinding(s, attr.nodeValue, B);
-          if Assigned(B) then  // drop redundant namespace declarations
-            VisitAttribute(attr);
+          New(p);
+          FAttrFixups.Add(p);
         end
         else
-          FScratch.Add(attr);
-      end
-      else if TDOMAttr(attr).Specified then // Level 1 attribute
-        VisitAttribute(attr);
+          p := PAttrFixup(FAttrFixups.List^[j]);
+        // add it to the working list
+        p^.Attr := node;
+        p^.Prefix := nil;
+        FScratch.Add(p);
+        Inc(j);
+      end;
     end;
   end;
 
   FNSHelper.DefineBinding(Element.Prefix, Element.namespaceURI, B);
   if Assigned(B) then
-    WriteNSDef(B);
+    FNSDefs.Add(B);
 
   for i := 0 to FScratch.Count-1 do
   begin
-    attr := TDOMNode(FScratch[i]);
-    action := FNSHelper.CheckAttribute(attr.Prefix, attr.namespaceURI, B);
+    node := PAttrFixup(FScratch.List^[i])^.Attr;
+    action := FNSHelper.CheckAttribute(node.Prefix, node.namespaceURI, B);
     if action = aaBoth then
-      WriteNSDef(B);
+      FNSDefs.Add(B);
 
     if action in [aaPrefix, aaBoth] then
+      PAttrFixup(FScratch.List^[i])^.Prefix := B.Prefix;
+  end;
+
+  if FCanonical then
+  begin
+    FNSDefs.Sort(@SortNSDefs);
+    FScratch.Sort(@SortAtts);
+  end;
+
+  // now, at last, dump all this stuff.
+  for i := 0 to FNSDefs.Count-1 do
+    WriteNSDef(TBinding(FNSDefs.List^[I]));
+
+  for i := 0 to FScratch.Count-1 do
+  begin
+    wrtChr(' ');
+    with PAttrFixup(FScratch.List^[I])^ do
     begin
-      // use prefix from the binding, it might have been changed
-      wrtChr(' ');
-      wrtStr(B.Prefix^.Key);
-      wrtChr(':');
-      wrtStr(attr.localName);
+      if Assigned(Prefix) then
+      begin
+        wrtStr(Prefix^.Key);
+        wrtChr(':');
+        wrtStr(Attr.localName);
+      end
+      else
+        wrtStr(Attr.nodeName);
+
       wrtChars('="', 2);
       // TODO: not correct w.r.t. entities
-      ConvWrite(attr.nodeValue, AttrSpecialChars, {$IFDEF FPC}@{$ENDIF}AttrSpecialCharCallback);
+      ConvWrite(attr.nodeValue, AttrSpecialChars, @AttrSpecialCharCallback);
       wrtChr('"');
-    end
-    else   // action = aaUnchanged, output unmodified
-      VisitAttribute(attr);
+    end;
   end;
 end;
 
@@ -492,16 +586,21 @@ end;
 
 procedure TXMLWriter.VisitText(node: TDOMNode);
 begin
-  ConvWrite(TDOMCharacterData(node).Data, TextSpecialChars, {$IFDEF FPC}@{$ENDIF}TextnodeSpecialCharCallback);
+  ConvWrite(TDOMCharacterData(node).Data, TextSpecialChars, @TextnodeSpecialCharCallback);
 end;
 
 procedure TXMLWriter.VisitCDATA(node: TDOMNode);
 begin
   if not FInsideTextNode then
     wrtIndent;
-  wrtChars('<![CDATA[', 9);
-  wrtStr(TDOMCharacterData(node).Data);
-  wrtChars(']]>', 3);
+  if FCanonical then
+    ConvWrite(TDOMCharacterData(node).Data, TextSpecialChars, @TextnodeSpecialCharCallback)
+  else
+  begin
+    wrtChars('<![CDATA[', 9);
+    wrtStr(TDOMCharacterData(node).Data);
+    wrtChars(']]>', 3);
+  end;
 end;
 
 procedure TXMLWriter.VisitEntityRef(node: TDOMNode);
@@ -589,7 +688,7 @@ begin
       ENTITY_REFERENCE_NODE:
         VisitEntityRef(Child);
       TEXT_NODE:
-        ConvWrite(TDOMCharacterData(Child).Data, AttrSpecialChars, {$IFDEF FPC}@{$ENDIF}AttrSpecialCharCallback);
+        ConvWrite(TDOMCharacterData(Child).Data, AttrSpecialChars, @AttrSpecialCharCallback);
     end;
     Child := Child.NextSibling;
   end;

+ 3 - 3
packages/fcl-xml/src/xpath.pp

@@ -1110,13 +1110,14 @@ var
         else if Node.NodeName <> NodeTestString then
           exit;
       ntTextNode:
-        if not Node.InheritsFrom(TDOMCharacterData) then
+        if not Node.InheritsFrom(TDOMText) then
           exit;
       ntCommentNode:
         if Node.NodeType <> COMMENT_NODE then
           exit;
       ntPINode:
-        if Node.NodeType <> PROCESSING_INSTRUCTION_NODE then
+        if (Node.NodeType <> PROCESSING_INSTRUCTION_NODE) or
+         ((NodeTestString <> '') and (Node.nodeName <> NodeTestString)) then
           exit;
     end;
     if ResultNodes.IndexOf(Node) < 0 then
@@ -1947,7 +1948,6 @@ begin
           NextToken;   { skip '('; we know it's there }
           if NextToken = tkString then
           begin
-            // TODO: Handle processing-instruction('name') constructs
             Dest.NodeTestString := CurTokenString;
             NextToken;
           end;

+ 4 - 12
packages/fcl-xml/tests/extras2.pp

@@ -88,10 +88,7 @@ var
   nodeValue: DOMString;
   length: Integer;
 begin
-// canonical form: PreserveWhitespace, Namespaces, NamespaceDeclarations = True;
-//                 Entities, CDSections = False;
-  FParser.Options.PreserveWhitespace := True;
-  FParser.Options.Namespaces := True;
+  FParser.Options.CanonicalForm := True;
   LoadStringData(doc, canonicform01);
   begin
     node := TDOMNode(doc).firstChild;
@@ -152,10 +149,7 @@ var
   nodeValue: DOMString;
   length: Integer;
 begin
-// canonical form: PreserveWhitespace, Namespaces, NamespaceDeclarations = True;
-//                 Entities, CDSections = False;
-  FParser.Options.PreserveWhitespace := True;
-  FParser.Options.Namespaces := True;
+  FParser.Options.CanonicalForm := True;
   FParser.Options.IgnoreComments := True;
   LoadStringData(doc, canonicform01);
   begin
@@ -198,8 +192,7 @@ var
   divEl: TDOMElement;
   node: TDOMNode;
 begin
-  FParser.Options.PreserveWhitespace := True;
-  FParser.Options.Namespaces := True;
+  FParser.Options.CanonicalForm := True;
   LoadStringData(doc, canonicform03);
 
   divList := doc.getElementsByTagName('div');
@@ -220,8 +213,7 @@ var
   attrSpecified: Boolean;
   attrValue: DOMString;
 begin
-  FParser.Options.PreserveWhitespace := True;
-  FParser.Options.Namespaces := True;
+  FParser.Options.CanonicalForm := True;
   LoadStringData(doc, canonicform03);
 
   elemList := doc.getElementsByTagName('acronym');

+ 2 - 0
packages/postgres/src/postgres3dyn.pp

@@ -212,6 +212,8 @@ var
 Procedure InitialisePostgres3;
 Procedure ReleasePostgres3;
 
+function PQsetdb(M_PGHOST,M_PGPORT,M_PGOPT,M_PGTTY,M_DBNAME : pchar) : ppgconn;
+
 var Postgres3LibraryHandle : TLibHandle;
 
 implementation

+ 4 - 0
packages/pxlib/examples/ppxview.pp

@@ -81,8 +81,12 @@ begin
         pxfDate:
            if PX_get_data_long(Doc,fbuf,flen,@longv)>0 then
               begin
+              {$ifdef windows}
+              S:=DateToStr(Longv+1721425-2415019);
+              {$else}
               PX_SdnToGregorian(longv+1721425,@Y,@M,@D);
               S:=DateToStr(EncodeDate(Y,M,D));
+              {$endif}
               end;
         pxfShort:
           if PX_get_data_short(Doc,fbuf, flen, @D)>0 then

+ 6 - 0
packages/pxlib/src/pxlib.pp

@@ -369,7 +369,9 @@ var
   PX_put_data_byte : procedure(pxdoc:Ppxdoc_t; data:pcchar; len:cint; value:cchar);cdecl;
   PX_put_data_bcd : procedure(pxdoc:Ppxdoc_t; data:pcchar; len:cint; value:pcchar);cdecl;
   PX_put_data_blob : function(pxdoc:Ppxdoc_t; data:pcchar; len:cint; value:pcchar; valuelen:cint):cint;cdecl;
+{$ifndef windows}
   PX_SdnToGregorian : procedure(sdn:clong; pYear:pcint; pMonth:pcint; pDay:pcint);cdecl;
+{$endif}
   PX_GregorianToSdn : function(year:cint; month:cint; day:cint):clong;cdecl;
   PX_make_time : function(pxdoc:Ppxdoc_t; hour:cint; minute:cint; second:cint):Ppxval_t;cdecl;
   PX_make_date : function(pxdoc:Ppxdoc_t; year:cint; month:cint; day:cint):Ppxval_t;cdecl;
@@ -472,7 +474,9 @@ begin
   PX_put_data_byte:=nil;
   PX_put_data_bcd:=nil;
   PX_put_data_blob:=nil;
+{$ifndef windows}
   PX_SdnToGregorian:=nil;
+{$endif}  
   PX_GregorianToSdn:=nil;
   PX_make_time:=nil;
   PX_make_date:=nil;
@@ -563,7 +567,9 @@ begin
   pointer(PX_put_data_byte):=GetProcAddress(hlib,'PX_put_data_byte');
   pointer(PX_put_data_bcd):=GetProcAddress(hlib,'PX_put_data_bcd');
   pointer(PX_put_data_blob):=GetProcAddress(hlib,'PX_put_data_blob');
+{$ifndef windows}
   pointer(PX_SdnToGregorian):=GetProcAddress(hlib,'PX_SdnToGregorian');
+{$endif windows}  
   pointer(PX_GregorianToSdn):=GetProcAddress(hlib,'PX_GregorianToSdn');
   pointer(PX_make_time):=GetProcAddress(hlib,'PX_make_time');
   pointer(PX_make_date):=GetProcAddress(hlib,'PX_make_date');

+ 335 - 2
packages/winunits-base/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/10/16]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/10/11]
 #
 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 m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
@@ -1508,6 +1508,37 @@ endif
 else
 CROSSBINDIR=
 endif
+ifeq ($(OS_SOURCE),linux)
+ifndef GCCLIBDIR
+ifeq ($(CPU_TARGET),i386)
+ifneq ($(findstring x86_64,$(shell uname -a)),)
+ifeq ($(BINUTILSPREFIX),)
+GCCLIBDIR:=$(shell dirname `gcc -m32 -print-libgcc-file-name`)
+endif
+endif
+endif
+ifeq ($(CPU_TARGET),powerpc64)
+ifeq ($(BINUTILSPREFIX),)
+GCCLIBDIR:=$(shell dirname `gcc -m64 -print-libgcc-file-name`)
+endif
+endif
+endif
+ifndef GCCLIBDIR
+CROSSGCC=$(strip $(wildcard $(addsuffix /$(BINUTILSPREFIX)gcc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(CROSSGCC),)
+GCCLIBDIR:=$(shell dirname `$(CROSSGCC) -print-libgcc-file-name`)
+endif
+endif
+ifndef OTHERLIBDIR
+OTHERLIBDIR:=$(shell grep -v "^\#" /etc/ld.so.conf | awk '{ ORS=" "; print $1 }')
+endif
+endif
+ifdef inUnix
+ifeq ($(OS_SOURCE),netbsd)
+OTHERLIBDIR+=/usr/pkg/lib
+endif
+export GCCLIBDIR OTHERLIB
+endif
 BATCHEXT=.bat
 LOADEREXT=.as
 EXEEXT=.exe
@@ -2078,180 +2109,372 @@ else
 TAROPT=vz
 TAREXT=.tar.gz
 endif
-override REQUIRE_PACKAGES=rtl 
+override REQUIRE_PACKAGES=rtl fcl-registry fcl-base
 ifeq ($(FULL_TARGET),i386-linux)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),i386-haiku)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),i386-netware)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),i386-wince)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),arm-linux)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),arm-darwin)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),arm-wince)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),arm-gba)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),arm-nds)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),avr-embedded)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),armeb-linux)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 endif
 ifdef REQUIRE_PACKAGES_RTL
 PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
@@ -2279,6 +2502,110 @@ ifdef UNITDIR_RTL
 override COMPILER_UNITDIR+=$(UNITDIR_RTL)
 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
+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
+endif
+ifdef REQUIRE_PACKAGES_ICONVENC
+PACKAGEDIR_ICONVENC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /iconvenc/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_ICONVENC),)
+ifneq ($(wildcard $(PACKAGEDIR_ICONVENC)/units/$(TARGETSUFFIX)),)
+UNITDIR_ICONVENC=$(PACKAGEDIR_ICONVENC)/units/$(TARGETSUFFIX)
+else
+UNITDIR_ICONVENC=$(PACKAGEDIR_ICONVENC)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_ICONVENC)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_ICONVENC) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_ICONVENC)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_ICONVENC=
+UNITDIR_ICONVENC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /iconvenc/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_ICONVENC),)
+UNITDIR_ICONVENC:=$(firstword $(UNITDIR_ICONVENC))
+else
+UNITDIR_ICONVENC=
+endif
+endif
+ifdef UNITDIR_ICONVENC
+override COMPILER_UNITDIR+=$(UNITDIR_ICONVENC)
+endif
+endif
+ifdef REQUIRE_PACKAGES_FCL-XML
+PACKAGEDIR_FCL-XML:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-xml/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FCL-XML),)
+ifneq ($(wildcard $(PACKAGEDIR_FCL-XML)/units/$(TARGETSUFFIX)),)
+UNITDIR_FCL-XML=$(PACKAGEDIR_FCL-XML)/units/$(TARGETSUFFIX)
+else
+UNITDIR_FCL-XML=$(PACKAGEDIR_FCL-XML)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FCL-XML)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_FCL-XML) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-XML)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FCL-XML=
+UNITDIR_FCL-XML:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-xml/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FCL-XML),)
+UNITDIR_FCL-XML:=$(firstword $(UNITDIR_FCL-XML))
+else
+UNITDIR_FCL-XML=
+endif
+endif
+ifdef UNITDIR_FCL-XML
+override COMPILER_UNITDIR+=$(UNITDIR_FCL-XML)
+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
+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
+endif
 ifndef NOCPUDEF
 override FPCOPTDEF=$(ARCH)
 endif
@@ -2398,6 +2725,12 @@ endif
 endif
 ifdef LINKSHARED
 endif
+ifdef GCCLIBDIR
+override FPCOPT+=-Fl$(GCCLIBDIR)
+endif
+ifdef OTHERLIBDIR
+override FPCOPT+=$(addprefix -Fl,$(OTHERLIBDIR))
+endif
 ifdef OPT
 override FPCOPT+=$(OPT)
 endif

+ 3 - 0
packages/winunits-base/Makefile.fpc

@@ -6,6 +6,9 @@
 name=winunits-base
 version=2.5.1
 
+[require]
+packages=fcl-registry fcl-base
+
 [target]
 units=buildwinutilsbase
 implicitunits=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver \

+ 10 - 5
packages/winunits-base/src/activex.pp

@@ -29,6 +29,8 @@ type
    POleStr = Types.POleStr;
    PPOleStr = Types.PPOleStr;
    TBStr = POleStr;
+   TBStrList = array[0..(high(integer) div sizeof(TBSTR))-1] of TBstr;
+   PBStrList = ^TBStrList;
    PBStr = ^TBStr;
    TOleEnum = type LongWord;
    LargeInt = Types.LargeInt;
@@ -1453,6 +1455,7 @@ TYPE
    pTYPEDESC                    = ^TYPEDESC;
    tagTYPEKIND                  = Dword;
    TYPEKIND                     = tagTYPEKIND;
+   TTYPEKIND			= TYPEKIND;
    INVOKEKIND                   = Dword;
    tagTYPEDESC                  = Record
                                     Case Integer OF
@@ -1505,6 +1508,7 @@ TYPE
                                     End;
   VARDESC                       = tagVARDESC;
   LPVARDESC                     = ^VARDESC;
+  pVARDESC			= LPVARDESC;
   tagDISPPARAMS                 = Record
                                    rgvarg            : lpVARIANTARG;
                                    rgdispidNamedArgs : lpDISPID;
@@ -1581,6 +1585,7 @@ TYPE
   PTLIBAttr			 = LPTLIBATTR;
 
   LPFUNCDESC                     = ^FUNCDESC;
+  PFUNCDESC			 = LPFUNCDESC;
 
   tagFUNCDESC                    = Record
                                      memid             : MEMBERID;
@@ -2822,11 +2827,11 @@ TYPE
      {$ifndef Call_as}
       Function  GetFuncDesc(index: UINT; OUT ppFuncDesc: lpFUNCDESC):HResult;StdCall;
       Function  GetVarDesc(index: UINT; OUT ppVarDesc: lpVARDESC):HResult;StdCall;
-      Function  GetNames(memid: MEMBERID; OUT rgBstrNames: WideString; cMaxNames: UINT; OUT pcNames: UINT):HResult;StdCall;
+      Function  GetNames(memid: MEMBERID;  rgBstrNames: PBStrList; cMaxNames: UINT; OUT pcNames: UINT):HResult;StdCall;
      {$else}
       Function  GetFuncDesc(index: UINT; OUT ppFuncDesc: LPFUNCDESC; OUT pDummy: CLEANLOCALSTORAGE):HResult;StdCall;
       Function  GetVarDesc(index: UINT; OUT ppVarDesc: LPVARDESC; OUT pDummy: CLEANLOCALSTORAGE):HResult;StdCall;
-      Function  GetNames(memid: MEMBERID; OUT rgBstrNames: WideString; cMaxNames: UINT; OUT pcNames: UINT):HResult;StdCall;
+      Function  GetNames(memid: MEMBERID;  rgBstrNames: PBStrList; cMaxNames: UINT; OUT pcNames: UINT):HResult;StdCall;
      {$endif}
      Function  GetRefTypeOfImplType(index: UINT; OUT pRefType: HREFTYPE):HResult;StdCall;
      Function  GetImplTypeFlags(index: UINT; OUT pImplTypeFlags: WINT):HResult;StdCall;
@@ -2872,18 +2877,18 @@ TYPE
      Function  GetContainingTypeLib(OUT ppTLib: ITypeLib; OUT pIndex: UINT):HResult;StdCall;
      {$endif}
      {$ifndef Call_as}
-      Procedure ReleaseTypeAttr(Const pTypeAttr: TypeAttr); StdCall;
+      Procedure ReleaseTypeAttr( pTypeAttr: pTypeAttr); StdCall;
      {$else}
       Function  ReleaseTypeAttr():HResult;StdCall;
      {$endif}
 
      {$ifndef Call_as}
-      Procedure ReleaseFuncDesc(const pFuncDesc : FUNCDESC); StdCall;
+      Procedure ReleaseFuncDesc( pFuncDesc : lpFUNCDESC); StdCall;
      {$else}
       Function  LocalReleaseFuncDesc():HResult;StdCall;
      {$endif}
      {$ifndef Call_as}
-      Procedure ReleaseVarDesc(Const pVarDesc : VarDesc);
+      Procedure ReleaseVarDesc( pVarDesc : lpVarDesc); stdcall;
      {$else}
       Function  LocalReleaseVarDesc():HResult;StdCall;
      {$endif}

+ 85 - 1
packages/winunits-jedi/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/08/02]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/10/11]
 #
 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 m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
@@ -2435,6 +2435,9 @@ REQUIRE_PACKAGES_RTL=1
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 REQUIRE_PACKAGES_WINUNITS-BASE=1
 endif
 ifeq ($(FULL_TARGET),i386-os2)
@@ -2556,6 +2559,9 @@ REQUIRE_PACKAGES_RTL=1
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
 REQUIRE_PACKAGES_WINUNITS-BASE=1
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
@@ -2629,6 +2635,84 @@ ifdef UNITDIR_RTL
 override COMPILER_UNITDIR+=$(UNITDIR_RTL)
 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
+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
+endif
+ifdef REQUIRE_PACKAGES_FCL-XML
+PACKAGEDIR_FCL-XML:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-xml/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FCL-XML),)
+ifneq ($(wildcard $(PACKAGEDIR_FCL-XML)/units/$(TARGETSUFFIX)),)
+UNITDIR_FCL-XML=$(PACKAGEDIR_FCL-XML)/units/$(TARGETSUFFIX)
+else
+UNITDIR_FCL-XML=$(PACKAGEDIR_FCL-XML)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FCL-XML)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_FCL-XML) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-XML)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FCL-XML=
+UNITDIR_FCL-XML:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-xml/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FCL-XML),)
+UNITDIR_FCL-XML:=$(firstword $(UNITDIR_FCL-XML))
+else
+UNITDIR_FCL-XML=
+endif
+endif
+ifdef UNITDIR_FCL-XML
+override COMPILER_UNITDIR+=$(UNITDIR_FCL-XML)
+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
+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
+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),)

+ 2 - 2
packages/winunits-jedi/Makefile.fpc

@@ -7,8 +7,8 @@ name=winunits-jedi
 version=2.5.1
 
 [require]
-packages_win32=winunits-base
-packages_win64=winunits-base
+packages_win32=winunits-base fcl-registry fcl-base
+packages_win64=winunits-base fcl-registry fcl-base
 
 [target]
 units=buildjwa

+ 1 - 1
rtl/bsd/ossysc.inc

@@ -552,6 +552,6 @@ end;
 
 function FpSetRLimit(Resource:cint;rlim:PRLimit):cint; [public, alias : 'FPC_SYSC_SETRLIMIT'];
 begin
-  fpsetrlimit:=do_syscall(syscall_nr_getrlimit,TSysParam(Resource),TSysParam(rlim));
+  fpsetrlimit:=do_syscall(syscall_nr_setrlimit,TSysParam(Resource),TSysParam(rlim));
 end;
 

+ 12 - 2
rtl/linux/ossysc.inc

@@ -568,13 +568,18 @@ begin
  fpgettimeofday:=do_syscall(syscall_nr_gettimeofday,TSysParam(tp),TSysParam(tzp));
 end;
 
-{$ifndef NO_SYSCALL_GETRLIMIT}
+
 function FpGetRLimit(resource : cInt; rlim : PRLimit) : cInt;
 begin
+{$ifndef NO_SYSCALL_GETRLIMIT}
   FpGetRLimit := do_syscall(syscall_nr_getrlimit,
     TSysParam(resource), TSysParam(rlim));
-end;
+{$else}
+  FpGetRLimit := do_syscall(syscall_nr_ugetrlimit,
+    TSysParam(resource), TSysParam(rlim));
 {$endif}
+end;
+
 
 {$ifdef HAS_UGETRLIMIT}
 function fpugetrlimit(resource : cInt; rlim : PRLimit) : cInt;
@@ -592,3 +597,8 @@ begin
 end;
 {$endif}
 
+function FpSetRLimit(Resource:cint;rlim:PRLimit):cint; [public, alias : 'FPC_SYSC_SETRLIMIT'];
+begin
+  fpsetrlimit:=do_syscall(syscall_nr_setrlimit,TSysParam(Resource),TSysParam(rlim));
+end;
+

+ 58 - 46
rtl/objpas/classes/compon.inc

@@ -41,32 +41,38 @@ end;
 Function  TComponent.GetComponent(AIndex: Integer): TComponent;
 
 begin
-  If assigned(FComponents) then
-    Result:=TComponent(FComponents.Items[Aindex])
+  If not assigned(FComponents) then
+    Result:=Nil
   else
-    Result:=Nil;
+    Result:=TComponent(FComponents.Items[Aindex]);
 end;
 
 function TComponent.IsImplementorOf (const Intf:IInterface):boolean;
 var ref : IInterfaceComponentReference;
 begin
- result:=assigned(intf) and supports(intf,IInterfaceComponentReference,ref) and (ref.getcomponent=self);
+ result:=assigned(intf) and supports(intf,IInterfaceComponentReference,ref);
+ if result then
+   result:=ref.getcomponent=self;
 end;
 
 procedure TComponent.ReferenceInterface(const intf:IInterface;op:TOperation);
 var ref : IInterfaceComponentReference;
+    comp : TComponent;
 begin
  if assigned(intf) and supports(intf,IInterfaceComponentReference,ref) then
-    ref.getcomponent.notification(self,op);
+   begin
+    comp:=ref.getcomponent;
+    comp.notification(self,op); 
+   end;
 end;
 
 Function  TComponent.GetComponentCount: Integer;
 
 begin
-  If assigned(FComponents) then
-    Result:=FComponents.Count
-  else
+  If not assigned(FComponents) then
     result:=0
+  else
+    Result:=FComponents.Count;
 end;
 
 
@@ -74,7 +80,7 @@ Function  TComponent.GetComponentIndex: Integer;
 
 begin
   If Assigned(FOwner) and Assigned(FOwner.FComponents) then
-    Result:=FOwner.FComponents.IndexOf(Self)
+    Result:=FOWner.FComponents.IndexOf(Self)
   else
     Result:=-1;
 end;
@@ -108,7 +114,7 @@ Procedure TComponent.Remove(AComponent: TComponent);
 
 begin
   AComponent.FOwner:=Nil;
-  If assigned(FComponents) then
+  If assigned(FCOmponents) then
     begin
     FComponents.Remove(AComponent);
     IF FComponents.Count=0 then
@@ -130,7 +136,7 @@ begin
       begin
       FFreeNotifies.Free;
       FFreeNotifies:=nil;
-      Exclude(FComponentState, csFreeNotification);
+      Exclude(FComponentState,csFreeNotification);
       end;
     end;
 end;
@@ -141,7 +147,7 @@ Procedure TComponent.SetComponentIndex(Value: Integer);
 Var Temp,Count : longint;
 
 begin
-  If Not assigned(FOwner) then exit;
+  If Not assigned(Fowner) then exit;
   Temp:=getcomponentindex;
   If temp<0 then exit;
   If value<0 then value:=0;
@@ -253,13 +259,13 @@ end;
 Procedure TComponent.Loaded;
 
 begin
-  Exclude(FComponentState, csLoading);
+  Exclude(FComponentState,csLoading);
 end;
 
 Procedure TComponent.Loading;
 
 begin
-  Include(FComponentState, csLoading);
+  Include(FComponentState,csLoading);
 end;
 
 
@@ -272,11 +278,10 @@ begin
   If (Operation=opRemove) and Assigned(FFreeNotifies) then
     begin
     FFreeNotifies.Remove(AComponent);
-    If FFreeNotifies.Count=0 then
+            If FFreeNotifies.Count=0 then
       begin
       FFreeNotifies.Free;
       FFreenotifies:=Nil;
-      Exclude(FComponentState, csFreeNotification);
       end;
     end;
   If assigned(FComponents) then
@@ -303,9 +308,9 @@ Var Runner : Longint;
 
 begin
   If Value then
-    Include(FComponentState, csAncestor)
+    Include(FComponentState,csAncestor)
   else
-    Exclude(FComponentState, csAncestor);
+    Exclude(FCOmponentState,csAncestor);
   if Assigned(FComponents) then
     For Runner:=0 To FComponents.Count-1 do
       TComponent(FComponents.Items[Runner]).SetAncestor(Value);
@@ -318,9 +323,9 @@ Var Runner : Longint;
 
 begin
   If Value then
-    Include(FComponentState, csDesigning)
+    Include(FComponentState,csDesigning)
   else
-    Exclude(FComponentState, csDesigning);
+    Exclude(FComponentState,csDesigning);
   if Assigned(FComponents) and SetChildren then
     For Runner:=0 To FComponents.Count - 1 do
       TComponent(FComponents.items[Runner]).SetDesigning(Value);
@@ -330,18 +335,18 @@ Procedure TComponent.SetDesignInstance(Value: Boolean);
 
 begin
   If Value then
-    Exclude(FComponentState, csDesignInstance)
+    Include(FComponentState,csDesignInstance)
   else
-    Include(FComponentState, csDesignInstance);
+    Exclude(FComponentState,csDesignInstance);
 end;
 
 Procedure TComponent.SetInline(Value: Boolean);
 
 begin
   If Value then
-    Exclude(FComponentState, csInline)
+    Include(FComponentState,csInline)
   else
-    Include(FComponentState, csInline);
+    Exclude(FComponentState,csInline);
 end;
 
 
@@ -378,14 +383,14 @@ end;
 Procedure TComponent.Updating;
 
 begin
-  Include(FComponentState, csUpdating);
+  Include (FComponentState,csUpdating);
 end;
 
 
 Procedure TComponent.Updated;
 
 begin
-  Exclude(FComponentState, csUpdating);
+  Exclude(FComponentState,csUpdating);
 end;
 
 
@@ -438,27 +443,30 @@ begin
 end;
 
 
-Procedure TComponent.BeforeDestruction;
-
-begin
-  Destroying;
-  inherited BeforeDestruction;
-end;
-
-
 Destructor TComponent.Destroy;
 
 Var
   I : Integer;
-  L : TList;
+  C : TComponent;
+
 begin
+  Destroying;
   If Assigned(FFreeNotifies) then
     begin
-    L := FFreeNotifies;
-    FFreenotifies:=Nil;
-    for I := L.Count - 1 downto 0 do
-      TComponent(L.Items[I]).Notification(self,opRemove);
-    L.Free;
+    I:=FFreeNotifies.Count-1;
+    While (I>=0) do
+      begin
+      C:=TComponent(FFreeNotifies.Items[I]);
+      // Delete, so one component is not notified twice, if it is owned.
+      FFreeNotifies.Delete(I);
+      C.Notification (self,opRemove);
+      If (FFreeNotifies=Nil) then
+        I:=0
+      else if (I>FFreeNotifies.Count) then
+        I:=FFreeNotifies.Count;
+      dec(i);
+      end;
+    FreeAndNil(FFreeNotifies);
     end;
   DestroyComponents;
   If FOwner<>Nil Then FOwner.RemoveComponent(Self);
@@ -466,6 +474,13 @@ begin
 end;
 
 
+Procedure TComponent.BeforeDestruction;
+begin
+  if not(csDestroying in FComponentstate) then
+    Destroying;
+end;
+
+
 Procedure TComponent.DestroyComponents;
 
 Var acomponent: TComponent;
@@ -486,7 +501,7 @@ Var Runner : longint;
 
 begin
   If csDestroying in FComponentstate Then Exit;
-  Include(FComponentState, csDestroying);
+  include (FComponentState,csDestroying);
   If Assigned(FComponents) then
     for Runner:=0 to FComponents.Count-1 do
       TComponent(FComponents.Items[Runner]).Destroying;
@@ -529,11 +544,8 @@ begin
     AComponent.Notification(Self,opRemove)
   else
     begin
-    If not Assigned(FFreeNotifies) then
-      begin
-        FFreeNotifies:=TList.Create;
-        Include(FComponentState, csFreeNotification);
-      end;
+    If not (Assigned(FFreeNotifies)) then
+      FFreeNotifies:=TList.Create;
     If FFreeNotifies.IndexOf(AComponent)=-1 then
       begin
       FFreeNotifies.Add(AComponent);

+ 33 - 33
rtl/objpas/dateutil.inc

@@ -174,7 +174,7 @@ Function EndOfADay(const AYear, ADayOfYear: Word): TDateTime; overload;
 
 Function MonthOfTheYear(const AValue: TDateTime): Word;
 Function WeekOfTheYear(const AValue: TDateTime): Word; overload;
-Function WeekOfTheYear(const AValue: TDateTime; var AYear: Word): Word; overload;
+Function WeekOfTheYear(const AValue: TDateTime; out AYear: Word): Word; overload;
 Function DayOfTheYear(const AValue: TDateTime): Word;
 Function HourOfTheYear(const AValue: TDateTime): Word;
 Function MinuteOfTheYear(const AValue: TDateTime): LongWord;
@@ -186,7 +186,7 @@ Function MilliSecondOfTheYear(const AValue: TDateTime): Int64;
   ---------------------------------------------------------------------}
 
 Function WeekOfTheMonth(const AValue: TDateTime): Word; overload;
-Function WeekOfTheMonth(const AValue: TDateTime; var AYear, AMonth: Word): Word; overload;
+Function WeekOfTheMonth(const AValue: TDateTime; out AYear, AMonth: Word): Word; overload;
 Function DayOfTheMonth(const AValue: TDateTime): Word;
 Function HourOfTheMonth(const AValue: TDateTime): Word;
 Function MinuteOfTheMonth(const AValue: TDateTime): Word;
@@ -300,8 +300,8 @@ Function IncMilliSecond(const AValue: TDateTime): TDateTime; // ; const ANumberO
   ---------------------------------------------------------------------}
 
 Function EncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word): TDateTime;
-Procedure DecodeDateTime(const AValue: TDateTime; var AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word);
-Function TryEncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word; var AValue: TDateTime): Boolean;
+Procedure DecodeDateTime(const AValue: TDateTime; out AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word);
+Function TryEncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word; out AValue: TDateTime): Boolean;
 
 { ---------------------------------------------------------------------
     Encode/decode date, specifying week of year and day of week
@@ -309,25 +309,25 @@ Function TryEncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond, A
 
 Function EncodeDateWeek(const AYear, AWeekOfYear: Word; const ADayOfWeek: Word): TDateTime;
 Function EncodeDateWeek(const AYear, AWeekOfYear: Word): TDateTime; //; const ADayOfWeek: Word = 1
-Procedure DecodeDateWeek(const AValue: TDateTime; var AYear, AWeekOfYear, ADayOfWeek: Word);
-Function TryEncodeDateWeek(const AYear, AWeekOfYear: Word; var AValue: TDateTime; const ADayOfWeek: Word): Boolean;
-Function TryEncodeDateWeek(const AYear, AWeekOfYear: Word; var AValue: TDateTime): Boolean; //; const ADayOfWeek: Word = 1
+Procedure DecodeDateWeek(const AValue: TDateTime; out AYear, AWeekOfYear, ADayOfWeek: Word);
+Function TryEncodeDateWeek(const AYear, AWeekOfYear: Word; out AValue: TDateTime; const ADayOfWeek: Word): Boolean;
+Function TryEncodeDateWeek(const AYear, AWeekOfYear: Word; out AValue: TDateTime): Boolean; //; const ADayOfWeek: Word = 1
 
 { ---------------------------------------------------------------------
     Encode/decode date, specifying day of year
   ---------------------------------------------------------------------}
 
 Function EncodeDateDay(const AYear, ADayOfYear: Word): TDateTime;
-Procedure DecodeDateDay(const AValue: TDateTime; var AYear, ADayOfYear: Word);
-Function TryEncodeDateDay(const AYear, ADayOfYear: Word; var AValue: TDateTime): Boolean;
+Procedure DecodeDateDay(const AValue: TDateTime; out AYear, ADayOfYear: Word);
+Function TryEncodeDateDay(const AYear, ADayOfYear: Word; out AValue: TDateTime): Boolean;
 
 { ---------------------------------------------------------------------
     Encode/decode date, specifying week of month
   ---------------------------------------------------------------------}
 
 Function EncodeDateMonthWeek(const AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word): TDateTime;
-Procedure DecodeDateMonthWeek(const AValue: TDateTime; var AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word);
-Function TryEncodeDateMonthWeek(const AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word; var AValue: TDateTime): Boolean;
+Procedure DecodeDateMonthWeek(const AValue: TDateTime; out AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word);
+Function TryEncodeDateMonthWeek(const AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word; out AValue: TDateTime): Boolean;
 
 { ---------------------------------------------------------------------
     Replace given element with supplied value.
@@ -343,7 +343,7 @@ Function RecodeMilliSecond(const AValue: TDateTime; const AMilliSecond: Word): T
 Function RecodeDate(const AValue: TDateTime; const AYear, AMonth, ADay: Word): TDateTime;
 Function RecodeTime(const AValue: TDateTime; const AHour, AMinute, ASecond, AMilliSecond: Word): TDateTime;
 Function RecodeDateTime(const AValue: TDateTime; const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word): TDateTime;
-Function TryRecodeDateTime(const AValue: TDateTime; const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word; var AResult: TDateTime): Boolean;
+Function TryRecodeDateTime(const AValue: TDateTime; const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word; out AResult: TDateTime): Boolean;
 
 { ---------------------------------------------------------------------
     Comparision of date/time
@@ -364,10 +364,10 @@ Function SameTime(const A, B: TDateTime): Boolean;
 
 Function NthDayOfWeek(const AValue: TDateTime): Word;
 
-Procedure DecodeDayOfWeekInMonth(const AValue: TDateTime; var AYear, AMonth, ANthDayOfWeek, ADayOfWeek: Word);
+Procedure DecodeDayOfWeekInMonth(const AValue: TDateTime; out AYear, AMonth, ANthDayOfWeek, ADayOfWeek: Word);
 
 Function EncodeDayOfWeekInMonth(const AYear, AMonth, ANthDayOfWeek,  ADayOfWeek: Word): TDateTime;
-Function TryEncodeDayOfWeekInMonth(const AYear, AMonth, ANthDayOfWeek,  ADayOfWeek: Word; var AValue: TDateTime): Boolean;
+Function TryEncodeDayOfWeekInMonth(const AYear, AMonth, ANthDayOfWeek,  ADayOfWeek: Word; out AValue: TDateTime): Boolean;
 
 { ---------------------------------------------------------------------
     Exception throwing routines
@@ -386,11 +386,11 @@ Procedure InvalidDayOfWeekInMonthError(const AYear, AMonth, ANthDayOfWeek,  ADay
 
 Function DateTimeToJulianDate(const AValue: TDateTime): Double;
 Function JulianDateToDateTime(const AValue: Double): TDateTime;
-Function TryJulianDateToDateTime(const AValue: Double; var ADateTime: TDateTime): Boolean;
+Function TryJulianDateToDateTime(const AValue: Double; out ADateTime: TDateTime): Boolean;
 
 Function DateTimeToModifiedJulianDate(const AValue: TDateTime): Double;
 Function ModifiedJulianDateToDateTime(const AValue: Double): TDateTime;
-Function TryModifiedJulianDateToDateTime(const AValue: Double; var ADateTime: TDateTime): Boolean;
+Function TryModifiedJulianDateToDateTime(const AValue: Double; out ADateTime: TDateTime): Boolean;
 
 { ---------------------------------------------------------------------
     Unix timestamp support.
@@ -917,7 +917,7 @@ begin
 end;
 
 
-Function WeekOfTheYear(const AValue: TDateTime; var AYear: Word): Word;
+Function WeekOfTheYear(const AValue: TDateTime; out AYear: Word): Word;
 
 Var
   DOW : Word;
@@ -992,7 +992,7 @@ begin
 end;
 
 
-Function WeekOfTheMonth(const AValue: TDateTime; var AYear, AMonth: Word): Word;
+Function WeekOfTheMonth(const AValue: TDateTime; out AYear, AMonth: Word): Word;
 
 Var
   DOW : Word;
@@ -1410,7 +1410,7 @@ end;
     Increment/decrement functions.
   ---------------------------------------------------------------------}
 
-Procedure MaybeSkipTimeWarp(OldDate: TDateTime; var NewDate: TDateTime);
+Procedure MaybeSkipTimeWarp(OldDate: TDateTime; out NewDate: TDateTime);
 begin
   if (OldDate>0) and (NewDate<0) then
     NewDate:=NewDate-0.5
@@ -1528,14 +1528,14 @@ begin
 end;
 
 
-Procedure DecodeDateTime(const AValue: TDateTime; var AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word);
+Procedure DecodeDateTime(const AValue: TDateTime; out AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word);
 begin
   DecodeDate(AValue,AYear,AMonth,ADay);
   DecodeTime(AValue,AHour,AMinute,ASecond,AMilliSecond);
 end;
 
 
-Function TryEncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word; var AValue: TDateTime): Boolean;
+Function TryEncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word; out AValue: TDateTime): Boolean;
 
 Var
  tmp : TDateTime;
@@ -1564,7 +1564,7 @@ begin
 end;
 
 
-Procedure DecodeDateWeek(const AValue: TDateTime; var AYear, AWeekOfYear, ADayOfWeek: Word);
+Procedure DecodeDateWeek(const AValue: TDateTime; out AYear, AWeekOfYear, ADayOfWeek: Word);
 
 var
   DOY : Integer;
@@ -1614,7 +1614,7 @@ end;
 
 
 
-Function TryEncodeDateWeek(const AYear, AWeekOfYear: Word; var AValue: TDateTime; const ADayOfWeek: Word): Boolean;
+Function TryEncodeDateWeek(const AYear, AWeekOfYear: Word; out AValue: TDateTime; const ADayOfWeek: Word): Boolean;
 
 Var
   DOW : Word;
@@ -1634,7 +1634,7 @@ begin
 end;
 
 
-Function TryEncodeDateWeek(const AYear, AWeekOfYear: Word; var AValue: TDateTime): Boolean; //; const ADayOfWeek: Word = 1
+Function TryEncodeDateWeek(const AYear, AWeekOfYear: Word; out AValue: TDateTime): Boolean; //; const ADayOfWeek: Word = 1
 begin
   Result:=TryEncodeDateWeek(AYear,AWeekOfYear,AValue,1);
 end;
@@ -1650,7 +1650,7 @@ begin
 end;
 
 
-Procedure DecodeDateDay(const AValue: TDateTime; var AYear, ADayOfYear: Word);
+Procedure DecodeDateDay(const AValue: TDateTime; out AYear, ADayOfYear: Word);
 
 Var
   M,D : Word;
@@ -1661,7 +1661,7 @@ begin
 end;
 
 
-Function TryEncodeDateDay(const AYear, ADayOfYear: Word; var AValue: TDateTime): Boolean;
+Function TryEncodeDateDay(const AYear, ADayOfYear: Word; out AValue: TDateTime): Boolean;
 begin
   Result:=(ADayOfYear<>0) and (ADayOfYear<=DaysPerYear [IsleapYear(AYear)]);
   If Result then
@@ -1680,7 +1680,7 @@ begin
     InvalidDateMonthWeekError(AYear,AMonth,AWeekOfMonth,ADayOfWeek);
 end;
 
-Procedure DecodeDateMonthWeek(const AValue: TDateTime; var AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word);
+Procedure DecodeDateMonthWeek(const AValue: TDateTime; out AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word);
 
 Var
   D,SDOM,EDOM : Word;
@@ -1715,7 +1715,7 @@ begin
     end;
 end;
 
-Function TryEncodeDateMonthWeek(const AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word; var AValue: TDateTime): Boolean;
+Function TryEncodeDateMonthWeek(const AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word; out AValue: TDateTime): Boolean;
 
 var
   S : Word;
@@ -1813,7 +1813,7 @@ begin
 end;
 
 
-Function TryRecodeDateTime(const AValue: TDateTime; const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word; var AResult: TDateTime): Boolean;
+Function TryRecodeDateTime(const AValue: TDateTime; const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word; out AResult: TDateTime): Boolean;
 
   Procedure FV (Var AV : Word; Arg : Word);
 
@@ -1908,7 +1908,7 @@ begin
 end;
 
 
-Procedure DecodeDayOfWeekInMonth(const AValue: TDateTime; var AYear, AMonth, ANthDayOfWeek, ADayOfWeek: Word);
+Procedure DecodeDayOfWeekInMonth(const AValue: TDateTime; out AYear, AMonth, ANthDayOfWeek, ADayOfWeek: Word);
 
 var
   D: Word;
@@ -1927,7 +1927,7 @@ begin
 end;
 
 
-Function TryEncodeDayOfWeekInMonth(const AYear, AMonth, ANthDayOfWeek,  ADayOfWeek: Word; var AValue: TDateTime): Boolean;
+Function TryEncodeDayOfWeekInMonth(const AYear, AMonth, ANthDayOfWeek,  ADayOfWeek: Word; out AValue: TDateTime): Boolean;
 
 Var
   SOM,D : Word;
@@ -2035,7 +2035,7 @@ begin
 end;
 
 
-Function TryJulianDateToDateTime(const AValue: Double; var ADateTime: TDateTime): Boolean;
+Function TryJulianDateToDateTime(const AValue: Double; out ADateTime: TDateTime): Boolean;
 begin
   ADateTime := JulianDateToDateTime(AValue);
   TryJulianDateToDateTime := ADateTime <> NaN;
@@ -2055,7 +2055,7 @@ begin
 end;
 
 
-Function TryModifiedJulianDateToDateTime(const AValue: Double; var ADateTime: TDateTime): Boolean;
+Function TryModifiedJulianDateToDateTime(const AValue: Double; out ADateTime: TDateTime): Boolean;
 begin
   Result:=False;
   NotYetImplemented('TryModifiedJulianDateToDateTime');

+ 48 - 41
rtl/objpas/sysutils/dati.inc

@@ -473,7 +473,7 @@ Var
 begin
   Result:=IntStrToDate(Msg,S,Len,useFormat,Separator);
   If (Msg<>'') then
-    EConvertError.Create(Msg);
+    Raise EConvertError.Create(Msg);
 end;
 
 function StrToDate(const S: ShortString; const useformat : string; separator : char = #0): TDateTime;
@@ -633,51 +633,58 @@ end;
 
 function StrToDateTime(const s: string): TDateTime;
 var
-  i: integer;
-begin
-       i := Pos(' ',s);
-       if i > 0 then begin
-                result := ComposeDateTime(StrToDate(@S[1], i - 1, ShortDateFormat, DateSeparator)
-                                        , StrToTime(@S[i+1], Length(S)-i , TimeSeparator));
-       end
-       else if pos(TimeSeparator,s) > 0 then
-           result := StrToTime(s,TimeSeparator)
-       else
-           result := StrToDate(s,LongDateFormat, DateSeparator)
-end ;
+  I: integer;
+begin
+  I:=Pos(TimeSeparator,S);
+  If (I>0) then
+    begin
+    While (I>0) and (S[I]<>' ') do
+      Dec(I);
+    If I>0 then
+      result:=ComposeDateTime(StrToDate(Copy(S,1,I-1)),StrToTime(Copy(S,i+1, Length(S)-i)))
+    else
+      result:=StrToTime(S)
+    end
+  else
+    Result:=StrToDate(S);
+end;
 
-function StrToDateTime(const s: ShortString; const UseFormat : TFormatSettings): TDateTime;
+function StrToDateTime(const s: AnsiString; const UseFormat : TFormatSettings): TDateTime;
 var
-  i : integer;
-begin
-   with useformat do begin
-       i := Pos(' ',s);
-       if i > 0 then begin
-                result := ComposeDateTime(StrToDate(@S[1], i - 1, ShortDateFormat, DateSeparator)
-                                        , StrToTime(@S[i+1], Length(S)-i , TimeSeparator));
-       end
-       else if pos(TimeSeparator,s) > 0 then
-           result := StrToTime(s,TimeSeparator)
-       else
-           result := StrToDate(s, ShortDateFormat, DateSeparator)
-   end;
+  I: integer;
+begin
+  I:=Pos(TimeSeparator,S);
+  If (I>0) then
+    begin
+    While (I>0) and (S[I]<>' ') do
+      Dec(I);
+    If I>0 then
+      result:=ComposeDateTime(StrToDate(Copy(S,1,I-1),UseFormat.ShortDateFormat,UseFormat.DateSeparator),
+                              StrToTime(Copy(S,i+1, Length(S)-i),UseFormat.TimeSeparator))
+    else
+      result:=StrToTime(S,UseFormat.TimeSeparator)
+    end
+  else
+    Result:=StrToDate(S,UseFormat.ShortDateFormat,UseFormat.DateSeparator);
 end;
 
-function StrToDateTime(const s: AnsiString; const UseFormat : TFormatSettings): TDateTime;
+function StrToDateTime(const s: ShortString; const UseFormat : TFormatSettings): TDateTime;
 var
-  i : integer;
-begin
-   with useformat do begin
-       i := Pos(' ',s);
-       if i > 0 then begin
-                result := ComposeDateTime(StrToDate(@S[1], i - 1, ShortDateFormat, DateSeparator)
-                                        , StrToTime(@S[i+1], Length(S)-i , TimeSeparator));
-       end
-       else if pos(TimeSeparator,s) > 0 then
-           result := StrToTime(s,TimeSeparator)
-       else
-           result := StrToDate(s,ShortDateFormat, DateSeparator)
-   end;
+  I: integer;
+begin
+  I:=Pos(TimeSeparator,S);
+  If (I>0) then
+    begin
+    While (I>0) and (S[I]<>' ') do
+      Dec(I);
+    If I>0 then
+      result:=ComposeDateTime(StrToDate(Copy(S,1,I-1),UseFormat.ShortDateFormat,UseFormat.DateSeparator),
+                              StrToTime(Copy(S,i+1, Length(S)-i),UseFormat.TimeSeparator))
+    else
+      result:=StrToTime(S,UseFormat.TimeSeparator)
+    end
+  else
+    Result:=StrToDate(S,UseFormat.ShortDateFormat,UseFormat.DateSeparator);
 end;
 
 {   FormatDateTime formats DateTime to the given format string FormatStr   }

+ 3 - 0
rtl/unix/bunxh.inc

@@ -106,3 +106,6 @@ Type TGrpArr = Array [0..0] of TGid;            { C style array workarounds}
     Function  FpGetEnv     (name : pChar): pChar;
     function  fpsettimeofday(tp:ptimeval;tzp:ptimezone):cint;
 
+    function FpGetRLimit(resource:cint;rlim:PRLimit):cint; external name 'FPC_SYSC_GETRLIMIT';
+    function FpSetRLimit(Resource:cint;rlim:PRLimit):cint; external name 'FPC_SYSC_SETRLIMIT';
+

+ 10 - 0
tests/webtbf/tw14713.pp

@@ -0,0 +1,10 @@
+{ %fail }
+{ %opt=-vw -Sew }
+
+{$mode delphi}
+
+var
+  p: pointer;
+begin
+  p:=0;
+end.

+ 9 - 0
tests/webtbf/tw14713a.pp

@@ -0,0 +1,9 @@
+{ %fail }
+
+{$mode delphi}
+
+var
+  p: pointer;
+begin
+  p:=1;
+end.

+ 27 - 0
tests/webtbs/tw14812.pp

@@ -0,0 +1,27 @@
+type
+  stdstrlong = string;
+
+procedure PackStr // Convert string to packed array
+   ( InStr: StdStrLong;
+    var OutArr: packed array of char);
+var
+  i: longint;
+begin
+  if (low(outarr)<>0) or
+     (high(outarr)<>5) then
+    halt(1);
+  if (instr<>'abc') then
+    halt(2);
+  for i:=1 to length(instr) do
+    outarr[i-1]:=instr[i];
+end;
+
+var
+  a: packed array[5..10] of char;
+begin
+  packstr('abc',a);
+  if (a[5]<>'a') or
+     (a[6]<>'b') or
+     (a[7]<>'c') then
+    halt(1);
+end.

+ 500 - 0
utils/fpdoc/dw_dxml.pp

@@ -0,0 +1,500 @@
+unit dw_dXML;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  PasTree, dwriter, SysUtils;
+//uses DOM, PasTree, dwriter, xmlWrite, SysUtils;
+
+type
+  { TXMLWriter }
+
+  TDXMLWriter = class(TFPDocWriter)
+    procedure WriteDoc; override;
+  end;
+
+  { TDocumentation }
+
+  TDocumentation = class(TPassTreeVisitor)
+    f:   Text;
+    lvl: integer;
+
+    procedure GenerateDoc(OutputName: string; Module: TPasModule);
+
+    procedure DocParameters(obj: TPasProcedureType);
+    function DocProcFlags(obj: TPasProcedure): string;
+
+    procedure Visit(obj: TPasElement); override;
+
+    procedure DoVisit(obj: TPasSection); virtual;
+
+    procedure DoVisit(obj: TPasRecordType); virtual;
+    procedure DoVisit(obj: TPasEnumType); virtual;
+    procedure DoVisit(obj: TPasProperty); virtual;
+    procedure DoVisit(obj: TPasConst); virtual;
+    procedure DoVisit(obj: TPasVariable); virtual;
+    procedure DoVisit(obj: TPasProcedure); virtual;
+    procedure DoVisit(obj: TPasDestructor); virtual;
+    procedure DoVisit(obj: TPasConstructor); virtual;
+    procedure DoVisit(obj: TPasFunction); virtual;
+    procedure DoVisit(obj: TPasClassType); virtual;
+    procedure DoVisit(obj: TPasElement); virtual;
+    procedure DoVisit(obj: TPasOverloadedProc); virtual;
+    procedure DoVisit(obj: TPasPointerType); virtual;
+    procedure DoVisit(obj: TPasArrayType); virtual;
+    procedure DoVisit(obj: TPasProcedureType); virtual;
+    procedure DoVisit(obj: TPasFunctionType); virtual;
+    procedure DoVisit(obj: TPasResString); virtual;
+  end;
+
+implementation
+
+function EscapeXml(const s: string): string;
+begin
+  Result := StringReplace(s, '&', '&amp;', [rfReplaceAll]);
+  Result := StringReplace(Result, '<', '&lt;', [rfReplaceAll]);
+  Result := StringReplace(Result, '>', '&gt;', [rfReplaceAll]);
+end;
+
+{ TDocumentation }
+
+procedure TDocumentation.Visit(obj: TPasElement); 
+
+begin
+  If (Obj.ClassType=TPasSection) then
+    DoVisit(TPasSection(Obj))
+  else if (Obj.ClassType=TPasRecordType) then
+    DoVisit(TPasRecordType(Obj))
+  else if (Obj.ClassType=TPasEnumType) then
+    DoVisit(TPasEnumType(Obj))
+  else if (Obj.ClassType=TPasProperty) then
+    DoVisit(TPasProperty(Obj))
+  else if (Obj.ClassType=TPasConst) then
+    DoVisit(TPasConst(Obj))
+  else if (Obj.ClassType=TPasVariable) then
+    DoVisit(TPasVariable(Obj))
+  else if (Obj.ClassType=TPasProcedure) then
+    DoVisit(TPasProcedure(Obj))
+  else if (Obj.ClassType=TPasDestructor) then
+    DoVisit(TPasDestructor(Obj))
+  else if (Obj.ClassType=TPasConstructor) then
+    DoVisit(TPasConstructor(Obj))
+  else if (Obj.ClassType=TPasFunction) then
+    DoVisit(TPasFunction(Obj))
+  else if (Obj.ClassType=TPasClassType) then
+    DoVisit(TPasClassType(Obj))
+  else if (Obj.ClassType=TPasOverloadedProc) then
+    DoVisit(TPasOverloadedProc(Obj))
+  else if (Obj.ClassType=TPasPointerType) then
+    DoVisit(TPasPointerType(Obj))
+  else if (Obj.ClassType=TPasArrayType) then
+    DoVisit(TPasArrayType(Obj))
+  else if (Obj.ClassType=TPasProcedureType) then
+    DoVisit(TPasProcedureType(Obj))
+  else if (Obj.ClassType=TPasFunctionType) then
+    DoVisit(TPasFunctionType(Obj))
+  else if (Obj.ClassType=TPasResString) then
+    DoVisit(TPasResString(Obj));
+end;
+
+procedure TDocumentation.GenerateDoc(OutputName: string; Module: TPasModule);
+begin
+  lvl := 0;
+  Assign(f, OutputName);
+  Rewrite(f);
+  WriteLn(f, '<?xml version="1.0" encoding="utf-8"?>');
+  WriteLn(f, '<namespace name="', Module.Name, '">');
+
+  Module.InterfaceSection.Accept(Self);
+  //Module.Accept(Self);
+
+  WriteLn(f, '</namespace>');
+  Close(f);
+end;
+
+procedure TDocumentation.DocParameters(obj: TPasProcedureType);
+var
+  I: integer;
+begin
+  for I := 0 to obj.Args.Count - 1 do
+  begin
+    Write(f, ' ': lvl * 2, '<parameter name="' + TPasArgument(obj.Args[i]).Name + '"');
+
+    if TPasArgument(obj.Args[i]).ArgType <> nil then
+      Write(f, ' type="' + TPasArgument(obj.Args[i]).ArgType.Name + '"');
+
+    if TPasArgument(obj.Args[i]).Access <> argDefault then
+      if (TPasArgument(obj.Args[i]).ArgType is TPasClassType) then
+        Write(f, ' paramflags="' + 'var' + '"')
+      else
+        Write(f, ' paramflags="' +
+          Trim(AccessNames[TPasArgument(obj.Args[i]).Access]) + '"');
+
+    if TPasArgument(obj.Args[i]).Value <> '' then
+    begin
+      WriteLn(f, '>');
+      WriteLn(f, ' ': lvl * 2 + 2, '<value>');
+      WriteLn(f, ' ': lvl * 2 + 4, EscapeXml(TPasArgument(obj.Args[i]).Value));
+      WriteLn(f, ' ': lvl * 2 + 2, '</value>');
+      WriteLn(f, ' ': lvl * 2, '</parameter>');
+    end
+    else
+      WriteLn(f, ' />');
+
+  end;
+end;
+
+function TDocumentation.DocProcFlags(obj: TPasProcedure): string;
+
+  procedure DoAdd(B: boolean; S: string);
+  begin
+    if B then
+    begin
+      if Result <> '' then
+        Result := Result + ' ';
+      Result   := Result + S;
+    end;
+  end;
+
+begin
+  Result := '';
+  DoAdd(obj.IsAbstract, 'abstract');
+  Doadd(obj.IsVirtual, 'virtual');
+  DoAdd(obj.IsDynamic, 'dynamic');
+  DoAdd(obj.IsOverride, 'override');
+  DoAdd(obj.IsOverload, 'overload');
+  DoAdd(obj.IsReintroduced, 'reintroduce');
+  DoAdd(obj.IsStatic, 'static');
+  DoAdd(obj.IsMessage, 'message');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasSection);
+var
+  i: integer;
+begin
+  Inc(lvl);
+  for i := 0 to obj.Declarations.Count - 1 do
+    TPasElement(obj.Declarations[i]).Accept(Self);
+  Dec(lvl);
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasRecordType);
+var
+  I: integer;
+begin
+  Write(f, StringOfChar(' ', lvl * 2) + '<struct');
+  if obj.Name <> '' then
+    Write(f, ' name="' + obj.Name + '"');
+  if obj.IsPacked then
+    Write(f, ' packed="true"');
+  WriteLn(f, '>');
+  Inc(lvl);
+  for I := 0 to obj.Members.Count - 1 do
+    TPasVariable(obj.Members[i]).Accept(Self);
+  Dec(lvl);
+  WriteLn(f, StringOfChar(' ', lvl * 2) + '</struct>');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasEnumType);
+var
+  I: integer;
+begin
+  for I := 0 to obj.Values.Count - 1 do
+  begin
+    WriteLn(f, ' ': lvl * 2, '<const name="' + TPasEnumValue(obj.Values[i]).Name + '" type="' +
+      obj.Name + '">');
+    WriteLn(f, ' ': lvl * 2 + 2, '<value>');
+    WriteLn(f, ' ': lvl * 2 + 4, TPasEnumValue(obj.Values[i]).Name);
+    WriteLn(f, ' ': lvl * 2 + 2, '</value>');
+    WriteLn(f, ' ': lvl * 2, '</const>');
+  end;
+
+  WriteLn(f, ' ': lvl * 2, '<enum name="' + obj.Name + '">');
+  for I := 0 to obj.Values.Count - 1 do
+    WriteLn(f, ' ': lvl * 2 + 2, '<element name="' + TPasEnumValue(obj.Values[i]).Name + '" />');
+  WriteLn(f, ' ': lvl * 2, '</enum>');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasProperty);
+begin
+  if (obj.VarType <> nil) and (obj.VarType is TPasProcedureType) and
+    (TPasProcedureType(obj.VarType).IsOfObject) then
+    Write(f, ' ': lvl * 2, '<event name="' + obj.Name + '" visibility="' +
+      VisibilityNames[obj.Visibility] + '"')
+  else
+    Write(f, ' ': lvl * 2, '<property name="' + obj.Name + '" visibility="' +
+      VisibilityNames[obj.Visibility] + '"');
+  if obj.ReadAccessorName <> '' then
+    Write(f, ' read="' + obj.ReadAccessorName + '"');
+  if obj.WriteAccessorName <> '' then
+    Write(f, ' write="' + obj.WriteAccessorName + '"');
+  if obj.VarType <> nil then
+    Write(f, ' type="' + obj.VarType.Name + '"');
+  if obj.DefaultValue <> '' then
+    Write(f, ' default="' + obj.DefaultValue + '"');
+  WriteLn(f, ' />');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasConst);
+begin
+  Write(f, ' ': lvl * 2, '<const name="' + obj.Name + '"');
+  if (obj.VarType <> nil) and (obj.VarType.Name <> '') then
+    Write(f, ' type="' + obj.VarType.Name + '"');
+  WriteLn(f, '>');
+  WriteLn(f, ' ': lvl * 2 + 2, '<value>');
+  WriteLn(f, ' ': lvl * 2 + 4, EscapeXml(obj.Value));
+  WriteLn(f, ' ': lvl * 2 + 2, '</value>');
+  WriteLn(f, ' ': lvl * 2, '</const>');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasVariable);
+begin
+  Write(f, ' ': lvl * 2, '<field name="' + obj.Name + '"');
+  if (obj.VarType <> nil) and (obj.VarType.Name <> '') then
+    Write(f, ' type="' + obj.VarType.Name {.GetDeclaration(True)} + '"');
+  if obj.Visibility <> visDefault then
+    Write(f, ' visibility="' + VisibilityNames[obj.Visibility] + '"');
+
+  if (obj.VarType <> nil) and (obj.VarType.Name = '')
+  {(VarType.ElementTypeName <> SPasTreeType) and (VarType.ElementTypeName <> SPasTreeUnresolvedTypeRef)}
+  then
+  begin
+    WriteLn(f, '>');
+    Inc(lvl);
+    obj.VarType.Accept(Self);
+    Dec(lvl);
+    WriteLn(f, ' ': lvl * 2, '</field>');
+  end
+  else
+    WriteLn(f, ' />');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasProcedure);
+var
+  t: string;
+begin
+  Write(f, ' ': lvl * 2, '<procedure name="' + obj.Name + '"');
+  if obj.Visibility <> visDefault then
+    Write(f, ' visibility="' + VisibilityNames[obj.Visibility] + '"');
+  t := DocProcFlags(obj);
+  if t <> '' then
+    Write(f, ' procflags="' + t + '"');
+  WriteLn(f, '>');
+  Inc(lvl);
+
+  if obj.ProcType.Args.Count > 0 then
+  begin
+    WriteLn(f, ' ': lvl * 2, '<parameters>');
+    Inc(lvl);
+    DocParameters(obj.ProcType);
+    Dec(lvl);
+    WriteLn(f, ' ': lvl * 2, '</parameters>');
+  end;
+
+  Dec(lvl);
+  WriteLn(f, ' ': lvl * 2, '</procedure>');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasDestructor);
+begin
+  Write(f, ' ': lvl * 2, '<destructor name="' + obj.Name + '"');
+  if obj.Visibility <> visDefault then
+    Write(f, ' visibility="' + VisibilityNames[obj.Visibility] + '"');
+  WriteLn(f, '>');
+  Inc(lvl);
+  WriteLn(f, ' ': lvl * 2, '<parameters>');
+  Inc(lvl);
+  DocParameters(obj.ProcType);
+  Dec(lvl);
+  WriteLn(f, ' ': lvl * 2, '</parameters>');
+  Dec(lvl);
+  WriteLn(f, ' ': lvl * 2, '</destructor>');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasConstructor);
+begin
+  Write(f, ' ': lvl * 2, '<constructor name="' + obj.Name + '"');
+  if obj.Visibility <> visDefault then
+    Write(f, ' visibility="' + VisibilityNames[obj.Visibility] + '"');
+  WriteLn(f, '>');
+  Inc(lvl);
+  WriteLn(f, ' ': lvl * 2, '<parameters>');
+  Inc(lvl);
+  DocParameters(obj.ProcType);
+  Dec(lvl);
+  WriteLn(f, ' ': lvl * 2, '</parameters>');
+  Dec(lvl);
+  WriteLn(f, ' ': lvl * 2, '</constructor>');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasFunction);
+var
+  t: string;
+begin
+  Write(f, ' ': lvl * 2, '<function name="' + obj.Name + '"');
+  if obj.Visibility <> visDefault then
+    Write(f, ' visibility="' + VisibilityNames[obj.Visibility] + '"');
+  t := DocProcFlags(obj);
+  if t <> '' then
+    Write(f, ' procflags="' + t + '"');
+  WriteLn(f, '>');
+  Inc(lvl);
+  WriteLn(f, ' ': lvl * 2, '<parameters>');
+  Inc(lvl);
+  DocParameters(obj.ProcType);
+  WriteLn(f, ' ': lvl * 2, '<retval type="' +
+    TPasFunctionType(obj.ProcType).ResultEl.ResultType.Name + '" />');
+  Dec(lvl);
+  WriteLn(f, ' ': lvl * 2, '</parameters>');
+  Dec(lvl);
+  WriteLn(f, ' ': lvl * 2, '</function>');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasClassType);
+var
+  i: integer;
+begin
+  case obj.ObjKind of
+    okObject: WriteLn(f, ' ': lvl * 2, '<object name="' + obj.Name + '">');
+    okClass: WriteLn(f, ' ': lvl * 2, '<class name="' + obj.Name + '">');
+    okInterface: WriteLn(f, ' ': lvl * 2, '<interface name="' + obj.Name + '">');
+  end;
+
+  Inc(lvl);
+
+  if obj.AncestorType <> nil then
+    WriteLn(f, ' ': lvl * 2, '<ancestor name="' + obj.AncestorType.GetDeclaration(True) +
+      '" namespace="StdCtrls2">')
+  else
+    WriteLn(f, ' ': lvl * 2, '<ancestor name="TObject" namespace="System">');
+  WriteLn(f, ' ': lvl * 2, '</ancestor>');
+
+  if obj.Members.Count > 0 then
+  begin
+    WriteLn(f, ' ': lvl * 2, '<members>');
+    Inc(lvl);
+    for i := 0 to obj.Members.Count - 1 do
+      TPasProperty(obj.Members[i]).Accept(Self);
+    Dec(lvl);
+    WriteLn(f, ' ': lvl * 2, '</members>');
+  end;
+
+  Dec(lvl);
+
+  case obj.ObjKind of
+    okObject: WriteLn(f, ' ': lvl * 2, '</object>');
+    okClass: WriteLn(f, ' ': lvl * 2, '</class>');
+    okInterface: WriteLn(f, ' ': lvl * 2, '</interface>');
+  end;
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasElement);
+begin
+  WriteLn('Warning: NOT supported: ' + obj.ClassName + ' (' + obj.Name + ')');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasOverloadedProc);
+var
+  i: integer;
+begin
+  for i := 0 to obj.Overloads.Count - 1 do
+    TPasProcedure(obj.Overloads[i]).Accept(Self);
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasPointerType);
+begin
+  Write(f, ' ': lvl * 2, '<pointer name="' + obj.Name + '"');
+  if obj.DestType <> nil then
+    Write(f, ' type="' + obj.DestType.Name + '"');
+  WriteLn(f, ' indircnt="1" />');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasArrayType);
+begin
+  Write(f, ' ': lvl * 2, '<array name="' + obj.Name + '"');
+  if obj.IndexRange <> '' then
+  begin
+    if Pos('..', obj.IndexRange) <> 0 then
+    begin
+      Write(f, ' low="' + Copy(obj.IndexRange, 1, Pos('..', obj.IndexRange) - 1) + '"');
+      Write(f, ' high="' + Copy(obj.IndexRange, Pos('..', obj.IndexRange) + 2,
+        MaxInt) + '"');
+    end
+    else
+      Write(f, ' high="' + obj.IndexRange + '"');
+  end;
+  WriteLn(f, '>');
+
+  WriteLn(f, '    <element type="' + obj.ElType.Name + '" />');
+  WriteLn(f, '  </array>');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasProcedureType);
+begin
+  Write(f, ' ': lvl * 2, '<procedureDef name="' + obj.Name + '"');
+  if obj.Visibility <> visDefault then
+    Write(f, ' visibility="' + VisibilityNames[obj.Visibility] + '"');
+  WriteLn(f, '>');
+
+  if obj.Args.Count > 0 then
+  begin
+    WriteLn(f, ' ': lvl * 2 + 2, '<parameters>');
+    DocParameters(obj);
+    WriteLn(f, ' ': lvl * 2 + 2, '</parameters>');
+  end;
+
+  WriteLn(f, ' ': lvl * 2, '</procedureDef>');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasFunctionType);
+begin
+  Write(f, ' ': lvl * 2, '<functionDef name="' + obj.Name + '"');
+  if obj.Visibility <> visDefault then
+    Write(f, ' visibility="' + VisibilityNames[obj.Visibility] + '"');
+  WriteLn(f, '>');
+  WriteLn(f, ' ': lvl * 2 + 2, '<parameters>');
+  DocParameters(obj);
+  WriteLn(f, ' ': lvl * 2 + 4, '<retval type="' + obj.ResultEl.ResultType.Name + '" />');
+  WriteLn(f, ' ': lvl * 2 + 2, '</parameters>');
+  WriteLn(f, ' ': lvl * 2, '</functionDef>');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasResString);
+begin
+  WriteLn(f, ' ': lvl * 2, '<resourceString name="' + obj.Name + '">');
+  WriteLn(f, ' ': lvl * 2 + 2, '<value>');
+  WriteLn(f, ' ': lvl * 2 + 4, EscapeXml(obj.Value));
+  WriteLn(f, ' ': lvl * 2 + 2, '</value>');
+  WriteLn(f, ' ': lvl * 2, '</resourceString>');
+end;
+
+{ TXMLWriter }
+
+procedure TDXMLWriter.WriteDoc;
+var
+  i: integer;
+begin
+  if Engine.Output <> '' then
+    Engine.Output := IncludeTrailingBackSlash(Engine.Output);
+
+  for i := 0 to Package.Modules.Count - 1 do
+  begin
+    with TDocumentation.Create do
+    begin
+      GenerateDoc(Engine.Output + TPasModule(Package.Modules[i]).Name +
+        '.xml', TPasModule(Package.Modules[i]));
+      Free;
+    end;
+  end;
+end;
+
+initialization
+  // Do not localize.
+  RegisterWriter(TDXMLWriter, 'dxml', 'fpdoc Delphi XML output.');
+
+finalization
+  UnRegisterWriter('dxml');
+end.
+

+ 12 - 1
utils/fpdoc/dw_xml.pp

@@ -21,7 +21,7 @@ unit dw_XML;
 
 interface
 
-uses DOM, PasTree, dwriter;
+uses DOM, PasTree, dwriter, xmlWrite, SysUtils;
 
 Type
 
@@ -104,8 +104,19 @@ end;
 { TXMLWriter }
 
 procedure TXMLWriter.WriteDoc;
+var
+  doc: TXMLDocument;
+  i: Integer;
 begin
+  if Engine.Output <> '' then
+    Engine.Output := IncludeTrailingBackSlash(Engine.Output);
 
+  for i := 0 to Package.Modules.Count - 1 do
+  begin
+    doc := ModuleToXMLStruct(TPasModule(Package.Modules[i]));
+    WriteXMLFile(doc, Engine.Output + TPasModule(Package.Modules[i]).Name + '.xml' );
+    doc.Free;
+  end;
 end;
 
 initialization

+ 1 - 0
utils/fpdoc/fpdoc.pp

@@ -22,6 +22,7 @@ uses
   dwlinear,  // Linear (abstract) writer
   dw_LaTeX,  // TLaTex writer
   dw_XML,    // XML writer
+  dw_dxml,   // Delphi XML doc.
   dw_HTML,   // HTML writer
   dw_ipf,    // IPF writer
   dw_man,    // Man page writer