From d4037104faa00d4d303b48a9853ef1922d626794 Mon Sep 17 00:00:00 2001 From: laksen Date: Fri, 20 Jul 2018 10:40:28 +0000 Subject: Update packages with information about RiscV. Fix g_external_wrapper, since it uses a register. Fixed calling of gas. Ported cprt0. git-svn-id: https://svn.freepascal.org/svn/fpc/branches/laksen@39475 3ad0048d-3df7-0310-abae-a5850022a9f2 --- riscv_new/Makefile.fpc | 6 + riscv_new/compiler/Makefile.fpc | 28 +- riscv_new/compiler/riscv/agrvgas.pas | 8 +- riscv_new/compiler/riscv/hlcgrv.pas | 43 + riscv_new/compiler/riscv32/cpunode.pas | 3 + riscv_new/compiler/riscv64/cpunode.pas | 3 +- riscv_new/packages/fpmkunit/src/fpmkunit.pp | 84 +- riscv_new/packages/fppkg/src/fpmkunitsrc.inc | 5996 +++++++++++++++----------- riscv_new/rtl/linux/Makefile.fpc | 11 + riscv_new/rtl/linux/ostypes.inc | 2 +- riscv_new/rtl/linux/riscv64/cprt0.as | 68 +- riscv_new/rtl/linux/riscv64/prt0.as | 6 +- riscv_new/rtl/riscv32/cpuh.inc | 15 + riscv_new/rtl/riscv64/cpuh.inc | 15 + riscv_new/utils/fpcm/revision.inc | 2 +- 15 files changed, 3625 insertions(+), 2665 deletions(-) create mode 100644 riscv_new/rtl/riscv32/cpuh.inc create mode 100644 riscv_new/rtl/riscv64/cpuh.inc diff --git a/riscv_new/Makefile.fpc b/riscv_new/Makefile.fpc index 618826ca49..69228392ba 100644 --- a/riscv_new/Makefile.fpc +++ b/riscv_new/Makefile.fpc @@ -85,6 +85,12 @@ endif ifeq ($(CPU_TARGET),aarch64) PPSUF=a64 endif +ifeq ($(CPU_TARGET),riscv32) +PPSUF=rv32 +endif +ifeq ($(CPU_TARGET),riscv64) +PPSUF=rv64 +endif # cross compilers uses full cpu_target, not just ppc-suffix # (except if the target cannot run a native compiler) diff --git a/riscv_new/compiler/Makefile.fpc b/riscv_new/compiler/Makefile.fpc index a28de69d20..225268658d 100644 --- a/riscv_new/compiler/Makefile.fpc +++ b/riscv_new/compiler/Makefile.fpc @@ -32,7 +32,7 @@ fpcdir=.. unexport FPC_VERSION FPC_COMPILERINFO # Which platforms are ready for inclusion in the cycle -CYCLETARGETS=i386 powerpc sparc arm x86_64 powerpc64 m68k armeb mipsel mips avr jvm i8086 aarch64 sparc64 +CYCLETARGETS=i386 powerpc sparc arm x86_64 powerpc64 m68k armeb mipsel mips avr jvm i8086 aarch64 sparc64 riscv32 riscv64 # All supported targets used for clean ALLTARGETS=$(CYCLETARGETS) @@ -83,6 +83,12 @@ endif ifdef AARCH64 PPC_TARGET=aarch64 endif +ifdef RISCV32 +PPC_TARGET=riscv32 +endif +ifdef RISCV64 +PPC_TARGET=riscv64 +endif # Default is to generate a compiler for the same # platform as CPU_TARGET (a native compiler) @@ -213,6 +219,12 @@ endif ifeq ($(CPC_TARGET),aarch64) CPUSUF=a64 endif +ifeq ($(CPC_TARGET),riscv32) +CPUSUF=rv32 +endif +ifeq ($(CPC_TARGET),riscv64) +CPUSUF=rv64 +endif # Do not define the default -d$(CPU_TARGET) because that # will conflict with our -d$(CPC_TARGET) @@ -315,6 +327,16 @@ ifeq ($(PPC_TARGET),i8086) override LOCALOPT+=-Fux86 endif +# RiscV32 specific +ifeq ($(PPC_TARGET),riscv32) +override LOCALOPT+=-Furiscv +endif + +# RiscV64 specific +ifeq ($(PPC_TARGET),riscv64) +override LOCALOPT+=-Furiscv +endif + OPTWPOCOLLECT=-OWdevirtcalls,optvmts -FW$(BASEDIR)/pp1.wpo OPTWPOPERFORM=-Owdevirtcalls,optvmts -Fw$(BASEDIR)/pp1.wpo # symbol liveness WPO requires nm, smart linking and no stripping (the latter @@ -432,7 +454,7 @@ endif # CPU targets ##################################################################### -PPC_TARGETS=i386 m68k powerpc sparc arm armeb x86_64 powerpc64 mips mipsel avr jvm i8086 aarch64 sparc64 +PPC_TARGETS=i386 m68k powerpc sparc arm armeb x86_64 powerpc64 mips mipsel avr jvm i8086 aarch64 sparc64 riscv32 riscv64 INSTALL_TARGETS=$(addsuffix _exe_install,$(sort $(CYCLETARGETS) $(PPC_TARGETS))) SYMLINKINSTALL_TARGETS=$(addsuffix _symlink_install,$(sort $(CYCLETARGETS) $(PPC_TARGETS))) @@ -802,7 +824,7 @@ ifeq ($(OS_SOURCE),win64) EXCLUDE_80BIT_TARGETS=1 endif -ifneq ($(findstring $(CPU_SOURCE),aarch64 arm avr jvm m68k mips mipsel powerpc powerpc64 sparc sparc64),) +ifneq ($(findstring $(CPU_SOURCE),aarch64 arm avr jvm m68k mips mipsel powerpc powerpc64 sparc sparc64 riscv32 riscv64),) EXCLUDE_80BIT_TARGETS=1 endif diff --git a/riscv_new/compiler/riscv/agrvgas.pas b/riscv_new/compiler/riscv/agrvgas.pas index 19b83e74fe..30248e8d43 100644 --- a/riscv_new/compiler/riscv/agrvgas.pas +++ b/riscv_new/compiler/riscv/agrvgas.pas @@ -212,11 +212,7 @@ unit agrvgas; function TRVGNUAssembler.MakeCmdLine: TCmdStr; begin result := inherited MakeCmdLine; -{$ifdef cpu64bitaddr} - Replace(result,'$ARCH','-m64') -{$else cpu64bitaddr} - Replace(result,'$ARCH','-m32'); -{$endif cpu64bitaddr} + Replace(result,'$ARCH',lower(cputypestr[current_settings.cputype])); end; @@ -227,7 +223,7 @@ unit agrvgas; idtxt : 'AS'; asmbin : 'as'; - asmcmd : '-o $OBJ $EXTRAOPT $ARCH $ASM'; + asmcmd : '-o $OBJ $EXTRAOPT -march=$ARCH $ASM'; supported_targets : [system_riscv32_linux,system_riscv64_linux]; flags : [af_needar,af_smartlink_sections]; labelprefix : '.L'; diff --git a/riscv_new/compiler/riscv/hlcgrv.pas b/riscv_new/compiler/riscv/hlcgrv.pas index ece3fdd238..30a1d66968 100644 --- a/riscv_new/compiler/riscv/hlcgrv.pas +++ b/riscv_new/compiler/riscv/hlcgrv.pas @@ -34,11 +34,15 @@ uses cgbase,cgutils,hlcgobj,hlcg2ll, parabase; type + + { thlcgriscv } + thlcgriscv = class(thlcg2ll) protected procedure a_load_subsetref_regs_noindex(list: TAsmList; subsetsize: tdef; loadbitsize: byte; const sref: tsubsetreference; valuereg, extra_value_reg: tregister); override; public procedure g_intf_wrapper(list: TAsmList; procdef: tprocdef; const labelname: string; ioffset: longint);override; + procedure g_external_wrapper(list: TAsmList; procdef: tprocdef; const wrappername, externalname: string; global: boolean); override; end; implementation @@ -213,5 +217,44 @@ implementation list.concat(Tai_symbol_end.Createname(labelname)); end; + procedure thlcgriscv.g_external_wrapper(list: TAsmList; procdef: tprocdef; const wrappername, externalname: string; global: boolean); + var + sym: tasmsymbol; + ai: taicpu; + href: treference; + tmpreg: TRegister; + l: TAsmLabel; + begin + maybe_new_object_file(list); + new_section(list,sec_code,wrappername,target_info.alignment.procalign); + if global then + begin + sym:=current_asmdata.DefineAsmSymbol(wrappername,AB_GLOBAL,AT_FUNCTION,procdef); + list.concat(Tai_symbol.Create_global(sym,0)); + end + else + begin + sym:=current_asmdata.DefineAsmSymbol(wrappername,AB_LOCAL,AT_FUNCTION,procdef); + list.concat(Tai_symbol.Create(sym,0)); + end; + + reference_reset_symbol(href,current_asmdata.RefAsmSymbol(externalname,AT_FUNCTION),0,0,[]); + + tmpreg:=NR_X5; + + current_asmdata.getjumplabel(l); + a_label(list,l); + + href.refaddr:=addr_pcrel_hi20; + list.concat(taicpu.op_reg_ref(A_AUIPC,tmpreg,href)); + reference_reset_symbol(href,l,0,0,[]); + href.refaddr:=addr_pcrel_lo12; + ai:=taicpu.op_reg_reg_ref(A_JALR,NR_X0,tmpreg,href); + ai.is_jmp:=true; + list.concat(ai); + + list.concat(Tai_symbol_end.Create(sym)); + end; + end. diff --git a/riscv_new/compiler/riscv32/cpunode.pas b/riscv_new/compiler/riscv32/cpunode.pas index 08190a8a57..a87c8d51bd 100644 --- a/riscv_new/compiler/riscv32/cpunode.pas +++ b/riscv_new/compiler/riscv32/cpunode.pas @@ -31,6 +31,9 @@ unit cpunode; { generic nodes } ncgbas,ncgld,ncgflw,ncgcnv,ncgmem,ncgcon,ncgcal,ncgset,ncginl,ncgopt, ncgobjc, + { symtable } + symcpu, + aasmdef, { to be able to only parts of the generic code, the processor specific nodes must be included after the generic one (FK) diff --git a/riscv_new/compiler/riscv64/cpunode.pas b/riscv_new/compiler/riscv64/cpunode.pas index f9f680bf91..e619c41a42 100644 --- a/riscv_new/compiler/riscv64/cpunode.pas +++ b/riscv_new/compiler/riscv64/cpunode.pas @@ -32,7 +32,8 @@ uses ncgbas, ncgld, ncgflw, ncgcnv, ncgmem, ncgcon, ncgcal, ncgset, ncginl, ncgopt, ncgobjc, { symtable } - symcpu, + symcpu, + aasmdef, { to be able to only parts of the generic code, the processor specific nodes must be included after the generic one (FK) diff --git a/riscv_new/packages/fpmkunit/src/fpmkunit.pp b/riscv_new/packages/fpmkunit/src/fpmkunit.pp index 1ca9d9d68a..76f2fa3418 100644 --- a/riscv_new/packages/fpmkunit/src/fpmkunit.pp +++ b/riscv_new/packages/fpmkunit/src/fpmkunit.pp @@ -110,7 +110,7 @@ Type // Please keep this order, see OSCPUSupported below TCpu=(cpuNone, i386,m68k,powerpc,sparc,x86_64,arm,powerpc64,avr,armeb, - mips,mipsel,jvm,i8086,aarch64,sparc64 + mips,mipsel,jvm,i8086,aarch64,sparc64,riscv32,riscv64 ); TCPUS = Set of TCPU; @@ -185,46 +185,46 @@ Const { This table is kept OS,Cpu because it is easier to maintain (PFV) } OSCPUSupported : array[TOS,TCpu] of boolean = ( - { os none i386 m68k ppc sparc x86_64 arm ppc64 avr armeb mips mipsel jvm i8086 aarch64 sparc64} - { none } ( false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false), - { linux } ( false, true, true, true, true, true, true, true, false, true , true , true , false, false, true , true ), - { go32v2 } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false), - { win32 } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false), - { os2 } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false), - { freebsd } ( false, true, true, false, false, true, false, false, false, false, false, false, false, false, false, false), - { beos } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false), - { netbsd } ( false, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false), - { amiga } ( false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false), - { atari } ( false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false), - { solaris } ( false, true, false, false, true, true, false, false, false, false, false, false, false, false, false, false), - { qnx } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false), - { netware } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false), - { openbsd } ( false, true, true, false, false, true, false, false, false, false, false, false, false, false, false, false), - { wdosx } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false), - { palmos } ( false, false, true, false, false, false, true, false, false, false, false, false, false, false, false, false), - { macos } ( false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false), - { darwin } ( false, true, false, true, false, true, true, true, false, false, false, false, false, false, true , false), - { emx } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false), - { watcom } ( false, true, false, false, false ,false, false, false, false, false, false, false, false, false, false, false), - { morphos } ( false, false, false, true, false ,false, false, false, false, false, false, false, false, false, false, false), - { netwlibc }( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false), - { win64 } ( false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false), - { wince }( false, true, false, false, false, false, true, false, false, false, false, false, false, false, false, false), - { gba } ( false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false), - { nds } ( false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false), - { embedded }( false, true, true, true, true, true, true, true, true, true , false, false, false, true , false, false), - { symbian } ( false, true, false, false, false, false, true, false, false, false, false, false, false, false, false, false), - { haiku } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false), - { iphonesim}( false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, false), - { aix } ( false, false, false, true, false, false, false, true, false, false, false, false, false, false, false, false), - { java } ( false, false, false, false, false, false, false, false, false, false, false, false, true , false, false, false), - { android } ( false, true, false, false, false, false, true, false, false, false, false, true, true , false, false, false), - { nativent }( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false), - { msdos } ( false, false, false, false, false, false, false, false, false, false, false, false, false, true , false, false), - { wii } ( false, false, false, true , false, false, false, false, false, false, false, false, false, false, false, false), - { aros } ( true, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false), - { dragonfly}( false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false), - { win16 } ( false, false, false, false, false, false, false, false, false, false, false, false, false, true , false, false) + { os none i386 m68k ppc sparc x86_64 arm ppc64 avr armeb mips mipsel jvm i8086 aarch64 sparc64 riscv32 riscv64} + { none } ( false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false), + { linux } ( false, true, true, true, true, true, true, true, false, true , true , true , false, false, true , true , true , true ), + { go32v2 } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false), + { win32 } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false), + { os2 } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false), + { freebsd } ( false, true, true, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false), + { beos } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false), + { netbsd } ( false, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false), + { amiga } ( false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false), + { atari } ( false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false), + { solaris } ( false, true, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false), + { qnx } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false), + { netware } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false), + { openbsd } ( false, true, true, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false), + { wdosx } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false), + { palmos } ( false, false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false), + { macos } ( false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false), + { darwin } ( false, true, false, true, false, true, true, true, false, false, false, false, false, false, true , false, false, false), + { emx } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false), + { watcom } ( false, true, false, false, false ,false, false, false, false, false, false, false, false, false, false, false, false, false), + { morphos } ( false, false, false, true, false ,false, false, false, false, false, false, false, false, false, false, false, false, false), + { netwlibc }( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false), + { win64 } ( false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false), + { wince }( false, true, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false), + { gba } ( false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false), + { nds } ( false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false), + { embedded }( false, true, true, true, true, true, true, true, true, true , false, false, false, true , false, false, true , true ), + { symbian } ( false, true, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false), + { haiku } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false), + { iphonesim}( false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false), + { aix } ( false, false, false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, false), + { java } ( false, false, false, false, false, false, false, false, false, false, false, false, true , false, false, false, false, false), + { android } ( false, true, false, false, false, false, true, false, false, false, false, true, true , false, false, false, false, false), + { nativent }( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false), + { msdos } ( false, false, false, false, false, false, false, false, false, false, false, false, false, true , false, false, false, false), + { wii } ( false, false, false, true , false, false, false, false, false, false, false, false, false, false, false, false, false, false), + { aros } ( true, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false), + { dragonfly}( false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false), + { win16 } ( false, false, false, false, false, false, false, false, false, false, false, false, false, true , false, false, false, false) ); // Useful @@ -2784,6 +2784,8 @@ begin powerpc: result := GetGccDirArch('cpupowerpc','-m32'); powerpc64:result := GetGccDirArch('cpupowerpc64','-m64'); aarch64: result := GetGccDirArch('cpuaarch64',''); + riscv32: result := GetGccDirArch('cpuriscv64','-march=rv32imafdc'); + riscv64: result := GetGccDirArch('cpuriscv64','-march=rv64imafdc'); end {case} else if OS = darwin then case CPU of diff --git a/riscv_new/packages/fppkg/src/fpmkunitsrc.inc b/riscv_new/packages/fppkg/src/fpmkunitsrc.inc index 0496ba61bd..b7c9ce1811 100644 --- a/riscv_new/packages/fppkg/src/fpmkunitsrc.inc +++ b/riscv_new/packages/fppkg/src/fpmkunitsrc.inc @@ -1,7 +1,7 @@ {$ifdef Delphi} -const fpmkunitsrc : array[0..1137] of string[240]=( +const fpmkunitsrc : array[0..1237] of string[240]=( {$else Delphi} -const fpmkunitsrc : array[0..1137,1..240] of char=( +const fpmkunitsrc : array[0..1237,1..240] of char=( {$endif Delphi} '{'#010+ ' This file is part of the Free Pascal Makefile Package'#010+ @@ -120,66 +120,66 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' // Please keep this order, see OSCPUSupported below'#010+ ' TCpu=(cpuNone,'#010+ ' i386,m68k,powerpc,sparc,x86_64,arm,powerpc64,avr,armeb,'#010+ - ' ',' mips,mipsel,jvm,i8086,aarch64'#010+ + ' ',' mips,mipsel,jvm,i8086,aarch64,sparc64,riscv32,riscv64'#010+ ' );'#010+ ' TCPUS = Set of TCPU;'#010+ #010+ ' // Please keep this order, see OSCPUSupported below'#010+ ' TOS=(osNone,'#010+ ' linux,go32v2,win32,os2,freebsd,beos,netbsd,'#010+ - ' amiga,atari, solaris, qnx, netware, openbsd,wdosx,'#010+ - ' palm','os,macos,darwin,emx,watcom,morphos,netwlibc,'#010+ + ' amiga,atari, solaris, qnx, netware,',' openbsd,wdosx,'#010+ + ' palmos,macos,darwin,emx,watcom,morphos,netwlibc,'#010+ ' win64,wince,gba,nds,embedded,symbian,haiku,iphonesim,'#010+ ' aix,java,android,nativent,msdos,wii,aros,dragonfly,'#010+ ' win16'#010+ ' );'#010+ ' TOSes = Set of TOS;'#010+ #010+ - ' TCompilerMode = (cmFPC,cmTP,cmObjFPC,cmDe','lphi,cmMacPas);'#010+ + ' TCompilerMode = (','cmFPC,cmTP,cmObjFPC,cmDelphi,cmMacPas);'#010+ ' TCompilerModes = Set of TCompilerMode;'#010+ #010+ ' TInstallMOde = (imInstall, imUnInstall);'#010+ #010+ ' TTargetType = (ttProgram,ttUnit,ttImplicitUnit,ttCleanOnlyUnit,ttExa'+ - 'mpleUnit,ttExampleProgram,ttFPDoc);'#010+ - ' TTargetTypes = set of TTargetT','ype;'#010+ + 'mpleUnit,ttExampleProgram,ttFPDoc,ttSharedLi','brary);'#010+ + ' TTargetTypes = set of TTargetType;'#010+ #010+ ' TFPDocFormat = (ffHtml, ffHtm, ffXHtml, ffLaTex, ffXMLStruct, ffChm)'+ ';'#010+ ' TFPDocFormats = set of TFPDocFormat;'#010+ #010+ ' TTargetState = (tsNeutral,tsConsidering,tsNoCompile,tsCompiled,tsIns'+ - 'talled,tsNotFound);'#010+ - ' TTargetStates = Set of TTarget','State;'#010+ + 'talled,tsNot','Found);'#010+ + ' TTargetStates = Set of TTargetState;'#010+ #010+ ' TSourceType = (stDoc,stSrc,stExample,stTest);'#010+ ' TSourceTypes = set of TSourceType;'#010+ #010+ ' TVerboseLevel = (vlError,vlWarning,vlInfo,vldebug,vlCommand);'#010+ ' TVerboseLevels = Set of TVerboseLevel;'#010+ - #010+ - ' TCommandAt = (caBeforeCompile,caAfterC','ompile,'#010+ + #010, + ' TCommandAt = (caBeforeCompile,caAfterCompile,'#010+ ' caBeforeInstall,caAfterInstall,'#010+ ' caBeforeArchive,caAfterArchive,'#010+ ' caBeforeClean,caAfterClean,'#010+ ' caBeforeDownload,caAfterDownload);'#010+ - #010+ - ' TDependencyType = (depPackage,depImpli','citPackage,depUnit,depInclud'+ - 'e);'#010+ + #010, + ' TDependencyType = (depPackage,depImplicitPackage,depUnit,depInclude)'+ + ';'#010+ ' TDependencyTypes = set of TDependencyType;'#010+ #010+ ' TLogEvent = Procedure (Level : TVerboseLevel; Const Msg : String) of'+ ' Object;'#010+ - ' TNotifyProcEvent = procedure(Sender: TObject);'#010+ + ' TNotifyProcEvent = procedure(Sender: TObj','ect);'#010+ #010+ - ' TRunMode = (rmCompile,rmBuild,r','mInstall,rmArchive,rmClean,rmDistCl'+ - 'ean,rmManifest,rmZipInstall,rmPkgList,rmUnInstall);'#010+ + ' TRunMode = (rmCompile,rmBuild,rmInstall,rmArchive,rmClean,rmDistClea'+ + 'n,rmManifest,rmZipInstall,rmPkgList,rmUnInstall,rmInfo);'#010+ #010+ ' TBuildMode = (bmOneByOne, bmBuildUnit{, bmSkipImplicitUnits});'#010+ ' TBuildModes = set of TBuildMode;'#010+ - ' TProcessPackageResult = (ppHandled, ppDelayed);'#010+ - ' ','TCheckDependencyResult = (cdAvailable, cdNotAvailable, cdNotYetAva'+ - 'ilable);'#010+ + ' TPr','ocessPackageResult = (ppHandled, ppDelayed);'#010+ + ' TCheckDependencyResult = (cdAvailable, cdNotAvailable, cdNotYetAvail'+ + 'able);'#010+ #010+ 'Const'#010+ ' // Aliases'#010+ @@ -189,104 +189,144 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' DOS = Go32v2;'#010+ ' MacOSX = Darwin;'#010+ #010+ - ' AllOSes = [Low(TOS)..High(TOS)];'#010+ - ' AllCPUs = [Low','(TCPU)..High(TCPU)];'#010+ + ' Al','lOSes = [Low(TOS)..High(TOS)];'#010+ + ' AllCPUs = [Low(TCPU)..High(TCPU)];'#010+ ' AllUnixOSes = [Linux,FreeBSD,NetBSD,OpenBSD,Darwin,QNX,BeOS,Solaris'+ ',Haiku,iphonesim,aix,Android,dragonfly];'#010+ - ' AllBSDOSes = [FreeBSD,NetBSD,OpenBSD,Darwin,iphonesim,dragonfly'+ - '];'#010+ - ' AllWindowsOSes = [Win32,Win64,Wi','nCE];'#010+ + ' AllBSDOSes = [FreeBSD,NetBSD,OpenBSD,Darwin,iphonesim,','dragonf'+ + 'ly];'#010+ + ' AllWindowsOSes = [Win32,Win64,WinCE];'#010+ ' AllAmigaLikeOSes = [Amiga,MorphOS,AROS];'#010+ - ' AllLimit83fsOses = [go32v2,os2,emx,watcom,msdos,win16];'#010+ + ' AllLimit83fsOses = [go32v2,os2,emx,watcom,msdos,win16,atari];'#010+ #010+ - ' AllSmartLinkLibraryOSes = [Linux,msdos,amiga,morphos,aros,win16]; //'+ - ' OSes that use .a library files for smart-linking'#010+ - ' AllImportL','ibraryOSes = AllWindowsOSes + [os2,emx,netwlibc,netware,'+ - 'watcom,go32v2,macos,nativent,msdos,win16];'#010+ + ' AllSmartLinkLibraryOSes = [Linux,msdos,win16,palmos]; // OSes that u'+ + 'se .a lib','rary files for smart-linking'#010+ + ' AllImportLibraryOSes = AllWindowsOSes + [os2,emx,netwlibc,netware,wa'+ + 'tcom,go32v2,macos,nativent,msdos,win16];'#010+ #010+ ' { This table is kept OS,Cpu because it is easier to maintain (PFV) }'+ #010+ - ' OSCPUSupported : array[TOS,TCpu] of boolean = ('#010+ - ' { os n','one i386 m68k ppc sparc x86_64 arm p'+ - 'pc64 avr armeb mips mipsel jvm i8086 aarch64 }'#010+ - ' { none } ( false, false, false, false, false, false, false, fal'+ - 'se, false, false, false, false, false, false, false),'#010+ - ' { lin','ux } ( false, true, true, true, true, true, true, t'+ - 'rue, false, true , true , true , false, false, true ),'#010+ - ' { go32v2 } ( false, true, false, false, false, false, false, fal'+ - 'se, false, false, false, false, false, false, false),'#010+ - ' ',' { win32 } ( false, true, false, false, false, false, false, f'+ - 'alse, false, false, false, false, false, false, false),'#010+ + ' OSCPUSupported : array[TOS',',TCpu] of boolean = ('#010+ + ' { os none i386 m68k ppc sparc x86_64 arm ppc'+ + '64 avr armeb mips mipsel jvm i8086 aarch64 sparc64 riscv32 r'+ + 'iscv64}'#010+ + ' { none } ( false, false, false, false, false, false, false, fal', + 'se, false, false, false, false, false, false, false, false, false, f'+ + 'alse),'#010+ + ' { linux } ( false, true, true, true, true, true, true, tru'+ + 'e, false, true , true , true , false, false, true , true , true , t'+ + 'rue ),'#010+ + ' { go32v2 } ','( false, true, false, false, false, false, false, f'+ + 'alse, false, false, false, false, false, false, false, false, false, '+ + ' false),'#010+ + ' { win32 } ( false, true, false, false, false, false, false, fal'+ + 'se, false, false, false, false, false, ','false, false, false, false, '+ + ' false),'#010+ ' { os2 } ( false, true, false, false, false, false, false, fal'+ - 'se, false, false, false, false, false, false, f','alse),'#010+ - ' { freebsd } ( false, true, true, false, false, true, false, fal'+ - 'se, false, false, false, false, false, false, false),'#010+ + 'se, false, false, false, false, false, false, false, false, false, f'+ + 'alse),'#010+ + ' { freebsd } ( false, true, true, false, false, tr','ue, false, f'+ + 'alse, false, false, false, false, false, false, false, false, false, '+ + ' false),'#010+ ' { beos } ( false, true, false, false, false, false, false, fal'+ - 'se, false, false, false, false, false, ','false, false),'#010+ - ' { netbsd } ( false, true, true, true, true, true, false, fal'+ - 'se, false, false, false, false, false, false, false),'#010+ + 'se, false, false, false, false, false, false, false, false, false, f'+ + 'alse),'#010+ + ' ',' { netbsd } ( false, true, true, true, true, true, true, f'+ + 'alse, false, false, false, false, false, false, false, false, false, '+ + ' false),'#010+ ' { amiga } ( false, false, true, true, false, false, false, fal'+ - 'se, false, false, false, false,',' false, false, false),'#010+ + 'se, false, false, false,',' false, false, false, false, false, false, '+ + ' false),'#010+ ' { atari } ( false, false, true, false, false, false, false, fal'+ - 'se, false, false, false, false, false, false, false),'#010+ - ' { solaris } ( false, true, false, false, true, true, false, fal'+ - 'se, false, false, false',', false, false, false, false),'#010+ + 'se, false, false, false, false, false, false, false, false, false, f'+ + 'alse),'#010+ + ' { solaris } ( false, true, false, f','alse, true, true, false, f'+ + 'alse, false, false, false, false, false, false, false, false, false, '+ + ' false),'#010+ ' { qnx } ( false, true, false, false, false, false, false, fal'+ - 'se, false, false, false, false, false, false, false),'#010+ + 'se, false, false, false, false, false, false, false, false, fa','lse, '+ + ' false),'#010+ ' { netware } ( false, true, false, false, false, false, false, fal'+ - 'se, false, fals','e, false, false, false, false, false),'#010+ + 'se, false, false, false, false, false, false, false, false, false, f'+ + 'alse),'#010+ ' { openbsd } ( false, true, true, false, false, true, false, fal'+ - 'se, false, false, false, false, false, false, false),'#010+ + 'se, false',', false, false, false, false, false, false, false, false, '+ + ' false),'#010+ ' { wdosx } ( false, true, false, false, false, false, false, fal'+ - 'se, fal','se, false, false, false, false, false, false),'#010+ - ' { palmos } ( false, false, true, false, false, false, true, fal'+ - 'se, false, false, false, false, false, false, false),'#010+ - ' { macos } ( false, false, false, true, false, false, false, fa', - 'lse, false, false, false, false, false, false, false),'#010+ + 'se, false, false, false, false, false, false, false, false, false, f'+ + 'alse),'#010+ + ' { palmos } ( false, ','false, true, false, false, false, true, f'+ + 'alse, false, false, false, false, false, false, false, false, false, '+ + ' false),'#010+ + ' { macos } ( false, false, false, true, false, false, false, fal'+ + 'se, false, false, false, false, false, false, fa','lse, false, false, '+ + ' false),'#010+ ' { darwin } ( false, true, false, true, false, true, true, tru'+ - 'e, false, false, false, false, false, false, true ),'#010+ - ' { emx } ( false, true, false, false, false, false, f','alse, f'+ - 'alse, false, false, false, false, false, false, false),'#010+ + 'e, false, false, false, false, false, false, true , false, false, f'+ + 'alse),'#010+ + ' { emx } ( false, true, false, false, false, false, fals','e, f'+ + 'alse, false, false, false, false, false, false, false, false, false, '+ + ' false),'#010+ ' { watcom } ( false, true, false, false, false ,false, false, fal'+ - 'se, false, false, false, false, false, false, false),'#010+ - ' { morphos } ( false, false, false, true, false ,','false, false, f'+ - 'alse, false, false, false, false, false, false, false),'#010+ + 'se, false, false, false, false, false, false, false, false, false, f'+ + 'alse),'#010+ + ' { morp','hos } ( false, false, false, true, false ,false, false, f'+ + 'alse, false, false, false, false, false, false, false, false, false, '+ + ' false),'#010+ ' { netwlibc }( false, true, false, false, false, false, false, fal'+ - 'se, false, false, false, false, false, false, false),'#010+ - ' { win64 } ( false, false, false, false,',' false, true, false, f'+ - 'alse, false, false, false, false, false, false, false),'#010+ - ' { wince }( false, true, false, false, false, false, true, fal'+ - 'se, false, false, false, false, false, false, false),'#010+ - ' { gba } ( false, false, false',', false, false, false, true, f'+ - 'alse, false, false, false, false, false, false, false),'#010+ + 'se, false, false, false, false, f','alse, false, false, false, false, '+ + ' false),'#010+ + ' { win64 } ( false, false, false, false, false, true, false, fal'+ + 'se, false, false, false, false, false, false, false, false, false, f'+ + 'alse),'#010+ + ' { wince }( false, true, false, false, fal','se, false, true, f'+ + 'alse, false, false, false, false, false, false, false, false, false, '+ + ' false),'#010+ + ' { gba } ( false, false, false, false, false, false, true, fal'+ + 'se, false, false, false, false, false, false, false, false, false, f'+ + 'al','se),'#010+ ' { nds } ( false, false, false, false, false, false, true, fal'+ - 'se, false, false, false, false, false, false, false),'#010+ - ' { embedded }( false, true',', true, true, true, true, true, t'+ - 'rue, true, true , false, false, false, false, false),'#010+ + 'se, false, false, false, false, false, false, false, false, false, f'+ + 'alse),'#010+ + ' { embedded }( false, true, true, true, true, true, true, tru'+ + 'e, true, true , ','false, false, false, true , false, false, true , '+ + ' true ),'#010+ ' { symbian } ( false, true, false, false, false, false, true, fal'+ - 'se, false, false, false, false, false, false, false),'#010+ - ' { haiku } ( fal','se, true, false, false, false, false, false, f'+ - 'alse, false, false, false, false, false, false, false),'#010+ + 'se, false, false, false, false, false, false, false, false, false, f'+ + 'alse),'#010+ + ' { haiku } ( false, true, fa','lse, false, false, false, false, f'+ + 'alse, false, false, false, false, false, false, false, false, false, '+ + ' false),'#010+ ' { iphonesim}( false, true, false, false, false, true, false, fal'+ - 'se, false, false, false, false, false, false, false),'#010+ - ' { aix ','} ( false, false, false, true, false, false, false, t'+ - 'rue, false, false, false, false, false, false, false),'#010+ + 'se, false, false, false, false, false, false, false, fals','e, false, '+ + ' false),'#010+ + ' { aix } ( false, false, false, true, false, false, false, tru'+ + 'e, false, false, false, false, false, false, false, false, false, f'+ + 'alse),'#010+ ' { java } ( false, false, false, false, false, false, false, fal'+ - 'se, false, false, false, false, true , false, false),'#010+ - ' {',' android } ( false, true, false, false, false, false, true, f'+ - 'alse, false, false, false, true, true , false, false),'#010+ - ' { nativent }( false, true, false, false, false, false, false, fal'+ - 'se, false, false, false, false, false, false, false','),'#010+ + 'se,',' false, false, false, false, true , false, false, false, false, '+ + ' false),'#010+ + ' { android } ( false, true, false, false, false, false, true, fal'+ + 'se, false, false, false, true, true , false, false, false, false, f'+ + 'alse),'#010+ + ' { nativent }( f','alse, true, false, false, false, false, false, f'+ + 'alse, false, false, false, false, false, false, false, false, false, '+ + ' false),'#010+ ' { msdos } ( false, false, false, false, false, false, false, fal'+ - 'se, false, false, false, false, false, true , false),'#010+ + 'se, false, false, false, false, false, tru','e , false, false, false, '+ + ' false),'#010+ ' { wii } ( false, false, false, true , false, false, false, fal'+ - 'se, false, false, false, false, false, fals','e, false),'#010+ - ' { aros } ( true, false, false, false, false, false, false, fal'+ - 'se, false, false, false, false, false, false, false),'#010+ + 'se, false, false, false, false, false, false, false, false, false, f'+ + 'alse),'#010+ + ' { aros } ( true, false, false, false, false, false',', true, f'+ + 'alse, false, false, false, false, false, false, false, false, false, '+ + ' false),'#010+ ' { dragonfly}( false, false, false, false, false, true, false, fal'+ - 'se, false, false, false, false, fal','se, false, false),'#010+ - ' { win16 } ( false, false, false, false, false, false, false, fal'+ - 'se, false, false, false, false, false, true , false)'#010+ + 'se, false, false, false, false, false, false, false, false, false, f'+ + 'alse),'#010+ + ' ','{ win16 } ( false, false, false, false, false, false, false, f'+ + 'alse, false, false, false, false, false, true , false, false, false, '+ + ' false)'#010+ ' );'#010+ #010+ ' // Useful'#010+ @@ -300,13 +340,14 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' RsjExt = '#039'.rsj'#039';'#010+ ' LibExt = '#039'.a'#039';'#010+ ' SharedLibExt = '#039'.so'#039';'#010+ + ' DyLibExt = '#039'.dylib'#039';'#010+ ' DLLExt = '#039'.dll'#039';'#010+ ' ExeExt = '#039'.exe'#039';'#010+ ' DbgExt = '#039'.dbg'#039';'#010+ ' ZipExt = '#039'.zip'#039';'#010+ - ' FpmkExt = '#039'.fpm'#039';'#010+ + ' FpmkExt = '#039'.fpm',#039';'#010+ #010+ - ' FPMakePPFile = '#039'f','pmake.pp'#039';'#010+ + ' FPMakePPFile = '#039'fpmake.pp'#039';'#010+ ' ManifestFile = '#039'manifest.xml'#039';'#010+ ' PkgListFileBase = '#039'pkg-'#039';'#010+ ' PkgListFileExt = '#039'.lst'#039';'#010+ @@ -315,7 +356,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ ' UnitTargets = [ttUnit,ttImplicitUnit,ttCleanOnlyUnit,ttExampleUnit];'+ #010+ - ' ProgramTargets = [ttProgram,ttExa','mpleProgram];'#010+ + ' ProgramTar','gets = [ttProgram,ttExampleProgram,ttSharedLibrary];'#010+ #010+ ' DefaultMessages = [vlError,vlWarning,vlCommand];'#010+ ' AllMessages = [vlError,vlWarning,vlCommand,vlInfo];'#010+ @@ -324,10 +365,10 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' TTargets = Class;'#010+ ' { TNamedItem }'#010+ #010+ - ' TNamedItem = Class(TCollectionItem)'#010+ + ' TNamedItem = Class(TCollectionItem)',#010+ ' private'#010+ ' FName: String;'#010+ - ' proce','dure SetName(const AValue: String);virtual;'#010+ + ' procedure SetName(const AValue: String);virtual;'#010+ ' Public'#010+ ' property Name : String Read FName Write SetName;'#010+ ' end;'#010+ @@ -336,14 +377,14 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ ' TNamedCollection = Class(TCollection)'#010+ ' private'#010+ - ' FUniqueNames: Boolean;'#010+ + ' FUniqueNa','mes: Boolean;'#010+ ' private'#010+ - ' function Ge','tItem(Index: Integer): TNamedItem;'#010+ + ' function GetItem(Index: Integer): TNamedItem;'#010+ ' procedure SetItem(Index: Integer; AValue: TNamedItem);'#010+ ' Public'#010+ ' Function IndexOfName(const AName : String) : Integer;'#010+ - ' Function ItemByName(const AName : String) : TNamedItem;'#010+ - ' Property Unique','Names : Boolean Read FUniqueNames;'#010+ + ' Function ItemByName(const AName : St','ring) : TNamedItem;'#010+ + ' Property UniqueNames : Boolean Read FUniqueNames;'#010+ ' property Items[Index: Integer]: TNamedItem read GetItem write SetI'+ 'tem;'#010+ ' end;'#010+ @@ -352,13 +393,13 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ ' TNamedItemList = Class(TFPList)'#010+ ' private'#010+ - ' function GetNamedItem(Index : Integer): TNamedItem;'#010, + ' function GetN','amedItem(Index : Integer): TNamedItem;'#010+ ' procedure SetNamedItem(Index : Integer; const AValue: TNamedItem);'+ #010+ ' public'#010+ ' Function IndexOfName(const AName : String) : Integer;'#010+ ' Function ItemByName(const ANAme : String) : TNamedItem;'#010+ - ' Property NamedItems[Index : Integer] :',' TNamedItem Read GetNamedI'+ + ' ',' Property NamedItems[Index : Integer] : TNamedItem Read GetNamedI'+ 'tem Write SetNamedItem; default;'#010+ ' end;'#010+ #010+ @@ -367,8 +408,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' private'#010+ ' FAfterCommand: TNotifyEvent;'#010+ ' FBeforeCommand: TNotifyEvent;'#010+ - ' FCommand: String;'#010+ - ' FCommandAt: TCommandAt;'#010, + ' FComman','d: String;'#010+ + ' FCommandAt: TCommandAt;'#010+ ' FDestFile: String;'#010+ ' FIgnoreResult: Boolean;'#010+ ' FOptions: TStrings;'#010+ @@ -376,16 +417,16 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Function GetOptions : TStrings;'#010+ ' Procedure SetOptions(Const Value : TStrings);'#010+ ' Public'#010+ - ' Destructor Destroy; override;'#010+ - ' Functio','n HaveOptions : Boolean;'#010+ + ' De','structor Destroy; override;'#010+ + ' Function HaveOptions : Boolean;'#010+ ' Function CmdLineOptions : String;'#010+ ' Procedure ParseOptions(S : String);'#010+ ' Property SourceFile : String Read FSourceFile Write FSourceFile;'#010+ - ' Property DestFile : String Read FDestFile Write FDestFile;'#010+ - ' P','roperty Command : String Read FCommand Write FCommand;'#010+ + ' Property DestFile : Strin','g Read FDestFile Write FDestFile;'#010+ + ' Property Command : String Read FCommand Write FCommand;'#010+ ' Property Options : TStrings Read GetOptions Write SetOptions;'#010+ ' Property At : TCommandAt Read FCommandAt Write FCommandAt;'#010+ - ' Property IgnoreResult : Boolean Read FIgnoreResult W','rite FIgnore'+ + ' Property Igno','reResult : Boolean Read FIgnoreResult Write FIgnore'+ 'Result;'#010+ ' Property BeforeCommand : TNotifyEvent Read FBeforeCommand Write FB'+ 'eforeCommand;'#010+ @@ -393,36 +434,37 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'erCommand;'#010+ ' end;'#010+ #010+ - ' { TCommands }'#010+ + ' { TCom','mands }'#010+ #010+ - ' TCommands = Class(TNamedColl','ection)'#010+ + ' TCommands = Class(TNamedCollection)'#010+ ' private'#010+ ' FDefaultAt: TCommandAt;'#010+ ' function GetCommand(const Dest : String): TCommand;'#010+ ' function GetCommandItem(Index : Integer): TCommand;'#010+ - ' procedure SetCommandItem(Index : Integer; const AValue: TCommand);'+ - #010+ + ' procedure SetCommandItem(Index : Intege','r; const AValue: TCommand'+ + ');'#010+ ' Public'#010+ - ' ',' Function AddCommand(Const Cmd : String) : TCommand;'#010+ + ' Function AddCommand(Const Cmd : String) : TCommand;'#010+ ' Function AddCommand(Const Cmd,Options : String) : TCommand;'#010+ ' Function AddCommand(Const Cmd,Options,Dest,Source : String) : TCom'+ 'mand;'#010+ - ' Function AddCommand(At : TCommandAt; Const',' Cmd : String) : TComm'+ + ' Fun','ction AddCommand(At : TCommandAt; Const Cmd : String) : TComm'+ 'and;'#010+ ' Function AddCommand(At : TCommandAt; Const Cmd,Options : String) :'+ ' TCommand;'#010+ ' Function AddCommand(At : TCommandAt; Const Cmd,Options, Dest,Sourc'+ - 'e : String) : TCommand;'#010+ - ' Property CommandItems[Index : Inte','ger] : TCommand Read GetComman'+ - 'dItem Write SetCommandItem;'#010+ + 'e : String) : TCommand;',#010+ + ' Property CommandItems[Index : Integer] : TCommand Read GetCommandI'+ + 'tem Write SetCommandItem;'#010+ ' Property Commands[Dest : String] : TCommand Read GetCommand; defau'+ 'lt;'#010+ - ' Property DefaultAt : TCommandAt Read FDefaultAt Write FDefaultAt;'#010+ + ' Property DefaultAt : TCommandAt Read FDefaultAt Write FDefaultAt;', + #010+ ' end;'#010+ #010+ ' { TFPVersion }'#010+ #010+ - ' TFPVersion',' = Class(TPersistent)'#010+ + ' TFPVersion = Class(TPersistent)'#010+ ' private'#010+ ' FMajor,'#010+ ' FMinor,'#010+ @@ -430,19 +472,19 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' FBuild : Integer;'#010+ ' function GetAsString: String;'#010+ ' function GetEmpty: Boolean;'#010+ - ' procedure SetAsString(const AValue: String);'#010+ + ' procedure SetAsString(const AValue: St','ring);'#010+ ' Public'#010+ ' Procedure Clear;'#010+ - ' ','Procedure Assign(Source : TPersistent); override;'#010+ + ' Procedure Assign(Source : TPersistent); override;'#010+ ' Function CompareVersion(AVersion : TFPVersion) : Integer;'#010+ ' Function SameVersion(AVersion : TFPVersion) : Boolean;'#010+ - ' Property AsString : String Read GetAsString Write SetAsString;'#010+ - ' Pr','operty Empty : Boolean Read GetEmpty;'#010+ + ' Property AsString : String Re','ad GetAsString Write SetAsString;'#010+ + ' Property Empty : Boolean Read GetEmpty;'#010+ ' Published'#010+ ' Property Major : Integer Read FMajor Write FMajor;'#010+ ' Property Minor : Integer Read FMinor Write FMinor;'#010+ - ' Property Micro : Integer Read FMicro Write FMicro;'#010+ - ' Property Build : Integer ','Read FBuild Write FBuild;'#010+ + ' Property Micro : Integer Read FMicro Wri','te FMicro;'#010+ + ' Property Build : Integer Read FBuild Write FBuild;'#010+ ' end;'#010+ #010+ ' { TConditionalString }'#010+ @@ -452,35 +494,35 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' FCPUs : TCPUs;'#010+ ' FValue : String;'#010+ ' Public'#010+ - ' Constructor Create;virtual;'#010+ - ' Property Value : String Read FVal','ue Write FValue;'#010+ + ' Constructor Create;virtual',';'#010+ + ' Property Value : String Read FValue Write FValue;'#010+ ' Property OSes : TOSes Read FOSes Write FOSes;'#010+ ' Property CPUs : TCPUs Read FCPUS Write FCPUs;'#010+ ' end;'#010+ #010+ ' TConditionalStringClass = class of TConditionalString;'#010+ #010+ - ' { TConditionalStrings }'#010+ + ' { TConditionalS','trings }'#010+ #010+ - ' TConditionalStrings = Class','(TFPList)'#010+ + ' TConditionalStrings = Class(TFPList)'#010+ ' private'#010+ ' FCSClass : TConditionalStringClass;'#010+ ' function GetConditionalString(Index : Integer): TConditionalString'+ ';'#010+ - ' procedure SetConditionalString(Index : Integer; const AValue: TCon'+ - 'ditionalString);'#010+ + ' procedure SetConditionalString(Index : Integer; const AValue: TCo', + 'nditionalString);'#010+ ' Public'#010+ - ' Construc','tor Create(AClass:TConditionalStringClass);'#010+ + ' Constructor Create(AClass:TConditionalStringClass);'#010+ ' Function Add(Const Value : String) : TConditionalString;inline;'#010+ ' Function Add(Const Value : String;const OSes:TOSes) : TConditional'+ 'String;inline;'#010+ - '{$ifdef cpu_only_overloads}'#010+ - ' Function Ad','d(Const Value : String;const CPUs:TCPUs) : TCondition'+ - 'alString;inline;'#010+ + '{$if','def cpu_only_overloads}'#010+ + ' Function Add(Const Value : String;const CPUs:TCPUs) : TConditional'+ + 'String;inline;'#010+ '{$endif cpu_only_overloads}'#010+ ' Function Add(Const Value : String;const CPUs:TCPUs;const OSes:TOSe'+ 's) : TConditionalString;'#010+ - ' Property ConditionalStrings[Index : Integer','] : TConditionalStrin'+ + ' Prop','erty ConditionalStrings[Index : Integer] : TConditionalStrin'+ 'g Read GetConditionalString Write SetConditionalString; default;'#010+ ' end;'#010+ #010+ @@ -488,46 +530,46 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ ' TConditionalDestString = Class(TConditionalString)'#010+ ' private'#010+ - ' FDestPath: string;'#010+ + ' FDestPath:',' string;'#010+ ' public'#010+ - ' property DestPath',': string read FDestPath write FDestPath;'#010+ + ' property DestPath: string read FDestPath write FDestPath;'#010+ ' end;'#010+ #010+ ' TConditionalDestStringClass = class of TConditionalDestString;'#010+ #010+ ' { TConditionalDestStrings }'#010+ #010+ - ' TConditionalDestStrings = Class(TConditionalStrings)'#010+ + ' TConditionalDestStrings = Class(TConditionalStrings)'#010, ' private'#010+ - ' function GetConditionalSt','ring(Index : Integer): TConditionalDest'+ - 'String;'#010+ + ' function GetConditionalString(Index : Integer): TConditionalDestSt'+ + 'ring;'#010+ ' procedure SetConditionalString(Index : Integer; AValue: TCondition'+ 'alDestString);'#010+ ' public'#010+ - ' Constructor Create(AClass:TConditionalDestStringClass);'#010+ - ' Function Add(Const Value : String; ','ADestPath: String) : TConditi'+ - 'onalDestString;inline;'#010+ + ' Constructor Create(AClass:TConditionalDestStringClass);'#010, + ' Function Add(Const Value : String; ADestPath: String) : TCondition'+ + 'alDestString;inline;'#010+ ' Function Add(Const Value : String;const OSes:TOSes; ADestPath: Str'+ 'ing) : TConditionalDestString;inline;'#010+ '{$ifdef cpu_only_overloads}'#010+ - ' Function Add(Const Value : String;const CPUs:TCP','Us; ADestPath: S'+ + ' Function ','Add(Const Value : String;const CPUs:TCPUs; ADestPath: S'+ 'tring) : TConditionalDestString;inline;'#010+ '{$endif cpu_only_overloads}'#010+ ' Function Add(Const Value : String;const CPUs:TCPUs;const OSes:TOSe'+ - 's; ADestPath: String) : TConditionalDestString;'#010+ - ' Property ConditionalStrings[Index ',': Integer] : TConditionalDestS'+ - 'tring Read GetConditionalString Write SetConditionalString; default;'#010+ + 's; ADestPath: String) : TConditionalDestString;',#010+ + ' Property ConditionalStrings[Index : Integer] : TConditionalDestStr'+ + 'ing Read GetConditionalString Write SetConditionalString; default;'#010+ ' end;'#010+ #010+ ' { TNotifyEventCollection }'#010+ #010+ - ' TNotifyEventAction = (neaBeforeCompile, neaAfterCompile, neaBeforeIn'+ - 'stall, neaAfterInstall,'#010+ - ' ',' neaBeforeClean, neaAfterClean, neaBeforeArch'+ - 'ive, neaAfterArchive,'#010+ + ' TNotifyEventAction = (neaBeforeCompile, neaAfterCompile, neaBe','fore'+ + 'Install, neaAfterInstall,'#010+ + ' neaBeforeClean, neaAfterClean, neaBeforeArchiv'+ + 'e, neaAfterArchive,'#010+ ' neaBeforeManifest, neaAfterManifest, neaBefore'+ 'PkgList, neaAfterPkgList,'#010+ - ' neaBeforeUnInstall, neaAfterUnInstall,'#010, + ' ','neaBeforeUnInstall, neaAfterUnInstall,'#010+ ' neaBeforeCreateBuildEngine, neaAfterCreateBuil'+ 'dengine);'#010+ #010+ @@ -535,14 +577,14 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ ' TNotifyEventItem = class(TCollectionItem)'#010+ ' private'#010+ - ' FOnAction: TNotifyEventAction;'#010+ - ' FOnEvent: TN','otifyEvent;'#010+ + ' FOnActio','n: TNotifyEventAction;'#010+ + ' FOnEvent: TNotifyEvent;'#010+ ' FOnProcEvent: TNotifyProcEvent;'#010+ ' public'#010+ ' property OnAction: TNotifyEventAction read FOnAction write FOnActi'+ 'on;'#010+ ' property OnEvent: TNotifyEvent read FOnEvent write FOnEvent;'#010+ - ' property OnProcEvent: TNotifyProcEvent r','ead FOnProcEvent write F'+ + ' p','roperty OnProcEvent: TNotifyProcEvent read FOnProcEvent write F'+ 'OnProcEvent;'#010+ ' procedure CallEvent(Sender: TObject);'#010+ ' end;'#010+ @@ -551,12 +593,12 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' private'#010+ ' FSupportedActionSet: TNotifyEventActionSet;'#010+ ' public'#010+ - ' constructor create(ASupportedActionS','et: TNotifyEventActionSet);'#010+ + ' ',' constructor create(ASupportedActionSet: TNotifyEventActionSet);'#010+ ' procedure AppendEvent(AnAction: TNotifyEventAction; AnEvent: TNoti'+ 'fyEvent);'#010+ ' procedure AppendProcEvent(AnACtion: TNotifyEventAction; AnProcEven'+ 't: TNotifyProcEvent);'#010+ - ' procedure CallEvents(AnAction: TNoti','fyEventAction; Sender: TObje'+ + ' ',' procedure CallEvents(AnAction: TNotifyEventAction; Sender: TObje'+ 'ct);'#010+ ' end;'#010+ #010+ @@ -567,30 +609,29 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ ' TDictionary = Class(TComponent)'#010+ ' private'#010+ - ' FList : TStringList;'#010+ + ' FList : TStrin','gList;'#010+ ' Public'#010+ - ' Constructor Create(','AOwner : TComponent); override;'#010+ + ' Constructor Create(AOwner : TComponent); override;'#010+ ' Destructor Destroy;override;'#010+ ' Procedure AddVariable(const AName,Value : String);'#010+ ' Procedure AddFunction(const AName : String; FReplacement : TReplac'+ - 'eFunction);'#010+ - ' Procedure RemoveItem(const AName :',' String);'#010+ + 'eFunction);',#010+ + ' Procedure RemoveItem(const AName : String);'#010+ ' Function GetValue(AName : String) : String;'#010+ ' Function GetValue(const AName,Args : String) : String; virtual;'#010+ ' Function ReplaceStrings(Const ASource : String; Const MaxDepth: In'+ - 'teger = 10) : String; virtual;'#010+ - ' Function ','Substitute(Const Source : String; Macros : Array of str'+ - 'ing) : String; virtual;'#010+ + 'teger',' = 10) : String; virtual;'#010+ + ' Function Substitute(Const Source : String; Macros : Array of strin'+ + 'g) : String; virtual;'#010+ ' end;'#010+ #010+ ' { TPackageDictionary }'#010+ #010+ ' TPackageDictionary = Class(TDictionary)'#010+ ' private'#010+ - ' FMasterDictionary: TDictionary;'#010+ + ' FMasterDictionary: TDictionary;'#010, ' Public'#010+ - ' Function GetValue(const AN','ame,Args : String) : String; override;'+ - #010+ + ' Function GetValue(const AName,Args : String) : String; override;'#010+ ' property MasterDictionary: TDictionary read FMasterDictionary writ'+ 'e FMasterDictionary;'#010+ ' end;'#010+ @@ -598,31 +639,31 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ ' { TDependency }'#010+ ' TDependency = Class(TConditionalString)'#010+ - ' private'#010+ - ' FDependencyType : TDependen','cyType;'#010+ + ' ','private'#010+ + ' FDependencyType : TDependencyType;'#010+ ' // Package, Unit'#010+ ' FTarget : TObject;'#010+ ' FVersion : TFPVersion;'#010+ ' FRequireChecksum : Cardinal;'#010+ ' // Filenames, Includes'#010+ ' FTargetFileName : String;'#010+ - ' Function GetVersion : string;'#010+ - ' Procedure SetVersion(const V : st','ring);'#010+ + ' Function GetVersion : string',';'#010+ + ' Procedure SetVersion(const V : string);'#010+ ' Public'#010+ ' Constructor Create;override;'#010+ ' Destructor Destroy;override;'#010+ ' Property Target : TObject Read FTarget Write FTarget;'#010+ - ' Property DependencyType : TDependencyType Read FDependencyType;'#010+ - ' Property TargetFileName : St','ring Read FTargetFileName Write FTar'+ - 'getFileName;'#010+ + ' Property DependencyType : TDependencyType Read FDependenc','yType;'#010+ + ' Property TargetFileName : String Read FTargetFileName Write FTarge'+ + 'tFileName;'#010+ ' Property Version : String Read GetVersion Write SetVersion;'#010+ ' Property RequireChecksum : Cardinal Read FRequireChecksum Write FR'+ 'equireChecksum;'#010+ - ' end;'#010+ + ' ','end;'#010+ #010+ ' { TPackageVariant }'#010+ #010+ - ' TPackage',' = Class;'#010+ + ' TPackage = Class;'#010+ ' TPackageVariant = class(TNamedItem)'#010+ ' private'#010+ ' FOptions: TStrings;'#010+ @@ -630,12 +671,12 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' FIncludePath: TConditionalStrings;'#010+ ' FSourcePath: TConditionalStrings;'#010+ ' public'#010+ - ' constructor Create(ACollection: TCollection)','; override;'#010+ + ' const','ructor Create(ACollection: TCollection); override;'#010+ ' destructor Destroy; override;'#010+ ' property Options: TStrings read FOptions;'#010+ ' Property IncludePath : TConditionalStrings Read FIncludePath;'#010+ - ' Property SourcePath : TConditionalStrings Read FSourcePath;'#010+ - ' property Targe','ts: TTargets read FTargets;'#010+ + ' Property SourcePath : TConditionalStrin','gs Read FSourcePath;'#010+ + ' property Targets: TTargets read FTargets;'#010+ ' end;'#010+ #010+ ' { TPackageVariants }'#010+ @@ -643,153 +684,163 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' TPackageVariants = class(TNamedCollection)'#010+ ' private'#010+ ' FActivePackageVariantName: string;'#010+ - ' FDefaultPackageVariantName: string;'#010+ + ' FAutoAddToPackage: boolean;'#010+ + ' FDefaultPac','kageVariantName: string;'#010+ ' FIsInheritable: boolean;'#010+ - ' FMasterPackag','e: TPackage;'#010+ + ' FMasterPackage: TPackage;'#010+ ' FName: string;'#010+ ' function GetActivePackageVariant: TPackageVariant;'#010+ ' function GetDefaultPackageVariant: TPackageVariant;'#010+ - ' procedure SetActivePackageVariantName(AValue: string);'#010+ - ' procedure SetDefaultPackageVariant','Name(AValue: string);'#010+ + ' procedure SetActivePac','kageVariantName(AValue: string);'#010+ + ' procedure SetDefaultPackageVariantName(AValue: string);'#010+ ' public'#010+ ' function Add(AName: String): TPackageVariant; overload; virtual;'#010+ ' property Name: string read FName write FName;'#010+ - ' property MasterPackage: TPackage read FMasterPackage;'#010+ - ' property DefaultPackageVaria','nt: TPackageVariant read GetDefaultP'+ - 'ackageVariant;'#010+ + ' property Master','Package: TPackage read FMasterPackage;'#010+ + ' property DefaultPackageVariant: TPackageVariant read GetDefaultPac'+ + 'kageVariant;'#010+ ' property ActivePackageVariant: TPackageVariant read GetActivePacka'+ 'geVariant;'#010+ - ' property DefaultPackageVariantName: string read FDefaultPackageVar'+ - 'iantName write SetDefaultPackageVarian','tName;'#010+ + ' property DefaultPackageVariantNam','e: string read FDefaultPackageV'+ + 'ariantName write SetDefaultPackageVariantName;'#010+ ' property ActivePackageVariantName: string read FActivePackageVaria'+ 'ntName write SetActivePackageVariantName;'#010+ - ' property IsInheritable: boolean read FIsInheritable;'#010+ + ' property IsInheritable: boolean read FIsInheri','table;'#010+ + ' property AutoAddToPackage: boolean read FAutoAddToPackage;'#010+ ' end;'#010+ #010+ #010+ ' TDependencies = Class(TConditionalStrings)'#010+ - ' functi','on GetDependency(Index : Integer): TDependency;'#010+ - ' procedure SetDependency(Index : Integer; const AValue: TDependency'+ - ');'#010+ + ' function GetDependency(Index : Integer): TDependency;'#010+ + ' procedure SetDependency(Index : Integer; const AValue:',' TDependen'+ + 'cy);'#010+ ' Public'#010+ ' Function Add(Const Value : String) : TDependency;inline;'#010+ - ' Function Add(Const Value : String;const OSes:','TOSes) : TDependenc'+ - 'y;inline;'#010+ - '{$ifdef cpu_only_overloads}'#010+ - ' Function Add(Const Value : String;const CPUs:TCPUs) : TDependency;'+ + ' Function Add(Const Value : String;const OSes:TOSes) : TDependency;'+ 'inline;'#010+ + '{$ifdef cpu_only_overloads}'#010+ + ' Function Add(Const Value : String;const CPUs:','TCPUs) : TDependenc'+ + 'y;inline;'#010+ '{$endif cpu_only_overloads}'#010+ ' Function Add(Const Value : String;const CPUs:TCPUs;const OSes:TOSe'+ - 's) : TD','ependency;'#010+ + 's) : TDependency;'#010+ ' Function AddUnit(Const Value : String) : TDependency;inline;'#010+ - ' Function AddUnit(Const Value : String;const OSes:TOSes) : TDepende'+ - 'ncy;inline;'#010+ - '{$ifdef cpu_only_overloads}'#010+ - ' Function AddUnit(Const Value : String;const CPUs:T','CPUs) : TDepen'+ + ' Function AddUnit(Const Val','ue : String;const OSes:TOSes) : TDepen'+ 'dency;inline;'#010+ + '{$ifdef cpu_only_overloads}'#010+ + ' Function AddUnit(Const Value : String;const CPUs:TCPUs) : TDepende'+ + 'ncy;inline;'#010+ '{$endif cpu_only_overloads}'#010+ - ' Function AddUnit(Const Value : String;const CPUs:TCPUs;const OSes:'+ - 'TOSes) : TDependency;'#010+ + ' Function AddUnit(Const Value : String;const CP','Us:TCPUs;const OSe'+ + 's:TOSes) : TDependency;'#010+ ' Function AddInclude(Const Value : String) : TDependency;inline;'#010+ - ' Function AddInclude(','Const Value : String;const OSes:TOSes) : TDe'+ - 'pendency;inline;'#010+ - '{$ifdef cpu_only_overloads}'#010+ - ' Function AddInclude(Const Value : String;const CPUs:TCPUs) : TDepe'+ + ' Function AddInclude(Const Value : String;const OSes:TOSes) : TDepe'+ 'ndency;inline;'#010+ + '{$ifdef cpu_only_overloads}'#010+ + ' Function AddI','nclude(Const Value : String;const CPUs:TCPUs) : TDe'+ + 'pendency;inline;'#010+ '{$endif cpu_only_overloads}'#010+ - ' Function AddInclude(Const Value : ','String;const CPUs:TCPUs;const '+ - 'OSes:TOSes) : TDependency;'#010+ - ' Property Dependencies[Index : Integer] : TDependency Read GetDepen'+ - 'dency Write SetDependency; default;'#010+ + ' Function AddInclude(Const Value : String;const CPUs:TCPUs;const OS'+ + 'es:TOSes) : TDependency;'#010+ + ' Property Dependencies[Index : Integer] : TDep','endency Read GetDep'+ + 'endency Write SetDependency; default;'#010+ ' end;'#010+ #010+ ' { TTarget }'#010+ #010+ ' TTarget = Class(TNamedItem)'#010+ ' private'#010+ - ' FInstall :',' Boolean;'#010+ + ' FInstall : Boolean;'#010+ ' FAfterClean: TNotifyEvent;'#010+ ' FAfterCompile: TNotifyEvent;'#010+ - ' FBeforeClean: TNotifyEvent;'#010+ + ' FBeforeClean: TNotifyEvent;'#010, ' FBeforeCompile: TNotifyEvent;'#010+ ' FCPUs: TCPUs;'#010+ + ' FIsFPMakePlugin: Boolean;'#010+ ' FOSes: TOSes;'#010+ ' FMode: TCompilerMode;'#010+ ' FResourceStrings: Boolean;'#010+ - ' FOb','jectPath,'#010+ + ' FObjectPath,'#010+ ' FUnitPath,'#010+ ' FIncludePath : TConditionalStrings;'#010+ - ' FDependencies : TDependencies;'#010+ + ' FDepend','encies : TDependencies;'#010+ ' FCommands : TCommands;'#010+ ' FDirectory: String;'#010+ ' FExtension: String;'#010+ + ' FExeName : String;'#010+ ' FTargetSourceFileName : String;'#010+ ' FFileType: TFileType;'#010+ - ' ',' FOptions: TStrings;'#010+ + ' FOptions: TStrings;'#010+ ' FFPCTarget: String;'#010+ - ' FTargetState: TTargetState;'#010+ + ' FTar','getState: TTargetState;'#010+ ' FTargetType: TTargetType;'#010+ ' FXML: string;'#010+ ' function GetOptions: TStrings;'#010+ ' procedure SetOptions(const AValue: TStrings);'#010+ ' Protected'#010+ - ' Function GetSo','urceFileName : String; virtual;'#010+ - ' Function GetUnitFileName : String; virtual;'#010+ + ' Function GetSourceFileName : String; virtual;'#010+ + ' Function GetUnitF','ileName : String; virtual;'#010+ ' function GetUnitLibFileName(AOS: TOS): String; virtual;'#010+ ' Function GetObjectFileName : String; virtual;'#010+ + ' Function GetBinFileBase: String;'#010+ ' function GetRSTFileName : String; Virtual;'#010+ - ' ',' function GetRSJFileName : String; Virtual;'#010+ + ' function GetRSJ','FileName : String; Virtual;'#010+ ' function GetImportLibFileName(AOS : TOS) : String; Virtual;'#010+ ' Function GetProgramFileName(AOS : TOS) : String; Virtual;'#010+ ' Function GetProgramDebugFileName(AOS : TOS) : String; Virtual;'#010+ - ' P','ublic'#010+ + ' Function GetLib','raryFileName(AOS : TOS) : String; Virtual;'#010+ + ' Function GetLibraryDebugFileName(AOS : TOS) : String; Virtual;'#010+ + ' Public'#010+ ' Constructor Create(ACollection : TCollection); override;'#010+ ' Destructor Destroy; override;'#010+ - ' procedure AssignTo(Dest: TPersistent); override;'#010+ + ' procedure AssignTo(Des','t: TPersistent); override;'#010+ ' Function GetOutputFileName (AOs : TOS) : String; Virtual;'#010+ - ' Function HaveOption','s : Boolean;'#010+ + ' Function HaveOptions : Boolean;'#010+ ' procedure SetName(const AValue: String);override;'#010+ - ' procedure SetXML(const AValue: string);'#010+ + ' procedure SetExeName(const AValue: String);'#010+ + ' procedur','e SetXML(const AValue: string);'#010+ ' Procedure GetCleanFiles(List : TStrings; const APrefixU, APrefixB '+ ': String; ACPU:TCPU; AOS : TOS); virtual;'#010+ - ' Procedure Get','InstallFiles(List : TStrings; const APrefixU, APref'+ - 'ixB: String; ACPU:TCPU; AOS : TOS); virtual;'#010+ + ' Procedure GetInstallFiles(List : TStrings; const APrefixU, APrefix'+ + 'B : String; ACPU:TCPU; AOS',' : TOS); virtual;'#010+ ' Procedure GetArchiveFiles(List : TStrings; ACPU:TCPU; AOS : TOS); '+ 'virtual;'#010+ ' Property Dependencies : TDependencies Read FDependencies;'#010+ - ' ',' Property Commands : TCommands Read FCommands;'#010+ - ' Property State : TTargetState Read FTargetState;'#010+ + ' Property Commands : TCommands Read FCommands;'#010+ + ' Property State : TTargetSta','te Read FTargetState;'#010+ ' Property TargetType : TTargetType Read FTargetType Write FTargetTy'+ 'pe;'#010+ ' Property OSes : TOSes Read FOSes Write FOSes;'#010+ - ' Property CPU','s : TCPUs Read FCPUs Write FCPUs;'#010+ - ' Property Mode : TCompilerMode Read FMode Write FMode;'#010+ + ' Property CPUs : TCPUs Read FCPUs Write FCPUs;'#010+ + ' Property Mode : TCompilerMode Read FMode',' Write FMode;'#010+ ' Property Options : TStrings Read GetOptions Write SetOptions;'#010+ ' Property SourceFileName: String Read GetSourceFileName ;'#010+ - ' Property UnitFile','Name : String Read GetUnitFileName;'#010+ - ' Property ObjectFileName : String Read GetObjectFileName;'#010+ + ' Property UnitFileName : String Read GetUnitFileName;'#010+ + ' Property ObjectFileName : String Read ','GetObjectFileName;'#010+ ' Property RSTFileName : String Read GetRSTFileName;'#010+ ' Property RSJFileName : String Read GetRSJFileName;'#010+ - ' Property FPCTarget : String R','ead FFPCTarget Write FFPCTarget;'#010+ - ' Property Extension : String Read FExtension Write FExtension;'#010+ + ' Property FPCTarget : String Read FFPCTarget Write FFPCTarget;'#010+ + ' Property Extension : String Read FExtensi','on Write FExtension;'#010+ ' Property FileType : TFileType Read FFileType Write FFileType;'#010+ ' Property Directory : String Read FDirectory Write FDirectory;'#010+ - ' Prope','rty ResourceStrings : Boolean Read FResourceStrings Write F'+ - 'ResourceStrings;'#010+ - ' Property Install : Boolean Read FInstall Write FInstall;'#010+ + ' Property ResourceStrings : Boolean Read FResourceStrings Write FRe'+ + 'sourceStrings;'#010+ + ' ',' Property Install : Boolean Read FInstall Write FInstall;'#010+ ' Property TargetSourceFileName: String Read FTargetSourceFileName;'#010+ - ' Property ObjectPath : TCondit','ionalStrings Read FObjectPath;'#010+ - ' Property UnitPath : TConditionalStrings Read FUnitPath;'#010+ + ' Property ObjectPath : TConditionalStrings Read FObjectPath;'#010+ + ' Property UnitPath : TConditionalStrings Rea','d FUnitPath;'#010+ ' Property IncludePath : TConditionalStrings Read FIncludePath;'#010+ ' Property XML: string Read FXML Write SetXML;'#010+ + ' Property IsFPMakePlugin : Boolean read FIsFPMakePlugin write FIsFP'+ + 'MakePlugin;'#010+ ' // Events.'#010+ - ' Property Before','Compile : TNotifyEvent Read FBeforeCompile Write '+ + ' Property Be','foreCompile : TNotifyEvent Read FBeforeCompile Write '+ 'FBeforeCompile;'#010+ ' Property AfterCompile : TNotifyEvent Read FAfterCompile Write FAft'+ 'erCompile;'#010+ ' Property BeforeClean : TNotifyEvent Read FBeforeClean Write FBefor'+ 'eClean;'#010+ - ' Property Aft','erClean : TNotifyEvent Read FAfterClean Write FAfter'+ + ' Property',' AfterClean : TNotifyEvent Read FAfterClean Write FAfter'+ 'Clean;'#010+ ' end;'#010+ #010+ @@ -798,345 +849,365 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' TTargets = Class(TNamedCollection)'#010+ ' private'#010+ ' function GetTargetItem(Index : Integer): TTarget;'#010+ - ' function GetTarget(const AName : String): TTarget;'#010+ - ' ',' procedure SetTargetItem(Index : Integer; const AValue: TTarget);'+ - #010+ + ' function GetTarget(const AName : String): TTarge','t;'#010+ + ' procedure SetTargetItem(Index : Integer; const AValue: TTarget);'#010+ ' Public'#010+ ' Function AddFPDoc(Const AUnitName, AXMLName : String) : TTarget;in'+ 'line;'#010+ ' Function AddUnit(Const AUnitName : String) : TTarget;inline;'#010+ - ' Function AddUnit(C','onst AUnitName : String;const OSes:TOSes) : TT'+ + ' Function AddUn','it(Const AUnitName : String;const OSes:TOSes) : TT'+ 'arget;inline;'#010+ '{$ifdef cpu_only_overloads}'#010+ ' Function AddUnit(Const AUnitName : String;const CPUs:TCPUs) : TTar'+ 'get;inline;'#010+ '{$endif cpu_only_overloads}'#010+ - ' Function AddUnit(Const AUnitName : Str','ing;const CPUs:TCPUs;const'+ + ' Function AddUnit(Const AUnitName :',' String;const CPUs:TCPUs;const'+ ' OSes:TOSes) : TTarget;'#010+ ' Function AddImplicitUnit(Const AUnitName : String;InstallUnit:bool'+ 'ean=true) : TTarget;inline;'#010+ ' Function AddImplicitUnit(Const AUnitName : String;const OSes:TOSes'+ - ';InstallUnit:boolean=t','rue) : TTarget;inline;'#010+ + ';InstallUnit:boole','an=true) : TTarget;inline;'#010+ ' Function AddImplicitUnit(Const AUnitName : String;const CPUs:TCPUs'+ ';InstallUnit:boolean=true) : TTarget;inline;'#010+ ' Function AddImplicitUnit(Const AUnitName : String;const CPUs:TCPUs'+ - ';const OSes:TOSes;InstallUnit:bo','olean=true) : TTarget;'#010+ + ';const OSes:TOSes;InstallUni','t:boolean=true) : TTarget;'#010+ ' Function AddProgram(Const AProgramName : String) : TTarget;inline;'+ #010+ ' Function AddProgram(Const AProgramName : String;const OSes:TOSes) '+ ': TTarget;inline;'#010+ '{$ifdef cpu_only_overloads}'#010+ - ' Function AddProgram(Const ','AProgramName : String;const CPUs:TCPUs'+ + ' Function AddProgram(Co','nst AProgramName : String;const CPUs:TCPUs'+ ') : TTarget;inline;'#010+ '{$endif cpu_only_overloads}'#010+ ' Function AddProgram(Const AProgramName : String;const CPUs:TCPUs;c'+ 'onst OSes:TOSes) : TTarget;'#010+ - ' Function AddExampleUnit(Const AUnitName : String) : ','TTarget;inli'+ - 'ne;'#010+ - ' Function AddExampleUnit(Const AUnitName : String;const OSes:TOSes)'+ - ' : TTarget;inline;'#010+ + ' Function AddLibrary(Const ALibraryName : String)',' : TTarget;inlin'+ + 'e;'#010+ + ' Function AddLibrary(Const ALibraryName : String;const OSes:TOSes) '+ + ': TTarget;inline;'#010+ + '{$ifdef cpu_only_overloads}'#010+ + ' Function AddLibrary(Const ALibraryName : String;const CPUs:TCPUs) '+ + ': TTarget;inline;'#010+ + '{$endif cpu_only_','overloads}'#010+ + ' Function AddLibrary(Const ALibraryName : String;const CPUs:TCPUs;c'+ + 'onst OSes:TOSes) : TTarget;'#010+ + ' Function AddExampleUnit(Const AUnitName : String) : TTarget;inline'+ + ';'#010+ + ' Function AddExampleUnit(Const AUnitName : String;const ','OSes:TOSe'+ + 's) : TTarget;inline;'#010+ '{$ifdef cpu_only_overloads}'#010+ ' Function AddExampleUnit(Const AUnitName : String;const CPUs:TCPUs)'+ ' : TTarget;inline;'#010+ - '{$endif cpu_only_o','verloads}'#010+ - ' Function AddExampleUnit(Const AUnitName : String;const CPUs:TCPUs;'+ - 'const OSes:TOSes) : TTarget;'#010+ + '{$endif cpu_only_overloads}'#010+ + ' Function AddExampleUnit(Const AUnitName : String;const CPUs:T','CPU'+ + 's;const OSes:TOSes) : TTarget;'#010+ ' Function AddExampleProgram(Const AProgramName : String) : TTarget;'+ 'inline;'#010+ - ' Function AddExampleProgram(Const AProgramName : S','tring;const OSe'+ - 's:TOSes) : TTarget;inline;'#010+ + ' Function AddExampleProgram(Const AProgramName : String;const OSes:'+ + 'TOSes) : TTarget;inline;'#010+ '{$ifdef cpu_only_overloads}'#010+ - ' Function AddExampleProgram(Const AProgramName : String;const CPUs:'+ - 'TCPUs) : TTarget;inline;'#010+ + ' F','unction AddExampleProgram(Const AProgramName : String;const CPU'+ + 's:TCPUs) : TTarget;inline;'#010+ '{$endif cpu_only_overloads}'#010+ - ' Function AddExampleProgram(Const AProgramNa','me : String;const CPU'+ - 's:TCPUs;const OSes:TOSes) : TTarget;'#010+ - ' Property Targets[AName : String] : TTarget Read GetTarget; default'+ - ';'#010+ + ' Function AddExampleProgram(Const AProgramName : String;const CPUs:'+ + 'TCPUs;const OSes:TOSes) : TTarget;'#010+ + ' Property Targ','ets[AName : String] : TTarget Read GetTarget; defau'+ + 'lt;'#010+ ' Property TargetItems[Index : Integer] : TTarget Read GetTargetItem'+ ' Write SetTargetItem;'#010+ ' end;'#010+ #010+ - ' { TSourc','e }'#010+ + ' { TSource }'#010+ #010+ ' TSource = Class(TNamedItem)'#010+ ' private'#010+ - ' FSourceType : TSourceType;'#010+ + ' FSourceType : TSourceType;',#010+ ' FInstallSourcePath : string;'#010+ ' function GetInstallSourcePath: string;'#010+ ' Public'#010+ ' Constructor Create(ACollection : TCollection); override;'#010+ - ' Destructor Des','troy; override;'#010+ + ' Destructor Destroy; override;'#010+ ' Procedure GetInstallFiles(List : TStrings); virtual;'#010+ - ' property SourceType : TSourceType read FSourceType;'#010+ + ' ',' property SourceType : TSourceType read FSourceType;'#010+ ' property InstallSourcePath : string read GetInstallSourcePath;'#010+ ' end;'#010+ #010+ ' { TSources }'#010+ #010+ - ' TSources = Class(T','NamedCollection)'#010+ + ' TSources = Class(TNamedCollection)'#010+ ' private'#010+ - ' function GetSourceItem(Index : Integer): TSource;'#010+ + ' function GetSourceItem(Index : Integer): TSo','urce;'#010+ ' procedure SetSourceItem(Index : Integer; const AValue: TSource);'#010+ ' public'#010+ ' Function AddDoc(const AFiles : String) : TSource;'#010+ - ' Function AddDoc(const A','Files : String; AInstallSourcePath : Stri'+ - 'ng) : TSource;'#010+ - ' Function AddSrc(const AFiles : String) : TSource;'#010+ + ' Function AddDoc(const AFiles : String; AInstallSourcePath : String'+ + ') : TSource;'#010+ + ' Function AddSrc','(const AFiles : String) : TSource;'#010+ ' Function AddExample(const AFiles : String) : TSource;'#010+ ' Function AddExample(const AFiles : String; AInstallSourcePath : St'+ - 'ri','ng) : TSource;'#010+ + 'ring) : TSource;'#010+ ' Function AddTest(const AFiles : String) : TSource;'#010+ - ' procedure AddDocFiles(const AFileMask, ASearchPathPrefix: string; '+ - 'Recursive: boolean = False; AInstallSourcePath : String = '#039#039');'#010+ - ' procedure AddSrcFiles(const AFile','Mask, ASearchPathPrefix: string'+ - '; Recursive: boolean = False);'#010+ - ' procedure AddExampleFiles(const AFileMask, ASearchPathPrefix: stri'+ - 'ng; Recursive: boolean = False; AInstallSourcePath : String = '#039#039')'+ - ';'#010+ - ' procedure AddTestFiles(const AFileMas','k, ASearchPathPrefix: strin'+ - 'g; Recursive: boolean = False);'#010+ - ' Property SourceItems[Index : Integer] : TSource Read GetSourceItem'+ - ' Write SetSourceItem;default;'#010+ + ' p','rocedure AddDocFiles(const AFileMask, ASearchPathPrefix: string'+ + '; Recursive: boolean = False; AInstallSourcePath : String = '#039#039');'+ + #010+ + ' procedure AddSrcFiles(const AFileMask, ASearchPathPrefix: string; '+ + 'Recursive: boolean = False);'#010+ + ' procedure',' AddExampleFiles(const AFileMask, ASearchPathPrefix: st'+ + 'ring; Recursive: boolean = False; AInstallSourcePath : String = '#039#039+ + ');'#010+ + ' procedure AddTestFiles(const AFileMask, ASearchPathPrefix: string;'+ + ' Recursive: boolean = False);'#010+ + ' Property Sou','rceItems[Index : Integer] : TSource Read GetSourceIt'+ + 'em Write SetSourceItem;default;'#010+ ' end;'#010+ #010+ ' { TPackage }'#010+ #010+ ' TPackage = Class(TNamedItem)'#010+ ' private'#010+ - ' FAfterArchiv','e: TNotifyEvent;'#010+ + ' FAfterArchive: TNotifyEvent;'#010+ ' FAfterArchiveProc: TNotifyProcEvent;'#010+ - ' FAfterClean: TNotifyEvent;'#010+ + ' FAfterClean: ','TNotifyEvent;'#010+ ' FAfterCleanProc: TNotifyProcEvent;'#010+ ' FAfterCompile: TNotifyEvent;'#010+ ' FAfterCompileProc: TNotifyProcEvent;'#010+ ' FAfterInstall: TNotifyEvent;'#010+ - ' F','AfterInstallProc: TNotifyProcEvent;'#010+ + ' FAfterInstallProc: TNotifyProcEvent;'#010+ ' FAfterManifest: TNotifyEvent;'#010+ - ' FAfterManifestProc: TNotifyProcEvent;'#010+ + ' F','AfterManifestProc: TNotifyProcEvent;'#010+ ' FAfterPkgList: TNotifyEvent;'#010+ ' FAfterPkgListProc: TNotifyProcEvent;'#010+ ' FBeforeArchive: TNotifyEvent;'#010+ - ' FBeforeArchivePr','oc: TNotifyProcEvent;'#010+ + ' FBeforeArchiveProc: TNotifyProcEvent;'#010+ ' FBeforeClean: TNotifyEvent;'#010+ - ' FBeforeCleanProc: TNotifyProcEvent;'#010+ + ' FBeforeCleanProc:',' TNotifyProcEvent;'#010+ ' FBeforeCompile: TNotifyEvent;'#010+ ' FBeforeCompileProc: TNotifyProcEvent;'#010+ ' FBeforeInstall: TNotifyEvent;'#010+ - ' FBeforeInstallProc: TNotifyProcE','vent;'#010+ + ' FBeforeInstallProc: TNotifyProcEvent;'#010+ ' FBeforeManifest: TNotifyEvent;'#010+ - ' FBeforeManifestProc: TNotifyProcEvent;'#010+ + ' FBeforeManifestProc: TNotifyPr','ocEvent;'#010+ ' FBeforePkgList: TNotifyEvent;'#010+ ' FBeforePkgListProc: TNotifyProcEvent;'#010+ ' FBuildMode: TBuildMode;'#010+ ' FFlags: TStrings;'#010+ - ' FFPDocFormat: TFPDocFormat','s;'#010+ + ' FFPDocFormat: TFPDocFormats;'#010+ ' FIsFPMakeAddIn: boolean;'#010+ ' FSupportBuildModes: TBuildModes;'#010+ - ' FUnitPath,'#010+ + ' FU','nitPath,'#010+ ' FObjectPath,'#010+ ' FIncludePath,'#010+ ' FSourcePath,'#010+ ' FExamplePath,'#010+ ' FTestPath,'#010+ ' FCleanFiles : TConditionalStrings;'#010+ - ' FInstallFiles : TCondition','alDestStrings;'#010+ + ' FInstallFiles : TConditionalDestStrings;'#010+ ' FDependencies : TDependencies;'#010+ ' FCPUs: TCPUs;'#010+ - ' FOSes: TOSes;'#010+ + ' FOS','es: TOSes;'#010+ ' FTargetState: TTargetState;'#010+ ' FTargets: TTargets;'#010+ ' FSources: TSources;'#010+ ' FDirectory: String;'#010+ ' FOptions: TStrings;'#010+ + ' FTransmitOptions: TStrings;'#010+ ' FFileName: String;'#010+ - ' ',' FShortName: String;'#010+ + ' FShortName: String;'#010+ ' FAuthor: String;'#010+ - ' FLicense: String;'#010+ + ' ',' FLicense: String;'#010+ ' FHomepageURL: String;'#010+ ' FDownloadURL: String;'#010+ ' FVersion: TFPVersion;'#010+ ' FEmail : String;'#010+ ' FNeedLibC : Boolean;'#010+ ' FCommands : TCommands;'#010+ - ' FDescriptionFile : St','ring;'#010+ + ' FDescriptionFile : String;'#010+ ' FDescription : String;'#010+ - ' FInstalledChecksum : Cardinal;'#010+ + ' FInsta','lledChecksum : Cardinal;'#010+ ' FUnitsOutputDir: String;'#010+ ' FPackageUnitInstallDir: String;'#010+ ' // Cached directory of installed packages'#010+ ' FUnitDir : String;'#010+ ' FUnitConfigFileName : String;'#010+ - ' ','// Used by buildunits'#010+ - ' FBUTargets: TTargets;'#010+ + ' // Used by buildunits'#010+ + ' FBUTargets: TTarg','ets;'#010+ ' FBUTarget: TTarget;'#010+ ' // Used to identify if package is being processed by a thread'#010+ ' FProcessing : boolean;'#010+ ' // Dictionary'#010+ ' FDictionary : TDictionary;'#010+ - ' // Is set when all sou','rcefiles are found'#010+ - ' FAllFilesResolved: boolean;'#010+ + ' // Is set when all sourcefiles are found'#010+ + ' FAllFilesResolved: b','oolean;'#010+ ' FPackageVariants: TFPList;'#010+ ' Function GetDescription : string;'#010+ ' function GetDictionary: TDictionary;'#010+ ' Function GetFileName : string;'#010+ ' Function GetShortName : string;'#010+ - ' func','tion GetOptions: TStrings;'#010+ + ' function GetOptions: TStrings;'#010+ + ' function Get','TransmitOptions: TStrings;'#010+ ' Function GetVersion : string;'#010+ ' procedure SetOptions(const AValue: TStrings);'#010+ + ' procedure SetTransmitOptions(AValue: TStrings);'#010+ ' Procedure SetVersion(const V : string);'#010+ ' Protected'#010+ - ' procedure SetName(const AValue: String);override;'#010+ - ' procedure SaveU','nitConfigToStringList(Const AStringList: TStrings'+ - ';ACPU:TCPU;AOS:TOS); virtual;'#010+ + ' procedure SetName','(const AValue: String);override;'#010+ + ' procedure SaveUnitConfigToStringList(Const AStringList: TStrings;A'+ + 'CPU:TCPU;AOS:TOS); virtual;'#010+ ' property Dictionary: TDictionary read GetDictionary;'#010+ + ' property PackageVariantsList: TFPList read FPack','ageVariants;'#010+ ' Public'#010+ ' constructor Create(ACollection: TCollection); override;'#010+ ' destructor destroy; override;'#010+ - ' ',' Function HaveOptions : Boolean;'#010+ + ' Function HaveOptions : Boolean;'#010+ ' Function GetUnitsOutputDir(ACPU:TCPU; AOS : TOS):String;'#010+ - ' Function GetUnitConfigOutputFilename(ACPU:TCPU; AOS : TOS):String'+ - ';'#010+ + ' Function GetUnitConfi','gOutputFilename(ACPU:TCPU; AOS : TOS):Stri'+ + 'ng;'#010+ ' Procedure InheritPackageVariantsFromDependency(ADependencyPackage:'+ - ' ','TPackage);'#010+ + ' TPackage);'#010+ ' Function GetPackageVariantsByName(AName: string): TPackageVariant'+ 's;'#010+ - ' Procedure SetUnitsOutputDir(AValue: string);'#010+ + ' Procedure SetUnitsOutputDir(AValue:',' string);'#010+ ' Function GetPackageUnitInstallDir(ACPU:TCPU; AOS : TOS):String;'#010+ - ' Procedure SetPackageUnitInstallDir','(AValue: string);'#010+ + ' Procedure SetPackageUnitInstallDir(AValue: string);'#010+ ' Function GetBinOutputDir(ACPU:TCPU; AOS : TOS) : String;'#010+ - ' Procedure GetCleanFiles(List : TStrings; ACPU:TCPU; AOS : TOS); vi'+ - 'rtual;'#010+ + ' Procedure GetCleanFiles(List : TStrings','; ACPU:TCPU; AOS : TOS); '+ + 'virtual;'#010+ ' procedure GetInstallFiles(List: TStrings;Types : TTargetTypes;ACPU'+ - ':TCPU; AOS : ','TOS); virtual;'#010+ + ':TCPU; AOS : TOS); virtual;'#010+ ' procedure GetInstallSourceFiles(List: TStrings; SourceTypes : TSou'+ - 'rceTypes; TargetTypes : TTargetTypes); virtual;'#010+ + 'rceTypes; TargetTypes : TTargetTypes);',' virtual;'#010+ ' Procedure GetArchiveFiles(List : TStrings; ACPU:TCPU; AOS : TOS); '+ 'virtual;'#010+ - ' Procedure GetArchiveSour','ceFiles(List : TStrings); virtual;'#010+ + ' Procedure GetArchiveSourceFiles(List : TStrings); virtual;'#010+ ' Procedure GetManifest(Manifest : TStrings);'#010+ - ' Procedure ListPackage(PkgList : TStrings);'#010+ + ' Procedure ListPackage(PkgList : TStr','ings);'#010+ ' Procedure AddPackageVariant(APackageVariant: TPackageVariants);'#010+ - ' procedure ApplyPackageVariantToCompile','rOptions(ACompilerOptions:'+ - ' tstrings);'#010+ + ' procedure ApplyPackageVariantToCompilerOptions(ACompilerOptions: t'+ + 'strings);'#010+ ' procedure SetDefaultPackageVariant;'#010+ - ' procedure LoadUnitConfigFromFile(Const AFileName: String);'#010+ + ' procedure LoadUnitConfigFromFile(Const AF','ileName: String);'#010+ ' procedure SaveUnitConfigToFile(Const AFileName: String;ACPU:TCPU;A'+ 'OS:TOS);'#010+ - ' Property Version',' : String Read GetVersion Write SetVersion;'#010+ + ' Property Version : String Read GetVersion Write SetVersion;'#010+ ' Property FileName : String Read GetFileName Write FFileName;'#010+ - ' Property ShortName : String Read GetShortName Write FShortName;'#010+ - ' Property HomepageURL : String Read FHomepageURL Write FHome','pageU'+ - 'RL;'#010+ + ' Property S','hortName : String Read GetShortName Write FShortName;'#010+ + ' Property HomepageURL : String Read FHomepageURL Write FHomepageURL'+ + ';'#010+ ' Property DownloadURL : String Read FDownloadURL Write FDownloadURL'+ ';'#010+ - ' Property Email : String Read FEmail Write FEmail;'#010+ + ' Property Email : String Read FEmail Wr','ite FEmail;'#010+ ' Property Author : String Read FAuthor Write FAuthor;'#010+ - ' Property License : String Read FLicense Writ','e FLicense;'#010+ + ' Property License : String Read FLicense Write FLicense;'#010+ ' Property Directory : String Read FDirectory Write FDirectory;'#010+ - ' Property Description : String Read GetDescription Write FDescripti'+ - 'on;'#010+ + ' Property Description : String Read GetDes','cription Write FDescrip'+ + 'tion;'#010+ ' Property DescriptionFile : String Read FDescriptionFile Write FDes'+ 'criptionFile;'#010+ - ' ','Property InstalledChecksum : Cardinal Read FInstalledChecksum Wr'+ - 'ite FInstalledChecksum;'#010+ - ' Property IsFPMakeAddIn: boolean read FIsFPMakeAddIn write FIsFPMak'+ - 'eAddIn;'#010+ + ' Property InstalledChecksum : Cardinal Read FInstalledChecksum Writ'+ + 'e FInstalledChecksum;'#010+ + ' Property IsFPMakeAddIn: boolean',' read FIsFPMakeAddIn write FIsFPM'+ + 'akeAddIn;'#010+ ' Property SupportBuildModes: TBuildModes read FSupportBuildModes wr'+ - 'ite ','FSupportBuildModes;'#010+ + 'ite FSupportBuildModes;'#010+ ' Property BuildMode: TBuildMode read FBuildMode;'#010+ ' Property Flags: TStrings read FFlags;'#010+ + ' // Op','tions which are passed to the compiler for packages which d'+ + 'epend on'#010+ + ' // this package.'#010+ + ' Property TransmitOptions: TStrings Read GetTransmitOptions Write S'+ + 'etTransmitOptions;'#010+ ' // Compiler options.'#010+ - ' Property OSes : TOSes Read FOSes Write FOSes;'#010+ + ' Property OSes : TOSes Read FOSes ','Write FOSes;'#010+ ' Property CPUs : TCPUs Read FCPUs Write FCPUs;'#010+ - ' ',' Property NeedLibC : Boolean Read FNeedLibC Write FNeedLibC;'#010+ + ' Property NeedLibC : Boolean Read FNeedLibC Write FNeedLibC;'#010+ ' Property Options: TStrings Read GetOptions Write SetOptions;'#010+ - ' Property UnitPath : TConditionalStrings Read FUnitPath;'#010+ - ' Property ObjectPath : TConditionalStrings Read F','ObjectPath;'#010+ + ' Property UnitPath : TConditionalStrings Read',' FUnitPath;'#010+ + ' Property ObjectPath : TConditionalStrings Read FObjectPath;'#010+ ' Property IncludePath : TConditionalStrings Read FIncludePath;'#010+ ' Property SourcePath : TConditionalStrings Read FSourcePath;'#010+ - ' Property ExamplePath : TConditionalStrings Read FExamplePath;'#010+ - ' Property TestPath : TConditi','onalStrings Read FTestPath;'#010+ + ' Property ExamplePath : TCondit','ionalStrings Read FExamplePath;'#010+ + ' Property TestPath : TConditionalStrings Read FTestPath;'#010+ ' Property FPDocFormat: TFPDocFormats read FFPDocFormat write FFPDoc'+ 'Format;'#010+ ' // Targets and dependencies'#010+ - ' Property InstallFiles : TConditionalDestStrings Read FInstallFiles'+ - ';'#010+ - ' Property CleanFiles : TCon','ditionalStrings Read FCleanFiles;'#010+ + ' Property InstallFiles : TCondition','alDestStrings Read FInstallFil'+ + 'es;'#010+ + ' Property CleanFiles : TConditionalStrings Read FCleanFiles;'#010+ ' Property Dependencies : TDependencies Read FDependencies;'#010+ ' Property Commands : TCommands Read FCommands;'#010+ - ' Property State : TTargetState Read FTargetState;'#010+ - ' Property Targets : TTargets Read FTar','gets;'#010+ + ' Property State : TTargetSt','ate Read FTargetState Write FTargetSta'+ + 'te;'#010+ + ' Property Targets : TTargets Read FTargets;'#010+ ' Property Sources : TSources Read FSources;'#010+ ' Property UnitDir : String Read FUnitDir Write FUnitDir;'#010+ - ' Property UnitConfigFileName: String read FUnitConfigFileName write'+ - ' FUnitConfigFileName;'#010+ + ' Property UnitConfigFileName: String read',' FUnitConfigFileName wri'+ + 'te FUnitConfigFileName;'#010+ ' // events'#010+ - ' Property BeforeCo','mpile : TNotifyEvent Read FBeforeCompile Write '+ - 'FBeforeCompile;'#010+ + ' Property BeforeCompile : TNotifyEvent Read FBeforeCompile Write FB'+ + 'eforeCompile;'#010+ ' Property BeforeCompileProc : TNotifyProcEvent Read FBeforeCompileP'+ - 'roc write FBeforeCompileProc;'#010+ + 'roc write FBeforeCompile','Proc;'#010+ ' Property AfterCompile : TNotifyEvent Read FAfterCompile Write FAft'+ - 'erCompi','le;'#010+ + 'erCompile;'#010+ ' Property AfterCompileProc : TNotifyProcEvent Read FAfterCompilePro'+ 'c Write FAfterCompileProc;'#010+ - ' Property BeforeInstall : TNotifyEvent Read FBeforeInstall Write FB'+ - 'eforeInstall;'#010+ - ' Property BeforeInstallProc : TNotifyProcEvent Read ','FBeforeInstal'+ - 'lProc Write FBeforeInstallProc;'#010+ + ' Property BeforeInstall : TNotifyEvent Read FBeforeIn','stall Write '+ + 'FBeforeInstall;'#010+ + ' Property BeforeInstallProc : TNotifyProcEvent Read FBeforeInstallP'+ + 'roc Write FBeforeInstallProc;'#010+ ' Property AfterInstall : TNotifyEvent Read FAfterInstall Write FAft'+ 'erInstall;'#010+ - ' Property AfterInstallProc : TNotifyProcEvent Read FAfterInstallPro'+ - 'c Write FAfterInstallProc;'#010+ - ' Property Befo','reClean : TNotifyEvent Read FBeforeClean Write FBef'+ - 'oreClean;'#010+ + ' Property AfterInstallProc :',' TNotifyProcEvent Read FAfterInstallP'+ + 'roc Write FAfterInstallProc;'#010+ + ' Property BeforeClean : TNotifyEvent Read FBeforeClean Write FBefor'+ + 'eClean;'#010+ ' Property BeforeCleanProc : TNotifyProcEvent Read FBeforeCleanProc '+ 'Write FBeforeCleanProc;'#010+ - ' Property AfterClean : TNotifyEvent Read FAfterClean Write FAfterCl'+ - 'ean;'#010+ - ' Proper','ty AfterCleanProc : TNotifyProcEvent Read FAfterCleanProc '+ - 'Write FAfterCleanProc;'#010+ + ' ',' Property AfterClean : TNotifyEvent Read FAfterClean Write FAfter'+ + 'Clean;'#010+ + ' Property AfterCleanProc : TNotifyProcEvent Read FAfterCleanProc Wr'+ + 'ite FAfterCleanProc;'#010+ ' Property BeforeArchive : TNotifyEvent Read FBeforeArchive Write FB'+ - 'eforeArchive;'#010+ + 'eforeA','rchive;'#010+ ' Property BeforeArchiveProc : TNotifyProcEvent Read FBeforeArchiveP'+ - 'roc W','rite FBeforeArchiveProc;'#010+ + 'roc Write FBeforeArchiveProc;'#010+ ' Property AfterArchive : TNotifyEvent Read FAfterArchive Write FAft'+ 'erArchive;'#010+ - ' Property AfterArchiveProc : TNotifyProcEvent Read FAfterArchivePro'+ - 'c Write FAfterArchiveProc;'#010+ - ' Property BeforeManifest : TNotify','Event Read FBeforeManifest Writ'+ - 'e FBeforeManifest;'#010+ + ' Property AfterArchiveProc : TNotifyProcEvent Re','ad FAfterArchiveP'+ + 'roc Write FAfterArchiveProc;'#010+ + ' Property BeforeManifest : TNotifyEvent Read FBeforeManifest Write '+ + 'FBeforeManifest;'#010+ ' Property BeforeManifestProc : TNotifyProcEvent Read FBeforeManifes'+ 'tProc Write FBeforeManifestProc;'#010+ - ' Property AfterManifest : TNotifyEvent Read FAfterManifest Write FA'+ - 'fterManifest;'#010+ - ' ',' Property AfterManifestProc : TNotifyProcEvent Read FAfterManifes'+ - 'tProc Write FAfterManifestProc;'#010+ - ' Property BeforePkgList : TNotifyEvent Read FBeforePkgList Write FB'+ - 'eforePkgList;'#010+ - ' Property BeforePkgListProc : TNotifyProcEvent Read FBef','orePkgLis'+ - 'tProc Write FBeforePkgListProc;'#010+ + ' ','Property AfterManifest : TNotifyEvent Read FAfterManifest Write '+ + 'FAfterManifest;'#010+ + ' Property AfterManifestProc : TNotifyProcEvent Read FAfterManifestP'+ + 'roc Write FAfterManifestProc;'#010+ + ' Property BeforePkgList : TNotifyEvent Read FBeforePkgLis','t Write '+ + 'FBeforePkgList;'#010+ + ' Property BeforePkgListProc : TNotifyProcEvent Read FBeforePkgListP'+ + 'roc Write FBeforePkgListProc;'#010+ ' Property AfterPkgList : TNotifyEvent Read FAfterPkgList Write FAft'+ 'erPkgList;'#010+ - ' Property AfterPkgListProc : TNotifyProcEvent Read FAfterPkgListPro'+ - 'c Write FAfterPkgListProc;'#010+ + ' Property AfterPkgListProc : TNo','tifyProcEvent Read FAfterPkgListP'+ + 'roc Write FAfterPkgListProc;'#010+ ' end;'#010+ #010+ - ' { TPackages',' }'#010+ + ' { TPackages }'#010+ #010+ ' TPackages = Class(TNamedCollection)'#010+ ' private'#010+ ' function GetPackage(const AName : String): TPackage;'#010+ - ' function GetPackageItem(AIndex : Integer): TPackage;'#010+ + ' function GetPackageItem(AIndex : Integer): T','Package;'#010+ ' procedure SetPackageItem(AIndex : Integer; const AValue: TPackage)'+ ';'#010+ - ' ','Public'#010+ + ' Public'#010+ ' Function AddPackage(Const AName : String) : TPackage;'#010+ ' Property Packages[AName : String] : TPackage Read GetPackage ; Def'+ 'ault;'#010+ - ' Property PackageItems[AIndex : Integer] : TPackage Read GetPackage'+ - 'Item Write SetPackageItem;'#010+ - ' ','end;'#010+ + ' Property Pac','kageItems[AIndex : Integer] : TPackage Read GetPacka'+ + 'geItem Write SetPackageItem;'#010+ + ' end;'#010+ #010+ ' { TCustomDefaults }'#010+ #010+ @@ -1145,173 +1216,184 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' FArchive: String;'#010+ ' FBuildMode: TBuildMode;'#010+ ' FCompiler: String;'#010+ - ' FCopy: String;'#010+ + ' FC','opy: String;'#010+ ' FFPDocOutputDir: String;'#010+ ' FFPUnitSourcePath: String;'#010+ - ' FIgnor','eInvalidOptions: Boolean;'#010+ + ' FIgnoreInvalidOptions: Boolean;'#010+ ' FInstallExamples: Boolean;'#010+ ' FMkDir: String;'#010+ ' FMove: String;'#010+ ' FOptions: TStrings;'#010+ ' FCPU: TCPU;'#010+ ' FOS: TOS;'#010+ - ' FMode : TCompilerMode;'#010+ + ' FMo','de : TCompilerMode;'#010+ ' FCompilerVersion : String;'#010+ ' FPrefix: String;'#010+ - ' FLocalU','nitDir,'#010+ - ' FGlobalUnitDir,'#010+ ' FBaseInstallDir,'#010+ ' FUnitInstallDir,'#010+ ' FUnitConfigFilesInstallDir,'#010+ ' FBinInstallDir,'#010+ + ' FLibInstallDir,'#010+ ' FDocInstallDir,'#010+ - ' FExamplesInstallDir : String;'#010+ + ' FExamplesInstallDir : String;'#010, + ' FSearchPath: TStrings;'#010+ ' FSkipCrossPrograms: boolean;'#010+ ' FThreadsAmount: integer;'#010+ - ' ',' FRemoveTree: String;'#010+ + ' FRemoveTree: String;'#010+ ' FRemoveDir: String;'#010+ ' FRemove: String;'#010+ ' FTarget: String;'#010+ ' FUnixPaths: Boolean;'#010+ ' FNoFPCCfg: Boolean;'#010+ - ' FUseEnvironment: Boolean;'#010+ + ' FUseEnv','ironment: Boolean;'#010+ ' FZipPrefix: String;'#010+ ' FExplicitOSNone: Boolean;'#010+ - ' function GetBu','ildCPU: TCpu;'#010+ + ' function SafeExpandFileName(const AFileName: string): string;'#010+ + ' function GetBuildCPU: TCpu;'#010+ ' function GetBuildOS: TOS;'#010+ ' function GetBuildString: String;'#010+ - ' function GetFPDocOutputDir: String;'#010+ + ' ',' function GetFPDocOutputDir: String;'#010+ ' function GetFPUnitSourcePath: String;'#010+ ' function GetLocalUnitDir: String;'#010+ - ' function GetGlobalUnitDir: String;'#010, + ' function GetGlobalUnitDir: String;'#010+ ' function GetBaseInstallDir: String;'#010+ ' function GetBinInstallDir: String;'#010+ + ' ','function GetLibInstallDir: String;'#010+ ' function GetCompiler: String;'#010+ ' function GetDocInstallDir: String;'#010+ ' function GetExamplesInstallDir: String;'#010+ ' function GetOptions: TStrings;'#010+ - ' funct','ion GetPrefix: String;'#010+ + ' function GetPrefix: String;'#010+ + ' function GetSearc','hPath: TStrings;'#010+ ' function GetUnitInstallDir: String;'#010+ ' function GetUnitConfigFilesInstallDir: String;'#010+ ' procedure SetLocalUnitDir(const AValue: String);'#010+ ' procedure SetGlobalUnitDir(const AValue: String);'#010+ - ' procedure IntSe','tBaseInstallDir(const AValue: String);'#010+ + ' procedure IntSetBaseI','nstallDir(const AValue: String);'#010+ ' procedure SetBaseInstallDir(const AValue: String);'#010+ ' procedure SetCPU(const AValue: TCPU);'#010+ ' procedure SetOptions(const AValue: TStrings);'#010+ ' procedure SetOS(const AValue: TOS);'#010+ - ' procedure ','SetPrefix(const AValue: String);'#010+ + ' procedure SetPre','fix(const AValue: String);'#010+ + ' procedure SetSearchPath(AValue: TStrings);'#010+ ' procedure SetTarget(const AValue: String);'#010+ ' procedure SetUnitInstallDir(const AValue: String);'#010+ - ' procedure SetUnitConfigFilesInstallDir(const AValue: String);'#010+ - ' procedure SetZipPrefix(AValue: Stri','ng);'#010+ + ' procedure SetUnitConfigFilesInstallDir(const AValue: String)',';'#010+ + ' procedure SetZipPrefix(AValue: String);'#010+ ' Protected'#010+ ' procedure RecalcTarget;'#010+ ' Function CmdLineOptions : String;'#010+ ' Public'#010+ ' Constructor Create;'#010+ + ' Destructor Destroy; override;'#010+ ' Procedure InitDefaults;'#010+ - ' Function HaveOptions: Boolean;'#010+ + ' Function HaveOpti','ons: Boolean;'#010+ ' function IsBuildDifferentFromTarget: boolean;'#010+ - ' procedu','re CompilerDefaults; virtual;'#010+ + ' procedure CompilerDefaults; virtual;'#010+ ' Procedure LocalInit(Const AFileName : String);'#010+ ' Procedure LoadFromFile(Const AFileName : String);'#010+ - ' Procedure SaveToFile(Const AFileName : String);'#010+ + ' Procedure SaveToFile(Const',' AFileName : String);'#010+ ' procedure SaveToStream(S : TStream);virtual;'#010+ - ' ','procedure LoadFromStream(S : TStream);virtual;'#010+ + ' procedure LoadFromStream(S : TStream);virtual;'#010+ ' // Compile Information'#010+ ' Property Target : String Read FTarget Write SetTarget;'#010+ - ' Property OS : TOS Read FOS Write SetOS;'#010+ + ' Property OS : TOS Read FOS W','rite SetOS;'#010+ ' Property CPU : TCPU Read FCPU Write SetCPU;'#010+ - ' Property Co','mpilerVersion : String read FCompilerVersion;'#010+ + ' Property CompilerVersion : String read FCompilerVersion;'#010+ ' Property ExplicitOSNone: Boolean read FExplicitOSNone Write FExpli'+ 'citOSNone;'#010+ - ' Property BuildString : String read GetBuildString;'#010+ + ' Property BuildString : String read',' GetBuildString;'#010+ ' Property BuildOS : TOS read GetBuildOS;'#010+ - ' Property B','uildCPU : TCpu read GetBuildCPU;'#010+ + ' Property BuildCPU : TCpu read GetBuildCPU;'#010+ ' Property Mode : TCompilerMode Read FMode Write FMode;'#010+ ' Property UnixPaths : Boolean Read FUnixPaths Write FUnixPaths;'#010+ - ' Property Options : TStrings Read GetOptions Write SetOptions; /'+ - '/ Default co','mpiler options.'#010+ + ' Pro','perty Options : TStrings Read GetOptions Write SetOptions; '+ + ' // Default compiler options.'#010+ ' Property NoFPCCfg : Boolean Read FNoFPCCfg Write FNoFPCCfg;'#010+ ' // When ThreadsAmount is specified, #threadsamount# worker-threads'+ ' are'#010+ - ' // created. When such a worker-thread is ready all worker-threads '+ - 'are evaluated'#010+ - ' ',' // to see if there are idle threads (there is always at least on'+ - 'e such thread.)'#010+ + ' // cre','ated. When such a worker-thread is ready all worker-thread'+ + 's are evaluated'#010+ + ' // to see if there are idle threads (there is always at least one '+ + 'such thread.)'#010+ ' // To each idle thread a package is assigned which has to be compi'+ - 'led for the'#010+ + 'led for the'#010, ' // current target and for which all dependencies are compiled earl'+ - 'ier.'#010, + 'ier.'#010+ ' // When no package is available the thread remains idle until anot'+ 'her thread'#010+ ' // has finished it'#039's task. Compilation stops when all packages'+ ' are compiled'#010+ - ' // or when an error occures.'#010+ + ' ','// or when an error occures.'#010+ ' //'#010+ - ' // When ThreadsAmount is not specif','ied (-1), all packages are co'+ - 'mpiled on by one.'#010+ + ' // When ThreadsAmount is not specified (-1), all packages are comp'+ + 'iled on by one.'#010+ ' // Dependencies are compiled recursively. When a package is alread'+ 'y compiled'#010+ - ' // (because some other package was depending on it) the package is'+ - ' skipped.'#010+ - ' // When the last package in ','the list is compiled, the compilatio'+ - 'n stops.'#010+ + ' // (because some other package wa','s depending on it) the package '+ + 'is skipped.'#010+ + ' // When the last package in the list is compiled, the compilation '+ + 'stops.'#010+ ' Property ThreadsAmount : integer Read FThreadsAmount Write FThread'+ 'sAmount;'#010+ ' // paths etc.'#010+ - ' Property LocalUnitDir : String Read GetLocalUnitDir Write SetLocal'+ - 'UnitDir;'#010+ - ' Property Global','UnitDir : String Read GetGlobalUnitDir Write SetG'+ - 'lobalUnitDir;'#010+ + ' Property LocalUnitD','ir : String Read GetLocalUnitDir Write SetLoc'+ + 'alUnitDir;'#010+ + ' Property GlobalUnitDir : String Read GetGlobalUnitDir Write SetGlo'+ + 'balUnitDir;'#010+ + ' // The SearchPath contains a list of directories in which packages'+ + ' are'#010+ + ' // installed. Packages ','are searched for in order of this list.'#010+ + ' Property SearchPath: TStrings read GetSearchPath write SetSearchPa'+ + 'th;'#010+ ' Property Prefix : String Read GetPrefix Write SetPrefix;'#010+ - ' Property ZipPrefix : String Read FZipPrefix Write SetZipPrefix;'#010+ - ' Property BaseInstallDir : String Read GetBas','eInstallDir Write Se'+ - 'tBaseInstallDir;'#010+ + ' Property ZipPrefix : String Read FZipPrefix Write SetZipPrefi','x;'#010+ + ' Property BaseInstallDir : String Read GetBaseInstallDir Write SetB'+ + 'aseInstallDir;'#010+ ' Property UnitInstallDir : String Read GetUnitInstallDir Write SetU'+ 'nitInstallDir;'#010+ - ' Property UnitConfigFilesInstallDir : String Read GetUnitConfigFile'+ - 'sInstallDir Write SetUnitConfigFilesInstallDir;'#010, + ' Property UnitConfigFilesInstallDir : String Read GetUnitConfigF','i'+ + 'lesInstallDir Write SetUnitConfigFilesInstallDir;'#010+ ' Property BinInstallDir : String Read GetBinInstallDir Write FBinIn'+ 'stallDir;'#010+ - ' Property DocInstallDir : String Read GetDocInstallDir Write FDocIn'+ + ' Property LibInstallDir : String Read GetLibInstallDir Write FLibIn'+ 'stallDir;'#010+ + ' Property DocInstallDir : ','String Read GetDocInstallDir Write FDoc'+ + 'InstallDir;'#010+ ' Property ExamplesInstallDir : String Read GetExamplesInstallDir Wr'+ - 'ite FExamp','lesInstallDir;'#010+ + 'ite FExamplesInstallDir;'#010+ ' Property FPDocOutputDir : String Read GetFPDocOutputDir Write FFPD'+ 'ocOutputDir;'#010+ - ' Property FPUnitSourcePath: String read GetFPUnitSourcePath Write F'+ - 'FPUnitSourcePath;'#010+ - ' // Command tools. If not set, internal commands w','ill be used.'#010+ + ' Propert','y FPUnitSourcePath: String read GetFPUnitSourcePath Write'+ + ' FFPUnitSourcePath;'#010+ + ' // Command tools. If not set, internal commands will be used.'#010+ ' Property Compiler : String Read GetCompiler Write FCompiler; // Co'+ 'mpiler. Defaults to fpc'#010+ - ' Property Copy : String Read FCopy Write FCopy; // copy'+ + ' ',' Property Copy : String Read FCopy Write FCopy; // co'+ + 'py $(FILES) to $(DEST)'#010+ + ' Property Move : String Read FMove Write FMove; // Move'+ ' $(FILES) to $(DEST)'#010+ - ' Property Move : String Read FMove Writ','e FMove; // Mo'+ - 've $(FILES) to $(DEST)'#010+ - ' Property Remove : String Read FRemove Write FRemove; // Dele'+ - 'te $(FILES)'#010+ + ' Property Remove : String Read FRemove Write FRemove; ',' // De'+ + 'lete $(FILES)'#010+ ' Property RemoveDir : String Read FRemoveDir Write FRemoveDir; '+ ' // Delete $(FILES)'#010+ - ' Property Remov','eTree : String Read FRemoveTree Write FRemoveTree;'+ - ' // removes $(DIRECTORY)'#010+ - ' Property MkDir : String Read FMkDir write FMkDir; // Make'+ - ' $(DIRECTORY)'#010+ + ' Property RemoveTree : String Read FRemoveTree Write FRemoveTree; '+ + ' // removes $(DIRECTORY)'#010+ + ' Property MkDir : String ','Read FMkDir write FMkDir; // Ma'+ + 'ke $(DIRECTORY)'#010+ ' Property Archive : String Read FArchive Write FArchive; // zip '+ - '$(ARC','HIVE) $(FILESORDIRS)'#010+ + '$(ARCHIVE) $(FILESORDIRS)'#010+ ' // Misc'#010+ ' Property UseEnvironment : Boolean read FUseEnvironment write FUseE'+ - 'nvironment;'#010+ + 'nviron','ment;'#010+ ' Property IgnoreInvalidOptions: Boolean read FIgnoreInvalidOptions '+ 'write FIgnoreInvalidOptions;'#010+ - ' Property BuildMode: TB','uildMode read FBuildMode write FBuildMode;'+ - #010+ + ' Property BuildMode: TBuildMode read FBuildMode write FBuildMode;'#010+ ' // Installation optioms'#010+ - ' Property InstallExamples: Boolean read FInstallExamples write FIns'+ - 'tallExamples;'#010+ + ' Property InstallExamples: Boolean ','read FInstallExamples write FI'+ + 'nstallExamples;'#010+ ' Property SkipCrossPrograms: boolean read FSkipCrossPrograms write '+ - 'FSkipCrossProgr','ams;'#010+ + 'FSkipCrossPrograms;'#010+ ' end;'#010+ #010+ ' { TBasicDefaults }'#010+ @@ -1321,237 +1403,246 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ ' { TFPCDefaults }'#010+ #010+ - ' TFPCDefaults = Class(TCustomDefaults)'#010+ + ' TF','PCDefaults = Class(TCustomDefaults)'#010+ ' public'#010+ ' procedure CompilerDefaults; override;'#010+ ' end;'#010+ #010+ ' { TBuildEngine }'#010+ - ' TCopyFileProc =',' procedure(const APackage: TPackage; Const ASourceF'+ - 'ileName, ADestFileName : String) of object;'#010+ + ' TCopyFileProc = procedure(const APackage: TPackage; Const ASourceFil'+ + 'eName, ADestFileName : String) of object;'#010+ #010+ - ' TBuildEngine = Class(TComponent)'#010+ + ' TBuildEngin','e = Class(TComponent)'#010+ ' private'#010+ ' // general variables'#010+ ' FCompiler : String;'#010+ ' FStartDir : String;'#010+ - ' FForceCompile : Boolea','n;'#010+ + ' FForceCompile : Boolean;'#010+ ' FListMode : Boolean;'#010+ ' FVerbose : boolean;'#010+ + ' FInteractive : boolean;'#010+ ' FProgressMax : integer;'#010+ - ' FProgressCount : integer;'#010+ + ' ',' FProgressCount : integer;'#010+ ' FExternalPackages : TPackages;'#010+ ' // Events'#010+ ' FOnLog: TLogEvent;'#010+ ' FNotifyEventCollection: TNotifyEventCollection;'#010+ - ' FO','nCopyFile: TCopyFileProc;'#010+ + ' FOnCopyFile: TCopyFileProc;'#010+ ' FOnFinishCopy: TNotifyEvent;'#010+ #010+ - ' FCachedlibcPath: string;'#010+ + ' FCachedlibcPath: ','string;'#010+ ' FGeneralCriticalSection: TRTLCriticalSection;'#010+ '{$ifdef HAS_UNIT_ZIPPER}'#010+ ' FZipper: TZipper;'#010+ ' FGZFileStream: TGZFileStream;'#010+ - '{$endif HAS_UNIT_ZIP','PER}'#010+ + '{$endif HAS_UNIT_ZIPPER}'#010+ '{$ifdef HAS_TAR_SUPPORT}'#010+ ' FTarWriter: TTarWriter;'#010+ - '{$endif HAS_TAR_SUPPORT}'#010+ + '{$endif HAS_TAR_SUPPORT','}'#010+ ' procedure AddFileToArchive(const APackage: TPackage; Const ASource'+ 'FileName, ADestFileName : String);'#010+ ' procedure FinishArchive(Sender: TObject);'#010+ - ' Prot','ected'#010+ + ' Protected'#010+ ' Procedure Error(const Msg : String);'#010+ - ' Procedure Error(const Fmt : String; const Args : Array of const);'#010+ + ' Procedure Error(const Fmt : St','ring; const Args : Array of const)'+ + ';'#010+ ' // Internal copy/delete/move/archive/mkdir files'#010+ ' Function SysDirectoryExists(const ADir:string):Boolean;'#010+ - ' Funct','ion SysFileExists(const AFileName:string):Boolean;'#010+ - ' Procedure SysCopyFile(Const Src,Dest : String); virtual;'#010+ + ' Function SysFileExists(const AFileName:string):Boolean;'#010+ + ' Procedure SysCopyFile(Con','st Src,Dest : String); virtual;'#010+ ' Procedure SysMoveFile(Const Src,Dest : String); virtual;'#010+ ' Procedure SysDeleteFile(Const AFileName : String); virtual;'#010+ - ' ',' Procedure SysDeleteDirectory(Const ADirectoryName : String); vir'+ - 'tual;'#010+ - ' Procedure SysDeleteTree(Const ADirectoryName : String); virtual;'#010+ + ' Procedure SysDeleteDirectory(Const ADirectoryName : String); virtu'+ + 'al;'#010+ + ' Proce','dure SysDeleteTree(Const ADirectoryName : String); virtual;'+ + #010+ ' Procedure SysArchiveFiles(List : TStrings; Const AFileName : Strin'+ 'g); virtual;'#010+ - ' procedure Lo','gIndent;'#010+ + ' procedure LogIndent;'#010+ ' procedure LogUnIndent;'#010+ ' Procedure EnterDir(ADir : String);'#010+ - ' Function GetCompiler : String;'#010+ + ' Fu','nction GetCompiler : String;'#010+ ' Function InstallPackageFiles(APAckage : TPackage; tt : TTargetType'+ - 's; Const Dest : String; Const InstallMode: TInstallMode):Boo','lean;'#010+ + 's; Const Dest : String; Const InstallMode: TInstallMode):Boolean;'#010+ ' Procedure InstallUnitConfigFile(APAckage : TPackage; Const Dest : '+ - 'String);'#010+ + 'Strin','g);'#010+ ' function GetUnitConfigFilesInstallDir(ABaseDir: string): String;'#010+ #010+ ' Function InstallPackageSourceFiles(APAckage : TPackage; stt : TSou'+ - 'rceTypes; ttt :',' TTargetTypes; Const Dest : String; Const InstallMode'+ - ': TInstallMode):Boolean;'#010+ - ' Function FileNewer(const Src,Dest : String) : Boolean;'#010+ + 'rceTypes; ttt : TTargetTypes; Const Dest : String; Const InstallMode: '+ + 'TInstallMode):Boolean;'#010+ + ' ',' Function FileNewer(const Src,Dest : String) : Boolean;'#010+ ' Procedure LogSearchPath(APackage: TPackage;const ASearchPathName:s'+ - 'tring;Path:TConditionalStrings; A','CPU:TCPU;AOS:TOS);'#010+ - ' Function FindFileInPath(APackage: TPackage; Path:TConditionalStrin'+ - 'gs; AFileName:String; var FoundPath:String;ACPU:TCPU;AOS:TOS):Boolean;'+ - #010+ + 'tring;Path:TConditionalStrings; ACPU:TCPU;AOS:TOS);'#010+ + ' Function FindFileInPath(APackage: TPackage; Path:TConditio','nalStr'+ + 'ings; AFileName:String; var FoundPath:String;ACPU:TCPU;AOS:TOS):Boolea'+ + 'n;'#010+ #010+ ' procedure GetDirectoriesFromFilelist(const AFileList, ADirectoryLi'+ - 'st: TStri','ngList);'#010+ + 'st: TStringList);'#010+ ' procedure AddPackageMacrosToDictionary(const APackage: TPackage; A'+ - 'Dictionary: TDictionary);'#010+ + 'Di','ctionary: TDictionary);'#010+ ' //package commands'#010+ ' function GetUnitDir(APackage:TPackage):String;'#010+ ' procedure ResolvePackagePaths(APackage:TPackage);'#010+ - ' pr','ocedure AddDependencyPaths(L: TStrings; DependencyType: TDepen'+ - 'dencyType; ATarget: TTarget);'#010+ + ' procedure AddDependencyPaths(L: TStrings; DependencyType: TDepende'+ + 'ncyType; ATarget:',' TTarget);'#010+ ' procedure AddDependencyUnitPaths(L:TStrings;APackage: TPackage);'#010+ + ' procedure AddDependencyTransmittedOptions(Args: TStrings; APackage'+ + ': TPackage);'#010+ ' Public'#010+ ' Constructor Create(AOwner : TComponent); override;'#010+ - ' destructor ','Destroy;override;'#010+ + ' destructo','r Destroy;override;'#010+ ' function AddPathPrefix(APackage: TPackage; APath: string): string;'+ #010+ #010+ ' property Verbose : boolean read FVerbose write FVerbose;'#010+ - ' Procedure ResolveFileNames(APackage : TPackage; ACPU:TCPU;AOS:TOS;'+ - 'DoChangeDir:boolean','=true; WarnIfNotFound:boolean=true);'#010+ + ' property Interactive : boolean read FInteractive write FInteractiv'+ + 'e;'#010+ + ' Procedure ','ResolveFileNames(APackage : TPackage; ACPU:TCPU;AOS:TO'+ + 'S;DoChangeDir:boolean=true; WarnIfNotFound:boolean=true);'#010+ ' Procedure ClearResolvedFileNames(APackage : TPackage);'#010+ #010+ ' // Public Copy/delete/Move/Archive/Mkdir Commands.'#010+ - ' Procedure ExecuteCommand(const Cmd,Args : String; const Env: TStri'+ - 'ngs = nil; IgnoreE','rror : Boolean = False); virtual;'#010+ + ' Procedure',' ExecuteCommand(const Cmd,Args : String; const Env: TSt'+ + 'rings = nil; IgnoreError : Boolean = False); virtual;'#010+ ' procedure CmdCopyFiles(List: TStrings; const DestDir: String; APac'+ 'kage: TPackage);'#010+ - ' Procedure CmdCreateDir(const DestDir : String);'#010+ - ' Procedure CmdMoveFiles(List : TStrings; Const DestDir : String)',';'+ - #010+ + ' Procedure CmdCreateDir(const DestDir : S','tring);'#010+ + ' Procedure CmdMoveFiles(List : TStrings; Const DestDir : String);'#010+ ' Procedure CmdDeleteFiles(List : TStrings);'#010+ ' procedure CmdDeleteDestFiles(List: TStrings; const DestDir: String'+ ');'#010+ - ' Procedure CmdArchiveFiles(List : TStrings; Const ArchiveFile : Str'+ - 'ing);'#010+ - ' Procedure CmdRenameFile(SourceName, De','stName : String);'#010+ + ' Procedure CmdArchiveFiles(List : TStrin','gs; Const ArchiveFile : S'+ + 'tring);'#010+ + ' Procedure CmdRenameFile(SourceName, DestName : String);'#010+ ' Procedure CmdRemoveDirs(List: TStrings);'#010+ ' Procedure CmdRemoveTrees(List: TStrings);'#010+ - ' Procedure ExecuteCommands(Commands : TCommands; At : TCommandAt; A'+ - 'Package: TPackage = nil);'#010+ + ' Procedure ExecuteCommands(Commands : TCommands; At :',' TCommandAt;'+ + ' APackage: TPackage = nil);'#010+ ' // Dependency commands'#010+ - ' Func','tion DependencyOK(ADependency : TDependency) : Boolean;'#010+ + ' Function DependencyOK(ADependency : TDependency) : Boolean;'#010+ ' // Target commands'#010+ ' Function GetCompilerCommand(APackage : TPackage; ATarget : TTarge'+ - 't; Env: TStrings) : String;'#010+ - ' Function TargetOK(ATarget : TTarget; ACPU: TCPU; AOS: TOS',') : Bo'+ - 'olean;'#010+ + 't; Env: TString','s) : String;'#010+ + ' Function TargetOK(ATarget : TTarget; ACPU: TCPU; AOS: TOS) : Bool'+ + 'ean;'#010+ ' Function TargetInstallOK(ATarget : TTarget;ACPU:TCPU; AOS : TOS) '+ ': Boolean;'#010+ ' Function NeedsCompile(APackage:TPackage; ATarget : TTarget) : Boo'+ - 'lean;'#010+ - ' Procedure Compile(APackage:TPackage; ATarget : TTarget); virtual;', + 'l','ean;'#010+ + ' Procedure Compile(APackage:TPackage; ATarget : TTarget); virtual;'+ #010+ ' Procedure MaybeCompile(APackage:TPackage; ATarget: TTarget);'#010+ ' Procedure CompileDependencies(APackage:TPackage; ATarget: TTarget)'+ ';'#010+ ' // Package commands'#010+ - '{ Function GetPackageDir(APackage : TPackage; AbsolutePath : Boole'+ - 'an = Fal','se) : String;'#010+ + '{ ',' Function GetPackageDir(APackage : TPackage; AbsolutePath : Boo'+ + 'lean = False) : String;'#010+ ' Function GetUnitsOutputDir(APackage : TPackage; AbsolutePath : Bo'+ 'olean = False) : String;'#010+ - ' Function GetBinOutputDir(APackage : TPackage; AbsolutePath : Bool'+ - 'ean = False) : String; }'#010+ - ' Function PackageOK(APackage : ','TPackage) : Boolean; virtual;'#010+ + ' Function GetBinOutputDir(APackage : TPackage; Absol','utePath : Bo'+ + 'olean = False) : String; }'#010+ + ' Function PackageOK(APackage : TPackage) : Boolean; virtual;'#010+ ' Procedure DoBeforeCompile(APackage : TPackage);virtual;'#010+ ' Procedure DoAfterCompile(APackage : TPackage);virtual;'#010+ - ' Procedure DoBeforeInstall(APackage : TPackage);virtual;'#010+ - ' Procedure DoAfterInstall(AP','ackage : TPackage);virtual;'#010+ + ' Procedure Do','BeforeInstall(APackage : TPackage);virtual;'#010+ + ' Procedure DoAfterInstall(APackage : TPackage);virtual;'#010+ ' Procedure DoBeforeArchive(APackage : TPackage);virtual;'#010+ ' Procedure DoAfterArchive(APackage : TPackage);virtual;'#010+ - ' Procedure DoBeforeClean(APackage : TPackage);virtual;'#010+ - ' Procedure DoAfterClean(APackage',' : TPackage);virtual;'#010+ + ' Procedure DoBe','foreClean(APackage : TPackage);virtual;'#010+ + ' Procedure DoAfterClean(APackage : TPackage);virtual;'#010+ ' Function NeedsCompile(APackage : TPackage) : Boolean; virtual;'#010+ ' Procedure Compile(APackage : TPackage);'#010+ - ' Procedure MaybeCompile(APackage:TPackage);'#010+ + ' Procedure MaybeCompile(APac','kage:TPackage);'#010+ ' Function ReadyToCompile(APackage:TPackage) : Boolean;'#010+ - ' ',' Procedure Install(APackage : TPackage; AnArchiveFiles: boolean);'+ - #010+ + ' Procedure Install(APackage : TPackage; AnArchiveFiles: boolean);'#010+ ' Procedure UnInstall(APackage : TPackage);'#010+ ' Procedure Archive(APackage : TPackage);'#010+ - ' Procedure PkgList(PkgList: TStrings; APackage : TPackage);'#010+ - ' Procedure Clean','(APackage : TPackage; AllTargets: boolean);'#010+ + ' Pro','cedure PkgList(PkgList: TStrings; APackage : TPackage);'#010+ + ' Procedure Clean(APackage : TPackage; AllTargets: boolean);'#010+ ' Procedure Clean(APackage : TPackage; ACPU:TCPU; AOS : TOS);'#010+ ' Procedure CompileDependencies(APackage : TPackage);'#010+ - ' function CheckDependencies(APackage : TPackage; ErrorOnFailure: bo'+ - 'olean)',': TCheckDependencyResult;'#010+ + ' ',' function CheckDependencies(APackage : TPackage; ErrorOnFailure: '+ + 'boolean): TCheckDependencyResult;'#010+ ' Function CheckExternalPackage(Const APackageName : String; ErrorO'+ 'nFailure: boolean):TPackage;'#010+ - ' procedure CreateOutputDir(APackage: TPackage);'#010+ + ' procedure CreateOutputDir(APackage: ','TPackage);'#010+ ' // Packages commands'#010+ - ' Procedure Compile(Packages : TPacka','ges);'#010+ + ' Procedure Compile(Packages : TPackages);'#010+ ' Procedure Install(Packages : TPackages);'#010+ ' Procedure UnInstall(Packages : TPackages);'#010+ ' Procedure ZipInstall(Packages : TPackages);'#010+ - ' Procedure Archive(Packages : TPackages);'#010+ - ' procedure Manifest(Packages: TPackages; Packa','ge: TPackage);'#010+ + ' Procedure Archi','ve(Packages : TPackages);'#010+ + ' procedure Manifest(Packages: TPackages; Package: TPackage);'#010+ ' procedure PkgList(Packages: TPackages);'#010+ ' Procedure Clean(Packages : TPackages; AllTargets: boolean);'#010+ #010+ - ' Procedure Log(Level : TVerboseLevel; Msg : String);'#010+ - ' Procedure Log(Level : TVerboseLevel; Fmt : String; const',' Args : '+ - 'Array Of Const);'#010+ + ' Procedure Log(Level : TVerboseLevel; ','Msg : String);'#010+ + ' Procedure Log(Level : TVerboseLevel; Fmt : String; const Args : Ar'+ + 'ray Of Const);'#010+ #010+ ' Property ListMode : Boolean Read FListMode Write FListMode;'#010+ ' Property ForceCompile : Boolean Read FForceCompile Write FForceCom'+ - 'pile;'#010+ + 'pile;',#010+ ' Property ExternalPackages: TPackages Read FExternalPackages;'#010+ - ' Prope','rty StartDir: String Read FStartDir;'#010+ + ' Property StartDir: String Read FStartDir;'#010+ ' // Events'#010+ ' Property NotifyEventCollection: TNotifyEventCollection read FNotif'+ 'yEventCollection;'#010+ - ' Property OnLog : TLogEvent Read FOnLog Write FOnlog;'#010+ + ' Property OnLog : TLogE','vent Read FOnLog Write FOnlog;'#010+ ' end;'#010+ #010+ ' { TCustomInstaller }'#010+ #010+ - ' TCustomIns','taller = Class(TComponent)'#010+ + ' TCustomInstaller = Class(TComponent)'#010+ ' private'#010+ ' FBuildEngine: TBuildEngine;'#010+ ' FPackages: TPackages;'#010+ ' FRunMode: TRunMode;'#010+ ' FListMode : Boolean;'#010+ + ' FInteractive : bo','olean;'#010+ ' FLogLevels : TVerboseLevels;'#010+ ' FFPMakeOptionsString: string;'#010+ - ' FPackageVariantSettings: ','TStrings;'#010+ + ' FPackageVariantSettings: TStrings;'#010+ ' FPackageVariants: TFPList;'#010+ ' FNotifyEventCollection: TNotifyEventCollection;'#010+ ' Protected'#010+ - ' Procedure Log(Level : TVerboseLevel; Const Msg : String);'#010+ + ' Procedure Log(Level : TVerbo','seLevel; Const Msg : String);'#010+ ' Procedure CreatePackages; virtual;'#010+ - ' Procedure FreePackages; virtua','l;'#010+ + ' Procedure FreePackages; virtual;'#010+ ' function GetPackages: TPackages; virtual;'#010+ ' Procedure CheckPackages; virtual;'#010+ ' Procedure CreateBuildEngine; virtual;'#010+ - ' Procedure Error(const Msg : String);'#010+ + ' Proc','edure Error(const Msg : String);'#010+ ' Procedure Error(const Fmt : String; Args : Array of const);'#010+ - ' Pr','ocedure AnalyzeOptions;'#010+ + ' Procedure AnalyzeOptions;'#010+ ' Procedure Usage(const FMT : String; Args : Array of const);'#010+ - ' Procedure Compile(Force : Boolean); virtual;'#010+ + ' Procedure Compile(Force : Boolean); virtual;'#010, ' Procedure Clean(AllTargets: boolean); virtual;'#010+ ' Procedure Install; virtual;'#010+ - ' Procedure UnInst','all; virtual;'#010+ + ' Procedure UnInstall; virtual;'#010+ ' Procedure ZipInstall; virtual;'#010+ ' Procedure Archive; virtual;'#010+ ' Procedure Manifest; virtual;'#010+ - ' Procedure PkgList; virtual;'#010+ + ' Procedure PkgList; ','virtual;'#010+ + ' Procedure Info;'#010+ + ' procedure AddAutoPackageVariantsToPackage(APackage: TPackage); vir'+ + 'tual;'#010+ ' Public'#010+ ' Constructor Create(AOwner : TComponent); virtual;'#010+ - ' Destructor destroy; overrid','e;'#010+ - ' Function AddPackage(Const AName : String) : TPackage;'#010+ - ' Function AddPackageVariant(AName: string; AIsInheritable: boolean'+ - '): TPackageVariants;'#010+ + ' Destructor destroy; override;'#010+ + ' Function AddPackage(Const AName : ','String) : TPackage;'#010+ + ' Function AddPackageVariant(AName: string; AIsInheritable: boolean;'+ + ' AutoAddToPackage: Boolean = false): TPackageVariants;'#010+ ' Function Run : Boolean;'#010+ - ' Property FPMakeOptionsString: string read FFPMakeOptions','String;'#010+ + ' Property FPMakeOptionsString: string read FFPMakeOptionsString;',#010+ ' Property BuildEngine : TBuildEngine Read FBuildEngine;'#010+ ' //files in package'#010+ ' Property Packages : TPackages Read GetPackages;'#010+ ' Property RunMode : TRunMode Read FRunMode;'#010+ ' Property ListMode : Boolean Read FListMode;'#010+ - ' ',' Property NotifyEventCollection : TNotifyEventCollection read FNo'+ + ' Proper','ty NotifyEventCollection : TNotifyEventCollection read FNo'+ 'tifyEventCollection;'#010+ ' end;'#010+ #010+ @@ -1561,7 +1652,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Constructor Create(AOwner : TComponent); override;'#010+ ' end;'#010+ #010+ - ' { TBasicIn','staller }'#010+ + ' { TBasicInstaller',' }'#010+ ' TBasicInstaller = class(TCustomInstaller)'#010+ ' Constructor Create(AOwner : TComponent); override;'#010+ ' end;'#010+ @@ -1573,7 +1664,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Constructor Create(AValue : String);'#010+ ' end;'#010+ #010+ - ' { T','FunctionItem }'#010+ + ' { TFunctio','nItem }'#010+ #010+ ' TFunctionItem = Class(TObject)'#010+ ' FFunc : TReplaceFunction;'#010+ @@ -1586,7 +1677,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ ' TCompileWorkerThread = class(TThread)'#010+ ' private'#010+ - ' ',' FBuildEngine: TBuildEngine;'#010+ + ' FBui','ldEngine: TBuildEngine;'#010+ ' FCompilationOK: boolean;'#010+ ' FDone: boolean;'#010+ ' FErrorMessage: string;'#010+ @@ -1594,12 +1685,12 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' FNotifyStartTask: PRTLEvent;'#010+ ' FPackage: TPackage;'#010+ ' protected'#010+ - ' procedure execute; ov','erride;'#010+ + ' procedure execute; override;',#010+ ' property Done: boolean read FDone;'#010+ ' property APackage: TPackage read FPackage write FPackage;'#010+ ' property CompilationOK: boolean read FCompilationOK;'#010+ ' property NotifyStartTask: PRTLEvent read FNotifyStartTask;'#010+ - ' propert','y ErrorMessage: string read FErrorMessage;'#010+ + ' property Error','Message: string read FErrorMessage;'#010+ ' public'#010+ ' constructor Create(ABuildEngine: TBuildEngine; NotifyMainThreadEve'+ 'nt: PRTLEvent); virtual;'#010+ @@ -1608,15 +1699,65 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ '{$endif NO_THREADING}'#010+ #010+ - ' ECollectionError = Class(E','xception);'#010+ + ' { TfpmPlugin }'#010+ + #010+ + ' TfpmPlugin = cl','ass'#010+ + ' protected'#010+ + ' function GetName: string; virtual;'#010+ + ' public'#010+ + ' property Name: string read GetName;'#010+ + #010+ + ' procedure BeforeResolvePackagePath(ABuildEngine: TBuildEngine; APa'+ + 'ckage: TPackage; out AContinue: Boolean); virtual;'#010+ + ' procedure ','ResolvePackagePath(ABuildEngine: TBuildEngine; APackag'+ + 'e: TPackage; SearchDirectory: string; out AContinue: Boolean); virtual'+ + ';'#010+ + ' procedure AfterResolvePackagePath(ABuildEngine: TBuildEngine; APac'+ + 'kage: TPackage; out AContinue: Boolean); vir','tual;'#010+ + ' end;'#010+ + ' TfpmPluginClass = class of TfpmPlugin;'#010+ + #010+ + ' { TfpmPluginManager }'#010+ + #010+ + ' TfpmPluginManager = class(TfpmPlugin)'#010+ + ' private'#010+ + ' FPlugins: array of TfpmPlugin;'#010+ + ' public'#010+ + ' destructor Destroy; override;'#010+ + ' procedure RegisterPlugin(APl','ugin: TfpmPluginClass);'#010+ + #010+ + ' procedure BeforeResolvePackagePath(ABuildEngine: TBuildEngine; APa'+ + 'ckage: TPackage; out AContinue: Boolean); override;'#010+ + ' procedure ResolvePackagePath(ABuildEngine: TBuildEngine; APackage:'+ + ' TPackage; SearchPath: ','string; out AContinue: Boolean); override;'#010+ + ' procedure AfterResolvePackagePath(ABuildEngine: TBuildEngine; APac'+ + 'kage: TPackage; out AContinue: Boolean); override;'#010+ + ' end;'#010+ + #010+ + ' { TfpmResolvePackagePathsPlugin }'#010+ + #010+ + ' TfpmResolvePackagePathsPlugin',' = class(TfpmPlugin)'#010+ + ' private'#010+ + ' procedure ResolveUnitConfigFilenameForBasePath(ABuildEngine: TBuil'+ + 'dEngine; APackage: TPackage; ABasePath: string;'#010+ + ' out AContinue: Boolean);'#010+ + ' public'#010+ + ' procedure BeforeResolvePackagePath(ABuildEngine',': TBuildEngine; A'+ + 'Package: TPackage; out AContinue: Boolean); override;'#010+ + ' procedure ResolvePackagePath(ABuildEngine: TBuildEngine; APackage:'+ + ' TPackage; SearchPath: string;'#010+ + ' out AContinue: Boolean); override;'#010+ + ' end;'#010+ + #010+ + ' ECollectionError ','= Class(Exception);'#010+ ' EDictionaryError = Class(Exception);'#010+ ' EInstallerError = Class(Exception);'#010+ #010+ ' TInstallerClass = Class of TCustomInstaller;'#010+ ' TDictionaryClass = Class of TDictionary;'#010+ - ' TPackageDictionaryClass = Class of TPackageDictionary;'#010+ + ' TPackageDictionaryClass = Class of TPackageDiction','ary;'#010+ #010+ - 'Typ','e'#010+ + 'Type'#010+ ' TArchiveEvent = Procedure (Const AFileName : String; List : TStrings'+ ') of Object;'#010+ ' TArchiveProc = Procedure (Const AFileName : String; List : TStrings)'+ @@ -1624,7 +1765,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'Var'#010+ ' DictionaryClass : TDictionaryClass = TDictionary;'#010+ - ' PackageDictionaryClass :',' TPackageDictionaryClass = TPackageDiction'+ + ' PackageDictiona','ryClass : TPackageDictionaryClass = TPackageDiction'+ 'ary;'#010+ ' OnArchiveFiles : TArchiveEvent = Nil;'#010+ ' ArchiveFilesProc : TArchiveProc = Nil;'#010+ @@ -1633,7 +1774,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' GlobalDictionary : TDictionary;'#010+ #010+ #010+ - 'Function CurrentOS : Str','ing;'#010+ + 'Function Curren','tOS : String;'#010+ 'Function CurrentCPU : String;'#010+ #010+ 'Function Installer(InstallerClass: TInstallerClass) : TCustomInstaller'+ @@ -1641,38 +1782,42 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'Function Installer : TCustomInstaller; overload;'#010+ #010+ 'Function OSToString(OS: TOS) : String;'#010+ - 'Function OSesToString(OSes: TOSes',') : String;'#010+ + 'Function OSesToString(OS','es: TOSes) : String;'#010+ 'Function CPUToString(CPU: TCPU) : String;'#010+ 'Function CPUSToString(CPUS: TCPUS) : String;'#010+ 'Function StringToOS(const S : String) : TOS;'#010+ 'function IsDifferentFromBuild(ACpu: TCPU; AOs: TOs): boolean;'#010+ - '//Function StringToOSes(const S : ','String) : TOSes;'#010+ + '//Function StringToOSes(c','onst S : String) : TOSes;'#010+ 'Function StringToCPU(const S : String) : TCPU;'#010+ 'Function StringToCPUS(const S : String) : TCPUS;'#010+ 'Function ModeToString(Mode: TCompilerMode) : String;'#010+ 'Function StringToMode(const S : String) : TCompilerMode;'#010+ - 'Function MakeTarg','etString(CPU : TCPU;OS: TOS) : String;'#010+ + 'Function',' MakeTargetString(CPU : TCPU;OS: TOS) : String;'#010+ 'Procedure StringToCPUOS(const S : String; Var CPU : TCPU; Var OS: TOS)'+ ';'#010+ 'Function FixPath (const APath : String) : String; inline; deprecated '#039+ 'Use the overload with AIsDir instead'#039';'#010+ - 'Function FixPath (co','nst APath : String; AIsDir : Boolean) : String;'#010+ + 'Function Fi','xPath (const APath : String; AIsDir : Boolean) : String;'#010+ 'Function IsRelativePath(const APath : String) : boolean;'#010+ 'Procedure ChangeDir(const APath : String);'#010+ 'Procedure SplitCommand(Const Cmd : String; Var Exe,Options : String);'#010+ - 'Procedure AddCustomFpm','akeCommandlineOption(const ACommandLineOption,'+ + 'Procedure Add','CustomFpmakeCommandlineOption(const ACommandLineOption,'+ ' HelpMessage : string);'#010+ 'Function GetCustomFpmakeCommandlineOptionValue(const ACommandLineOptio'+ 'n : string) : string;'#010+ - 'Function AddProgramExtension(const ExecutableName: string; AOS : TOS) '+ - ': string',';'#010+ + 'Function AddProgramExtension(const ExecutableName: string; AOS : TOS)', + ' : string;'#010+ + 'Function AddLibraryExtension(const LibraryName: string; AOS : TOS) : s'+ + 'tring;'#010+ 'Function GetImportLibraryFilename(const UnitName: string; AOS : TOS) :'+ ' string;'#010+ #010+ 'procedure SearchFiles(AFileName, ASearchPathPrefix: string; Recursive:'+ - ' boolean; var List: TStrings);'#010+ - 'function GetDefaultLibGCCDir(CPU : TCPU;OS: TOS; var Erro','rMessage: s'+ - 'tring): string;'#010+ + ' b','oolean; var List: TStrings);'#010+ + 'function GetDefaultLibGCCDir(CPU : TCPU;OS: TOS; var ErrorMessage: str'+ + 'ing): string;'#010+ + #010+ + 'function GetPluginManager: TfpmPluginManager;'#010+ #010+ 'Implementation'#010+ #010+ @@ -1680,15 +1825,19 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'const'#010+ '{$ifdef CREATE_TAR_FILE}'#010+ - ' {$ifdef HAS_UNIT_ZIPPER}'#010+ + ' {$if','def HAS_UNIT_ZIPPER}'#010+ ' ArchiveExtension = '#039'.tar.gz'#039';'#010+ ' {$else }'#010+ ' ArchiveExtension = '#039'.tar'#039';'#010+ ' {$endif HAS_UNIT_ZIPPER}'#010+ - '{$else CREATE','_TAR_FILE}'#010+ + '{$else CREATE_TAR_FILE}'#010+ ' ArchiveExtension = '#039'.zip'#039';'#010+ '{$endif CREATE_TAR_FILE}'#010+ #010+ + 'var'#010+ + ' GPluginManager: TfpmPluginManager;'#010, + #010+ + #010+ '{----------------- from strutils ---------------------}'#010+ #010+ 'function FindPart(const HelpWilds, inputStr: string): Integer;'#010+ @@ -1696,19 +1845,19 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' i, J: Integer;'#010+ ' Diff: Integer;'#010+ 'begin'#010+ - ' Result:=','0;'#010+ + ' Result:=0;'#010+ ' i:=Pos('#039'?'#039',HelpWilds);'#010+ ' if (i=0) then'#010+ - ' Result:=Pos(HelpWilds, inputStr)'#010+ + ' Result:=Pos(Help','Wilds, inputStr)'#010+ ' else'#010+ ' begin'#010+ ' Diff:=Length(inputStr) - Length(HelpWilds);'#010+ ' for i:=0 to Diff do'#010+ ' begin'#010+ ' for J:=1 to Length(HelpWilds) do'#010+ - ' if (inputSt','r[i + J] = HelpWilds[J]) or (HelpWilds[J] = '#039'?'+ - #039') then'#010+ - ' begin'#010+ + ' if (inputStr[i + J] = HelpWilds[J]) or (HelpWilds[J] = '#039'?'#039+ + ') then'#010+ + ' ','begin'#010+ ' if (J=Length(HelpWilds)) then'#010+ ' begin'#010+ ' Result:=i+1;'#010+ @@ -1717,12 +1866,12 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' end'#010+ ' else'#010+ ' Break;'#010+ - ' en','d;'#010+ + ' end;'#010+ ' end;'#010+ 'end;'#010+ #010+ - 'function isWild(inputStr, Wilds: string; ignoreCase: Boolean): Boolean'+ - ';'#010+ + 'function isWild(inputStr, Wilds: string; ignor','eCase: Boolean): Boole'+ + 'an;'#010+ #010+ ' function SearchNext(var Wilds: string): Integer;'#010+ #010+ @@ -1730,37 +1879,37 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Result:=Pos('#039'*'#039', Wilds);'#010+ ' if Result>0 then'#010+ ' Wilds:=Copy(Wilds,1,Result - 1);'#010+ - ' end;',#010+ + ' end;'#010+ #010+ 'var'#010+ ' CWild, CinputWord: Integer; { counter for positions }'#010+ - ' i, LenHelpWilds: Integer;'#010+ + ' ','i, LenHelpWilds: Integer;'#010+ ' MaxinputWord, MaxWilds: Integer; { Length of inputStr and Wilds }'#010+ ' HelpWilds: string;'#010+ 'begin'#010+ ' if Wilds = inputStr then begin'#010+ ' Result:=True;'#010+ - ' ','Exit;'#010+ + ' Exit;'#010+ ' end;'#010+ ' repeat { delete '#039'**'#039', because '#039'**'#039' = '#039'*'#039' }'#010+ - ' i:=Pos('#039'**'#039', Wilds);'#010+ + ' i:','=Pos('#039'**'#039', Wilds);'#010+ ' if i > 0 then'#010+ ' Wilds:=Copy(Wilds, 1, i - 1) + '#039'*'#039' + Copy(Wilds, i + 2, '+ 'Maxint);'#010+ ' until i = 0;'#010+ - ' if Wilds = '#039'*'#039' then begin { for fast end, if Wilds ','only '#039+ + ' if Wilds = '#039'*'#039' then begin { for fast end, if Wilds only '#039+ '*'#039' }'#010+ ' Result:=True;'#010+ ' Exit;'#010+ ' end;'#010+ - ' MaxinputWord:=Length(inputStr);'#010+ + ' MaxinputWord:=Le','ngth(inputStr);'#010+ ' MaxWilds:=Length(Wilds);'#010+ ' if ignoreCase then begin { upcase all letters }'#010+ ' inputStr:=AnsiUpperCase(inputStr);'#010+ ' Wilds:=AnsiUpperCase(Wilds);'#010+ ' end;'#010+ - ' if',' (MaxWilds = 0) or (MaxinputWord = 0) then begin'#010+ - ' Result:=False;'#010+ + ' if (MaxWilds = 0) or (MaxinputWord = 0) then begin'#010+ + ' Result:=Fal','se;'#010+ ' Exit;'#010+ ' end;'#010+ ' CinputWord:=1;'#010+ @@ -1770,32 +1919,32 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' if inputStr[CinputWord] = Wilds[CWild] then begin { equal letters '+ '}'#010+ ' { goto next letter }'#010+ - ' ',' inc(CWild);'#010+ + ' inc(CWild);'#010+ ' inc(CinputWord);'#010+ ' Continue;'#010+ - ' end;'#010+ + ' end;'#010, ' if Wilds[CWild] = '#039'?'#039' then begin { equal to '#039'?'#039' }'#010+ ' { goto next letter }'#010+ ' inc(CWild);'#010+ ' inc(CinputWord);'#010+ ' Continue;'#010+ ' end;'#010+ - ' if Wilds[CWild] = '#039'*'#039' the','n begin { handling of '#039'*'#039+ - ' }'#010+ - ' HelpWilds:=Copy(Wilds, CWild + 1, MaxWilds);'#010+ + ' if Wilds[CWild] = '#039'*'#039' then begin { handling of '#039'*'#039' '+ + '}'#010+ + ' HelpWilds:=Copy(Wilds, CWild +',' 1, MaxWilds);'#010+ ' i:=SearchNext(HelpWilds);'#010+ ' LenHelpWilds:=Length(HelpWilds);'#010+ ' if i = 0 then begin'#010+ ' { no '#039'*'#039' in the rest, compare the ends }'#010+ - ' if Help','Wilds = '#039#039' then Exit; { '#039'*'#039' is the last'+ - ' letter }'#010+ - ' { check the rest for equal Length and no '#039'?'#039' }'#010+ + ' if HelpWilds = '#039#039' then Exit; { '#039'*'#039' is the last l'+ + 'etter }'#010+ + ' { check',' the rest for equal Length and no '#039'?'#039' }'#010+ ' for i:=0 to LenHelpWilds - 1 do begin'#010+ ' if (HelpWilds[LenHelpWilds - i] <> inputStr[MaxinputWord - i'+ ']) and'#010+ - ' (','HelpWilds[LenHelpWilds - i]<> '#039'?'#039') then'#010+ + ' (HelpWilds[LenHelpWilds - i]<> '#039'?'#039') then'#010+ ' begin'#010+ - ' Result:=False;'#010+ + ' ',' Result:=False;'#010+ ' Exit;'#010+ ' end;'#010+ ' end;'#010+ @@ -1803,8 +1952,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' end;'#010+ ' { handle all to the next '#039'*'#039' }'#010+ ' inc(CWild, 1 + LenHelpWilds);'#010+ - ' i:=Find','Part(HelpWilds, Copy(inputStr, CinputWord, Maxint));'#010+ - ' if i= 0 then begin'#010+ + ' i:=FindPart(HelpWilds, Copy(inputStr, CinputWord, Maxint));'#010+ + ' if i=',' 0 then begin'#010+ ' Result:=False;'#010+ ' Exit;'#010+ ' end;'#010+ @@ -1813,8 +1962,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' end;'#010+ ' Result:=False;'#010+ ' Exit;'#010+ - ' until (CinputWord > Ma','xinputWord) or (CWild > MaxWilds);'#010+ - ' { no completed evaluation }'#010+ + ' until (CinputWord > MaxinputWord) or (CWild > MaxWilds);'#010+ + ' { no completed evaluation }',#010+ ' if CinputWord <= MaxinputWord then Result:=False;'#010+ ' if (CWild <= MaxWilds) and (Wilds[MaxWilds] <> '#039'*'#039') then Res'+ 'ult:=False;'#010+ @@ -1822,9 +1971,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ #010+ 'type'#010+ - ' TUnsortedDuplicatesStringList = cla','ss(TStringList)'#010+ + ' TUnsortedDuplicatesStringList = class(TStringList)'#010+ ' public'#010+ - ' function Add(const S: string): Integer; override;'#010+ + ' function Add(const S: string): Inte','ger; override;'#010+ ' end;'#010+ #010+ 'var'#010+ @@ -1835,279 +1984,310 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'var'#010+ '{$else NO_THREADING}'#010+ 'threadvar'#010+ - '{$en','dif NO_THREADING}'#010+ + '{$endif NO_THREADING}'#010+ ' GPathPrefix : string;'#010+ - ' GLogPrefix : string;'#010+ + ' GLogPrefix : string',';'#010+ #010+ 'ResourceString'#010+ ' SErrInvalidCPU = '#039'Invalid CPU name "%s"'#039';'#010+ ' SErrInvalidOS = '#039'Invalid OS name "%s"'#039';'#010+ ' SErrInvalidMode = '#039'Invalid compiler mode "%s"'#039';'#010+ - ' ',' SErrInvalidTarget = '#039'Invalid compiler target "%s"'#039';'#010+ - ' SErrNameExists = '#039'Name "%s" already exists in the collect'+ - 'ion.'#039';'#010+ + ' SErrInvalidTarget = '#039'Invalid compiler target "%s"'#039';'#010+ + ' SErrN','ameExists = '#039'Name "%s" already exists in the colle'+ + 'ction.'#039';'#010+ ' SErrNoSuchName = '#039'Could not find item with name "%s" in t'+ 'he collection.'#039';'#010+ - ' SErrInValidArgument = '#039,'Invalid command-line argument at posit'+ - 'ion %d: %s'#039';'#010+ - ' SErrNeedArgument = '#039'Option at position %d (%s) needs an arg'+ - 'ument'#039';'#010+ + ' SErrInValidArgument = '#039'Invalid command-line argument at positi'+ + 'on %d: %s'#039';'#010+ + ' SErrNeedArg','ument = '#039'Option at position %d (%s) needs an a'+ + 'rgument'#039';'#010+ ' SErrNoPackagesDefined = '#039'No action possible: No packages were de'+ 'fined.'#039';'#010+ - ' SErrInstaller = '#039'The installer',' encountered the followi'+ - 'ng error:'#039';'#010+ - ' SErrDepUnknownTarget = '#039'Unknown target for unit "%s" in depende'+ - 'ncies for %s in package %s'#039';'#010+ + ' SErrInstaller = '#039'The installer encountered the following'+ + ' error:'#039';'#010+ + ' SErrDepUnknownTarget = '#039'U','nknown target for unit "%s" in depen'+ + 'dencies for %s in package %s'#039';'#010+ ' SErrExternalCommandFailed = '#039'External command "%s" failed with e'+ - 'xit code %d. Console output:'#039'+LineEnding+'#039'%','s'#039';'#010+ - ' SErrExtCommandNotFound= '#039'External command "%s" not found'#039';'#010+ + 'xit code %d. Console output:'#039'+LineEnding+'#039'%s'#039';'#010+ + ' SErrExtCommandNotFound= '#039'External command "%s" not found'#039';',#010+ ' SErrCreatingDirectory = '#039'Failed to create directory "%s"'#039';'#010+ ' SErrDeletingFile = '#039'Failed to delete file "%s"'#039';'#010+ - ' SErrRemovingDirectory = '#039'Failed to remove directory "%s"',#039';'#010+ - ' SErrMovingFile = '#039'Failed to move file "%s" to "%s"'#039';'#010+ + ' SErrRemovingDirectory = '#039'Failed to remove directory "%s"'#039';'#010+ + ' SErrMovingFile = '#039'Failed to move file "%s" to "%s"'#039';', + #010+ ' SErrCopyingFile = '#039'Failed to copy file "%s" to "%s"'#039';'#010+ ' SErrChangeDirFailed = '#039'Failed to enter directory "%s"'#039';'#010+ - ' SErrInvalidArgumentToSubstitute = '#039'Invalid number o','f arguments'+ - ' to Substitute'#039';'#010+ - ' SErrNoArchiveSupport = '#039'This binary contains no archive support'+ - '. Please recompile with archive support'#039';'#010+ + ' SErrInvalidArgumentToSubstitute = '#039'Invalid number of arguments t'+ + 'o Substitute'#039';'#010+ + ' SErrNoArchiveSupport = '#039'This bina','ry contains no archive suppo'+ + 'rt. Please recompile with archive support'#039';'#010+ ' SErrNoDictionaryItem = '#039'No item called "%s" in the dictionary'#039+ ';'#010+ - ' SErrNoDictionaryValue = '#039'The item "','%s" in the dictionary is no'+ - 't a value'#039';'#010+ - ' SErrNoDictionaryFunc = '#039'The item "%s" in the dictionary is not '+ - 'a function'#039';'#010+ + ' SErrNoDictionaryValue = '#039'The item "%s" in the dictionary is not '+ + 'a value'#039';'#010+ + ' SErrNoDictionaryFunc =',' '#039'The item "%s" in the dictionary is no'+ + 't a function'#039';'#010+ ' SErrInvalidFPCInfo = '#039'Compiler returns invalid information, c'+ 'heck if fpc -iV works'#039';'#010+ - ' SErrDependencyNotFound = '#039'Coul','d not find unit directory for de'+ - 'pendency package "%s"'#039';'#010+ - ' SErrAlreadyInitialized = '#039'Installer can only be initialized once'+ - #039';'#010+ + ' SErrDependencyNotFound = '#039'Could not find unit directory for depe'+ + 'ndency package "%s"'#039';'#010+ + ' SErrAl','readyInitialized = '#039'Installer can only be initialized on'+ + 'ce'#039';'#010+ ' SErrInvalidState = '#039'Invalid state for target %s'#039';'#010+ - ' SErrCouldNotCompile = '#039'Could not compile target %s fro','m pack'+ - 'age %s'#039';'#010+ - ' SErrUnsupportedBuildmode = '#039'Package does not support this buildm'+ - 'ode'#039';'#010+ + ' SErrCouldNotCompile = '#039'Could not compile target %s from packag'+ + 'e %s'#039';'#010+ + ' SErrUnsupportedBuildmode = '#039'Package does not su','pport this buil'+ + 'dmode'#039';'#010+ ' SErrPackVarNotExist = '#039'There is no package variant with the na'+ 'me "%s"'#039';'#010+ ' SErrEventNotSupported = '#039'Unsupported event type'#039';'#010+ - ' SErrorPkgNotInstalled =',' '#039'Package "%s" is not installed, can no'+ - 't uninstall.'#039';'#010+ + ' SErrorPkgNotInstalled = '#039'Package "%s" is not installed, can not '+ + 'uninstall.'#039';'#010+ + ' SErrBuil','dUnitCompilation = '#039'Compilation of "%s" failed'#039';'#010+ + ' SErrExpectPkgVariant = '#039'The Package-variant on the command-line'+ + ' position %d (%s) should have at least one item'#039';'#010+ #010+ ' SWarnCircularTargetDependency = '#039'Warning: Circular dependency de'+ - 'tected when compiling target %s with target %s'#039';'#010+ + 'tected w','hen compiling target %s with target %s'#039';'#010+ ' SWarnCircularPackageDependency = '#039'Warning: Circular dependency d'+ - 'etec','ted when compiling package %s with package %s'#039';'#010+ + 'etected when compiling package %s with package %s'#039';'#010+ ' SWarnFailedToSetTime = '#039'Warning: Failed to set timestamp on f'+ 'ile "%s"'#039';'#010+ - ' SWarnFailedToGetTime = '#039'Warning: Failed to get timestamp from'+ - ' file "%s"'#039';'#010+ - ' SWarnAttemptingToCompileNonNeutral','Target = '#039'Warning: Attemptin'+ - 'g to compile non-neutral target %s'#039';'#010+ - ' SWarnSourceFileNotFound = '#039'Warning: Source file "%s" from packa'+ - 'ge %s not found for %s'#039';'#010+ + ' SW','arnFailedToGetTime = '#039'Warning: Failed to get timestamp fr'+ + 'om file "%s"'#039';'#010+ + ' SWarnAttemptingToCompileNonNeutralTarget = '#039'Warning: Attempting '+ + 'to compile non-neutral target %s'#039';'#010+ + ' SWarnSourceFileNotFound = '#039'Warning: Source file "%s" from pac','k'+ + 'age %s not found for %s'#039';'#010+ ' SWarnIncludeFileNotFound = '#039'Warning: Include file "%s" from pack'+ - 'age %s not found f','or %s'#039';'#010+ + 'age %s not found for %s'#039';'#010+ ' SWarnDepUnitNotFound = '#039'Warning: Dependency on unit %s is no'+ 't supported for %s'#039';'#010+ - ' SWarnTargetDependsOnPackage = '#039'Warning: Target %s of package %s '+ - 'depends on another package (%s). These kind of dependencies are not pr'+ - 'ocessed'#039';',#010+ + ' SWarnTargetDependsOnPackage = '#039'W','arning: Target %s of package %'+ + 's depends on another package (%s). These kind of dependencies are not '+ + 'processed'#039';'#010+ ' SWarnDependOnOtherPlatformPackage = '#039'Warning: Package %s depends'+ ' on package %s which is not available for the %s platform'#039';'#010+ - ' SWarnStartCompilingPackage = '#039'Start compiling package %s for tar'+ - 'get %s.'#039';'#010+ - ' SWarnCompilingPackagecompleteProgre','ss = '#039'[%3.0f%%] Compiled pa'+ - 'ckage %s'#039';'#010+ + ' ','SWarnStartCompilingPackage = '#039'Start compiling package %s for t'+ + 'arget %s.'#039';'#010+ + ' SWarnCompilingPackagecompleteProgress = '#039'[%3.0f%%] Compiled pack'+ + 'age %s'#039';'#010+ ' SWarnCompilingPackagecomplete = '#039'Compiled package %s'#039';'#010+ - ' SWarnSkipPackageTargetProgress = '#039'[%3.0f%%] Skipped package %s w'+ - 'hich has been disabled for target %s'#039';'#010+ - ' SWarnSkipPackageTarget = '#039'Skipped pack','age %s which has been di'+ - 'sabled for target %s'#039';'#010+ + ' SWarnSkipPackageTargetProgress =',' '#039'[%3.0f%%] Skipped package %s'+ + ' which has been disabled for target %s'#039';'#010+ + ' SWarnSkipPackageTarget = '#039'Skipped package %s which has been disa'+ + 'bled for target %s'#039';'#010+ ' SWarnInstallationPackagecomplete = '#039'Installation package %s for '+ - 'target %s succeeded'#039';'#010+ + 'target %s succee','ded'#039';'#010+ ' SWarnCleanPackagecomplete = '#039'Clean of package %s completed'#039';'+ #010+ - ' SWarnCanNotGetAccessRights = '#039'Warning: F','ailed to copy access-r'+ - 'ights from file %s'#039';'#010+ + ' SWarnCanNotGetAccessRights = '#039'Warning: Failed to copy access-rig'+ + 'hts from file %s'#039';'#010+ ' SWarnCanNotSetAccessRights = '#039'Warning: Failed to copy access-rig'+ 'hts to file %s'#039';'#010+ - ' SWarnCanNotGetFileAge = '#039'Warning: Failed to get FileAge for %s'#039+ - ';'#010+ - ' SWarnExtCommandNotFound = '#039'Warning: External ','command "%s" not '+ - 'found but "%s" is older then "%s"'#039';'#010+ + ' S','WarnCanNotGetFileAge = '#039'Warning: Failed to get FileAge for %s'+ + #039';'#010+ + ' SWarnExtCommandNotFound = '#039'Warning: External command "%s" not fo'+ + 'und but "%s" is older then "%s"'#039';'#010+ ' SWarnDuplicatePackage = '#039'Warning: Package %s is already added. U'+ - 'sing the existing package'#039';'#010+ + 'sing the e','xisting package'#039';'#010+ ' SWarngccNotFound = '#039'Could not find libgcc'#039';'#010+ - ' SWarngcclibpath = '#039'Warning: Un','able to determine the li'+ - 'bgcc path.'#039';'#010+ + ' SWarngcclibpath = '#039'Warning: Unable to determine the libg'+ + 'cc path.'#039';'#010+ ' SWarnNoFCLProcessSupport= '#039'No FCL-Process support'#039';'#010+ - ' SWarnRetryRemDirectory = '#039'Failed to remove directory "%s". R'+ - 'etry after a short delay'#039';'#010+ + ' SWarnRetryRemDirectory = '#039'Failed',' to remove directory "%s".'+ + ' Retry after a short delay'#039';'#010+ + ' SWarnCombinedPathAndUDir= '#039'Warning: Better do not combine the Se'+ + 'archPath and Global/Local-UnitDir parameters'#039';'#010+ #010+ - ' SInfoPackageAlreadyProcessed = '#039'Package %s is already',' processe'+ - 'd'#039';'#010+ - ' SInfoCompilingTarget = '#039'Compiling target %s'#039';'#010+ + ' SInfoPackageAlreadyProcessed = '#039'Package %s is already processed'#039+ + ';'#010+ + ' S','InfoCompilingTarget = '#039'Compiling target %s'#039';'#010+ ' SInfoExecutingCommand = '#039'Executing command "%s %s"'#039';'#010+ ' SInfoCreatingOutputDir = '#039'Creating output dir "%s"'#039';'#010+ ' SInfoInstallingPackage = '#039'Installing package %s'#039';'#010+ - ' SInfoUnI','nstallingPackage= '#039'Uninstalling package %s'#039';'#010+ + ' SInfoUnInstallingPackage','= '#039'Uninstalling package %s'#039';'#010+ ' SInfoArchivingPackage = '#039'Archiving package %s in "%s"'#039';'#010+ ' SInfoCleaningPackage = '#039'Cleaning package %s'#039';'#010+ ' SInfoManifestPackage = '#039'Creating manifest for package %s'#039';'+ #010+ - ' SInfoPkgListPackag','e = '#039'Adding package %s to the package lis'+ + ' SInfoPkgListPackage = '#039'Adding p','ackage %s to the package lis'+ 't'#039';'#010+ ' SInfoCopyingFile = '#039'Copying file "%s" to "%s"'#039';'#010+ ' SInfoDeletedFile = '#039'Deleted file "%s"'#039';'#010+ ' SInfoRemovedDirectory = '#039'Removed directory "%s"'#039';'#010+ - ' SInfoSourceNewerDest = '#039'Sou','rce file "%s" (%s) is newer than'+ + ' SInfoSourceNewerDest = '#039'Source file "%s" (%','s) is newer than'+ ' destination "%s" (%s).'#039';'#010+ ' SInfoDestDoesNotExist = '#039'Destination file "%s" does not exist.'+ #039';'#010+ ' SInfoFallbackBuildmode = '#039'Buildmode not supported by package, f'+ 'alling back to one by one unit compilation'#039';'#010+ - ' ','SInfoFallbackBuildmodeBU= '#039'Buildmode not supported by package,'+ + ' SInfoFallbackBui','ldmodeBU= '#039'Buildmode not supported by package,'+ ' falling back to compilation using a buildunit'#039';'#010+ + ' SInfoDirectoryNoPackage = '#039'Found directory "%s" while searching '+ + 'for package "%s" which does not contain a package'#039';'#010+ + ' SInfoSrcDirectoryNoPkg =',' '#039'Found source-directory "%s" while s'+ + 'earching for package "%s" but the package is not compiled or has the w'+ + 'rong name'#039';'#010+ #010+ ' SDbgComparingFileTimes = '#039'Comparing file "%s" time "%s" to "%'+ 's" time "%s".'#039';'#010+ - ' SDbgCompilingDependenciesOfTarget = '#039'Compili','ng dependencies of'+ - ' target %s'#039';'#010+ + ' SDbgCompilingDependenciesOfTarget = ',#039'Compiling dependencies of t'+ + 'arget %s'#039';'#010+ ' SDbgResolvingSourcesOfTarget = '#039'Resolving filenames of target %s'+ ' for %s'#039';'#010+ ' SDbgResolvedSourceFile = '#039'Resolved source file %s to "%s"'#039+ ';'#010+ - ' SDbgSourceAlreadyResolved = '#039'Source file of %s has been resolved'+ - ' e','arlier'#039';'#010+ + ' SDbgSourceAlreadyResolved = '#039'Source file of %s has been re','solv'+ + 'ed earlier'#039';'#010+ ' SDbgResolvedIncludeFile = '#039'Resolved include file %s to "%s"'#039+ ';'#010+ ' SDbgOutputNotYetAvailable = '#039'Output file %s not available'#039';'#010+ ' SDbgDependencyOnUnit = '#039'Dependency of %s on unit %s'#039';'#010+ - ' SDbgDependencyUnitRecompiled = '#039'Dependen','t unit %s is being rec'+ - 'ompiled'#039';'#010+ + ' SDbgDependencyUnitRecompiled = '#039,'Dependent unit %s is being reco'+ + 'mpiled'#039';'#010+ ' SDbgMustCompile = '#039'Must compile %s. (%s)'#039';'#010+ ' SDbgSkippingTargetWrongCPU = '#039'Skipping target %s, different CPU '+ '(%s)'#039';'#010+ ' SDbgSkippingTargetWrongOS = '#039'Skipping target %s, different OS ('+ - '%s)'#039';'#010+ - ' SDbgTa','rgetIsNotAUnitOrProgram = '#039'Skipping Target %s, not an un'+ - 'it or program'#039';'#010+ + '%s)'#039';'#010, + ' SDbgTargetIsNotAUnitOrProgram = '#039'Skipping Target %s, not an unit'+ + ' or program'#039';'#010+ ' SDbgConsideringTarget = '#039'Considering target %s'#039';'#010+ ' SDbgConsideringPackage = '#039'Considering package %s'#039';'#010+ - ' SDbgExternalDependency = '#039'External dependency %s fou','nd in "'+ - '%s"'#039';'#010+ + ' SDbgSearchExtDepPath = '#039'Search path for ex','ternal dependen'+ + 'cy %s'#039';'#010+ + ' SDbgExternalDependency = '#039'External dependency %s found in "%s'+ + '"'#039';'#010+ ' SDbgBuildEngineArchiving = '#039'Build engine archiving'#039';'#010+ ' SDbgBuildEngineGenerateManifests = '#039'Build engine generating mani'+ 'fests'#039';'#010+ - ' SDbgBuildEngineGeneratePkgList = '#039'Build engine generating packag'+ - 'e list'#039';'#010+ - ' SDbgBuildEngineClean','ing = '#039'Build engine cleaning'#039';'#010+ + ' SDbgBuildEngine','GeneratePkgList = '#039'Build engine generating pack'+ + 'age list'#039';'#010+ + ' SDbgBuildEngineCleaning = '#039'Build engine cleaning'#039';'#010+ ' SDbgGenerating = '#039'Generating "%s"'#039';'#010+ ' SDbgLoading = '#039'Loading "%s"'#039';'#010+ - ' SDbgFound = '#039'Found'#039';'#010+ + ' SDbgFound = '#039'F','ound'#039';'#010+ ' SDbgNotFound = '#039'Not Found'#039';'#010+ - ' SDbgDirectoryExists = ',#039'Directory "%s" %s'#039';'#010+ + ' SDbgDirectoryExists = '#039'Directory "%s" %s'#039';'#010+ ' SDbgFileExists = '#039'File "%s" %s'#039';'#010+ ' SDbgArchivingFile = '#039'Archiving "%s"'#039';'#010+ - ' SDbgSearchPath = '#039'Using %s path "%s"'#039';'#010+ + ' SDbgSearchPath = '#039'Using %s path ','"%s"'#039';'#010+ ' SDbgEnterDir = '#039'Entering directory "%s"'#039';'#010+ - ' SDbgPackageChe','cksumChanged = '#039'Dependent package %s is modified'+ - #039';'#010+ + ' SDbgPackageChecksumChanged = '#039'Package %s depends on the %s packa'+ + 'ge which has been modified'#039';'#010+ ' SDbgFileDoesNotExist = '#039'File "%s" does not exist'#039';'#010+ - ' SDbgDirectoryDoesNotExist = '#039'Directory "%s" does not exist'#039';'+ - #010+ + ' SDbgDirectoryDoesNotE','xist = '#039'Directory "%s" does not exist'#039+ + ';'#010+ ' SDbgDirectoryNotEmpty = '#039'Directory "%s" is not empty. Will n'+ - 'ot',' remove'#039';'#010+ + 'ot remove'#039';'#010+ ' SDbgGenerateBuildUnit = '#039'Generate build-unit %s'#039';'#010+ - ' SDbgForcedCompile = '#039'Forced compile'#039';'#010+ + ' SDbgBuildUnitFailure = '#039'Generate build-unit %s failed'#039';'+ + #010+ + ' S','DbgForcedCompile = '#039'Forced compile'#039';'#010+ ' SDbgOutputDoesNotExist = '#039'Output file does not exist'#039';'#010+ - ' SDbgNewerSource = '#039'Source file is newer then output fi', + ' SDbgNewerSource = '#039'Source file is newer then output fi'+ 'le'#039';'#010+ - ' SDbgNewerInclude = '#039'The include file %s is newer then o'+ - 'utput file'#039';'#010+ + ' SDbgNewerInclude = '#039'The include file %s is newer then',' '+ + 'output file'#039';'#010+ ' SDbgDependencyRecompiled = '#039'The unit %s where this unit depends'+ ' on is recompiled'#039';'#010+ ' SDbgPackageDepRecompiled = '#039'The package %s where this package d'+ - 'epen','ds on is recompiled'#039';'#010+ - ' SDbgTargetHasToBeCompiled = '#039'At least one of the targets in the '+ - 'package has to be compiled.'#039';'#010+ + 'epends on is recompiled'#039';'#010+ + ' SDbgTargetHasToBeCompiled = '#039'At least one of ','the targets in th'+ + 'e package has to be compiled.'#039';'#010+ ' SDbgDeletedFile = '#039'Recursively deleted file "%s"'#039';'+ #010+ - ' SDbgRemovedDirectory = '#039'Recursively removed director','y "%s'+ - '"'#039';'#010+ + ' SDbgRemovedDirectory = '#039'Recursively removed directory "%s"'#039+ + ';'#010+ #010+ #010+ ' // Help messages for usage'#010+ - ' SValue = '#039'Value'#039';'#010+ + ' SValue = '#039'Valu','e'#039';'#010+ ' SHelpUsage = '#039'Usage: %s command [options]'#039';'#010+ ' SHelpCommand = '#039'Where command is one of the following:'#039+ ';'#010+ - ' SHelpCompile = '#039'Compile all units in ','the package(s).'#039+ - ';'#010+ - ' SHelpBuild = '#039'Build all units in the package(s).'#039';'#010+ + ' SHelpCompile = '#039'Compile all units in the package(s).'#039';'+ + #010+ + ' SHelpBuild = '#039'Build all units in the pac','kage(s).'#039';'+ + #010+ ' SHelpInstall = '#039'Install all units in the package(s).'#039';'+ #010+ ' SHelpUnInstall = '#039'Uninstall the package(s).'#039';'#010+ - ' SHelpClean = '#039'Clean (remove) all',' units in the package'+ - '(s).'#039';'#010+ - ' SHelpArchive = '#039'Create archive (zip) with all units in th'+ - 'e package(s).'#039';'#010+ + ' SHelpClean = '#039'Clean (remove) all units in the package(s'+ + ').'#039';'#010+ + ' SHelpArchive = '#039'Create archive (','zip) with all units in '+ + 'the package(s).'#039';'#010+ ' SHelpHelp = '#039'This message.'#039';'#010+ ' SHelpManifest = '#039'Create a manifest suitable for import in '+ 'repository.'#039';'#010+ - ' SHelpPk','gList = '#039'Create list of all packages suitable fo'+ - 'r FPC installer.'#039';'#010+ + ' SHelpPkgList = '#039'Create list of all packages suitable for '+ + 'FPC installe','r.'#039';'#010+ ' SHelpZipInstall = '#039'Install all units in the package(s) into '+ 'an archive.'#039';'#010+ ' SHelpCmdOptions = '#039'Where options is one or more of the follo'+ 'wing:'#039';'#010+ - ' SHelpCPU ',' = '#039'Compile for indicated CPU.'#039';'#010+ - ' SHelpOS = '#039'Compile for indicated OS'#039';'#010+ + ' SHelpCPU = '#039'Compile for indicated CPU.'#039';'#010+ + ' SHelpOS = '#039'Co','mpile for indicated OS'#039';'#010+ ' SHelpTarget = '#039'Compile for indicated target'#039';'#010+ ' SHelpList = '#039'list commands instead of actually executi'+ 'ng them.'#039';'#010+ - ' SHelpPrefix',' = '#039'Use indicated prefix directory for all '+ - 'commands.'#039';'#010+ - ' SHelpNoFPCCfg = '#039'Compiler will not use fpc.cfg'#039';'#010+ + ' SHelpPrefix = '#039'Use indicated prefix directory for all co'+ + 'mmands.'#039';'#010+ + ' SHel','pNoFPCCfg = '#039'Compiler will not use fpc.cfg'#039';'#010+ ' SHelpBaseInstallDir = '#039'Use indicated directory as base install d'+ 'ir.'#039';'#010+ - ' SHelpLocalUnitDir = '#039'Use indicated directory',' as local (user)'+ - ' unit dir.'#039';'#010+ - ' SHelpGlobalUnitDir = '#039'Use indicated directory as global unit di'+ - 'r.'#039';'#010+ + ' SHelpLocalUnitDir = '#039'Use indicated directory as local (user) u'+ + 'nit dir.'#039';'#010+ + ' SHelpGlobalUnitDir = '#039'Use indicated d','irectory as global unit '+ + 'dir.'#039';'#010+ + ' SHelpSearchPath = '#039'Add search directory for packages.'#039';'#010+ ' SHelpUnitInstallDir = '#039'Use indicated directory to install units '+ 'into.'#039';'#010+ ' SHelpCompiler = '#039'Use indicated binary as compiler'#039';'#010+ - ' SHel','pConfig = '#039'Use indicated config file when compilin'+ + ' SHelpConfig',' = '#039'Use indicated config file when compilin'+ 'g.'#039';'#010+ ' SHelpOptions = '#039'Pass extra options to the compiler.'#039';'+ #010+ ' SHelpVerbose = '#039'Be verbose when working.'#039';'#010+ - ' SHelpInstExamples = '#039'Install the example-sources.'#039';'#010+ - ' SHel','pSkipCrossProgs = '#039'Skip programs when cross-compiling/inst'+ - 'alling'#039';'#010+ + ' SHelpInteractive = '#039'Allow to interact with child processes'#039+ + ';'#010+ + ' S','HelpInstExamples = '#039'Install the example-sources.'#039';'#010+ + ' SHelpSkipCrossProgs = '#039'Skip programs when cross-compiling/instal'+ + 'ling'#039';'#010+ ' SHelpIgnoreInvOpt = '#039'Ignore further invalid options.'#039';'#010+ - ' sHelpFpdocOutputDir = '#039'Use indicated directory as fpdoc output f'+ - 'older.'#039';'#010+ - ' sHelpFPUnitSrcPath = '#039'Sourcepath to ','replace in fpunits.cfg on'+ - ' installation.'#039';'#010+ + ' sHelpFpdocOutputDir = '#039'Use indicated directory as fpd','oc output'+ + ' folder.'#039';'#010+ + ' sHelpFPUnitSrcPath = '#039'Sourcepath to replace in fpunits.cfg on i'+ + 'nstallation.'#039';'#010+ ' sHelpThreads = '#039'Enable the indicated amount of worker thr'+ 'eads.'#039';'#010+ - ' sHelpUseEnvironment = '#039'Use environment to pass options to compil'+ - 'er.'#039';'#010+ - ' SHelpUseBuildUnit = '#039'Compile package in Build-un','it mode.'#039+ - ';'#010+ + ' sHelpUseEnvironment = '#039'Use environment to pass options to compi', + 'ler.'#039';'#010+ + ' SHelpUseBuildUnit = '#039'Compile package in Build-unit mode.'#039';'+ + #010+ ' sHelpZipPrefix = '#039'Use indicated prefix for generated archiv'+ 'es.'#039';'#010+ + ' sHelpPackageVariant1= '#039'To add a package-variant to all packages:'+ + #039';'#010+ + ' sHelpPackageVariant2= '#039' +[v','ariantname]+=[variant1],,'+ + '...'#039';'#010+ + ' sHelpPackageVariant3= '#039'To add a package-variant to all packages '+ + 'which other packages will inherit:'#039';'#010+ + ' sHelpPackageVariant4= '#039' +[variantname]*=[variant1],,..'+ + '.'#039';'#010+ + ' sHelpPackageVariant5= '#039'T','o add specific options for one package'+ + '-variant:'#039';'#010+ + ' sHelpPackageVariant6= '#039' --options_[variantname]_[variant1]=Value'+ + #039';'#010+ #010+ #010+ 'Const'#010+ ' // Keys for Defaults file. Do not localize.'#010+ ' KeyCompiler = '#039'Compiler'#039';'#010+ ' KeyArchive = '#039'Archive'#039';'#010+ - ' KeyCopy = '#039'Copy'#039';'#010+ - ' KeyMkDir = '#039'MkDir'#039';',#010+ + ' KeyCopy ',' = '#039'Copy'#039';'#010+ + ' KeyMkDir = '#039'MkDir'#039';'#010+ ' KeyMove = '#039'Move'#039';'#010+ ' KeyRemove = '#039'Remove'#039';'#010+ ' KeyRemoveDir= '#039'RemoveDir'#039';'#010+ @@ -2115,49 +2295,52 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' KeyOptions = '#039'Options'#039';'#010+ ' KeyCPU = '#039'CPU'#039';'#010+ ' KeyOS = '#039'OS'#039';'#010+ - ' KeyMode = '#039'Mode'#039';'#010+ + ' KeyMode = '#039'Mode',#039';'#010+ ' KeyPrefix = '#039'Prefix'#039';'#010+ - ' KeyTa','rget = '#039'Target'#039';'#010+ + ' KeyTarget = '#039'Target'#039';'#010+ ' KeyNoFPCCfg = '#039'NoFPCCfg'#039';'#010+ ' KeyUseEnv = '#039'UseEnv'#039';'#010+ + ' KeyPluginUnits = '#039'PluginUnits'#039';'#010+ ' KeyLocalUnitDir = '#039'LocalUnitDir'#039';'#010+ ' KeyGlobalUnitDir = '#039'GlobalUnitDir'#039';'#010+ - ' KeyBaseInstallDir = '#039'BaseInstallDir'#039';'#010+ - ' KeyUnitInstallDir = '#039'UnitInstall','Dir'#039';'#010+ + ' Key','BaseInstallDir = '#039'BaseInstallDir'#039';'#010+ + ' KeyUnitInstallDir = '#039'UnitInstallDir'#039';'#010+ ' KeyBinInstallDir = '#039'BinInstallDir'#039';'#010+ + ' KeyLibInstallDir = '#039'LibInstallDir'#039';'#010+ ' KeyDocInstallDir = '#039'DocInstallDir'#039';'#010+ - ' KeyExamplesInstallDir = '#039'ExamplesInstallDir'#039';'#010+ + ' KeyExamplesInstallDir = '#039'E','xamplesInstallDir'#039';'#010+ ' KeyInstallExamples = '#039'InstallExamples'#039';'#010+ ' KeySkipCrossProdrams = '#039'SkipCrossPrograms'#039';'#010+ - ' // Key','s for unit config'#010+ + ' // Keys for unit config'#010+ ' KeyName = '#039'Name'#039';'#010+ ' KeyVersion = '#039'Version'#039';'#010+ ' KeyChecksum = '#039'Checksum'#039';'#010+ - ' KeyNeedLibC = '#039'NeedLibC'#039';'#010+ + ' KeyNeedLibC = '#039'NeedLi','bC'#039';'#010+ ' KeyDepends = '#039'Depends'#039';'#010+ ' KeyFlags = '#039'Flags'#039';'#010+ + ' KeyTransmit = '#039'TransmitOptions'#039';'#010+ ' KeyAddIn = '#039'FPMakeAddIn'#039';'#010+ - ' KeySourcePath = '#039'SourcePath'#039';'#010, + ' KeySourcePath = '#039'SourcePath'#039';'#010+ ' KeyFPMakeOptions = '#039'FPMakeOptions'#039';'#010+ ' KeyPackageVar = '#039'PackageVariant_'#039';'#010+ #010+ - '{*********************************************************************'+ - '*******'#010+ + '{********','***********************************************************'+ + '*********'#010+ ' Helpers'#010+ - '**********************************************','**********************'+ - '********}'#010+ + '**********************************************************************'+ + '******}'#010+ #010+ '{$ifdef HAS_UNIT_PROCESS}'#010+ - 'function ExecuteFPC(Verbose: boolean; const Path: string; const ComLin'+ - 'e: string; const Env: TStrings; ConsoleOutput: TMemoryStream): integer'+ - ';'#010+ + 'function ExecuteFPC(Verbos','e, Interactive: boolean; const Path: strin'+ + 'g; const ComLine: string; const Env: TStrings; ConsoleOutput: TMemoryS'+ + 'tream): integer;'#010+ 'var'#010+ ' P: TProcess;'#010+ - ' BytesRead: longint',';'#010+ + ' BytesRead: longint;'#010+ #010+ ' function ReadFromStream(const ReadFromStdErr: boolean): longint;'#010+ #010+ - ' const'#010+ + ' ',' const'#010+ ' READ_BYTES = 2048;'#010+ #010+ ' type'#010+ @@ -2165,10 +2348,10 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ ' var'#010+ ' //ifdef the MsgNum so it contains the correct message numbers for '+ - 'each compiler',' version.'#010+ + 'each compiler version.'#010+ ' MsgNum : array [TMessages] of integer = (3104, 9015);'#010+ #010+ - ' n,available: longint;'#010+ + ' ',' n,available: longint;'#010+ ' BuffPos: longint;'#010+ ' sLine: string;'#010+ ' ch: char;'#010+ @@ -2178,101 +2361,122 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' begin'#010+ #010+ ' // try reading it'#010+ - ' ',' if ReadFromStdErr then'#010+ + ' if ReadFromStdErr then'#010+ ' begin'#010+ - ' available:=P.Stderr.NumBytesAvailable;'#010+ + ' available:=P.Stderr.NumByte','sAvailable;'#010+ ' // make sure we have room'#010+ ' if (bytesRead + Available > ConsoleOutput.Size) then'#010+ ' ConsoleOutput.SetSize(BytesRead + Available);'#010+ - ' ',' n := P.Stderr.Read((ConsoleOutput.Memory + BytesRead)^, avai'+ - 'lable);'#010+ - ' end'#010+ + ' n := P.Stderr.Read((ConsoleOutput.Memory + BytesRead)^, availa'+ + 'ble);'#010+ + ' ',' end'#010+ ' else'#010+ ' begin'#010+ ' available:=P.Output.NumBytesAvailable;'#010+ ' // make sure we have room'#010+ - ' if (bytesRead + Available > ConsoleOutput.Size) t','hen'#010+ + ' if (bytesRead + Available > ConsoleOutput.Size) then'#010+ ' ConsoleOutput.SetSize(BytesRead + Available);'#010+ - ' n := P.Output.Read((ConsoleOutput.Memory + BytesRead)^, availa'+ - 'ble);'#010+ + ' n :=',' P.Output.Read((ConsoleOutput.Memory + BytesRead)^, avai'+ + 'lable);'#010+ ' end;'#010+ ' if n > 0 then'#010+ ' begin'#010+ ' Inc(BytesRead, n);'#010+ #010+ ' sLine := '#039#039';'#010+ - ' BuffPos := Con','soleOutput.Position;'#010+ + ' BuffPos := ConsoleOutput.Position;'#010+ #010+ ' //read lines from the stream'#010+ ' repeat'#010+ - ' ConsoleOutput.Read(ch,1);'#010+ + ' ',' ConsoleOutput.Read(ch,1);'#010+ #010+ ' if ch in [#10, #13] then'#010+ ' begin'#010+ - ' if Verbose then'#010+ + ' if Interactive then'#010+ + ' System.Writeln(output)'#010+ + ' else if Verbose then'#010+ ' installer.log(vlInfo,sLine)'#010+ ' else'#010+ - ' ',' begin'#010+ + ' ',' begin'#010+ ' for msg := Low(TMessages) to High(TMessages) do'#010+ ' begin'#010+ ' snum := Format('#039'(%d)'#039', [MsgNum[msg]]);'#010+ ' ipos := Pos(snum, sLine);'#010+ ' if ipos = 1 then'#010+ - ' ',' installer.log(vlCommand,'#039' '#039'+ Copy(sLi'+ + ' i','nstaller.log(vlCommand,'#039' '#039'+ Copy(sLi'+ 'ne, ipos + Length(snum), Length(sLine) - ipos - Length(snum) + 1));'#010+ ' end;'#010+ ' end;'#010+ ' if (LineEnding=#13#10) and (ch=#13) and'#010+ - ' (ConsoleOutput.Position= BytesRead;'#010+ #010+ - ' ConsoleOutput.Position := BuffPos;'#010+ + ' // keep partial lines, u','nlessin interactive mode'#010+ + ' if not Interactive then'#010+ + ' ConsoleOutput.Position := BuffPos'#010+ + ' // Flush for interactive mode'#010+ + ' else if n > 0 then'#010+ + ' System.Flush(output);'#010+ ' end;'#010+ #010+ ' Result := n;'#010+ ' end;'#010+ #010+ 'begin'#010+ - ' result := -1;'#010+ - ' Byt','esRead := 0;'#010+ + ' result ',':= -1;'#010+ + ' BytesRead := 0;'#010+ ' P := TProcess.Create(nil);'#010+ ' try'#010+ ' P.CommandLine := Path + '#039' '#039' + ComLine;'#010+ ' if assigned(Env) then'#010+ ' P.Environment.Assign(Env);'#010+ #010+ - ' P.Options := [poUsePipes];'#010+ + ' if Interactive then'#010+ + ' P.Options := [poUsePipes,poPassInput]'#010+ + ' else'#010, + ' P.Options := [poUsePipes];'#010+ #010+ ' P.Execute;'#010+ ' while P.Running do'#010+ ' begin'#010+ - ' ',' // Only call ReadFromStream if Data from corresponding strea'+ - 'm'#010+ + ' // Only call ReadFromStream if Data from corresponding stream'#010+ ' // is already available, otherwise, on linux, the read call'#010+ - ' // is blocking, and thus it is not possible to be sure to hand'+ - 'le'#010+ - ' // big data amounts bboth o','n output and stderr pipes. PM.'#010+ + ' // is blo','cking, and thus it is not possible to be sure to ha'+ + 'ndle'#010+ + ' // big data amounts bboth on output and stderr pipes. PM.'#010+ ' if P.Output.NumBytesAvailable > 0 then'#010+ ' ReadFromStream(false)'#010+ - ' else if P.StdErr.NumBytesAvailable > 0 then'#010+ + ' else if P.StdErr.NumBytesAvaila','ble > 0 then'#010+ ' ReadFromStream(true)'#010+ ' else'#010+ ' // no data, wait 100 ms'#010+ - ' ',' Sleep(100);'#010+ + ' Sleep(100);'#010+ ' end;'#010+ #010+ ' // read last part'#010+ @@ -2280,41 +2484,41 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' until ReadFromStream(false)=0;'#010+ #010+ ' // read stderr'#010+ - ' // JvdS: Note that this way stderr is added to the end of the stre'+ - 'am. But I'#010+ - ' // see no way showing the stderr outpu','t at the place it was actu'+ - 'ally written'#010+ + ' // JvdS: Note that this way',' stderr is added to the end of the st'+ + 'ream. But I'#010+ + ' // see no way showing the stderr output at the place it was actual'+ + 'ly written'#010+ ' repeat'#010+ ' until ReadFromStream(true)=0;'#010+ ' ConsoleOutput.SetSize(BytesRead);'#010+ #010+ - ' result := P.ExitStatus;'#010+ + ' result := P.ExitStatus',';'#010+ ' finally'#010+ ' P.Free;'#010+ ' end;'#010+ 'end;'#010+ '{$endif HAS_UNIT_PROCESS}'#010+ #010+ - 'function IsDirectoryEmpty(co','nst directory : string) : boolean;'#010+ + 'function IsDirectoryEmpty(const directory : string) : boolean;'#010+ 'var'#010+ ' searchRec: TSearchRec;'#010+ ' SearchResult: longint;'#010+ 'begin'#010+ ' result := true;'#010+ - ' SearchResult := FindFirst(IncludeTrailingPathDelimiter(directory)+Al'+ - 'lFilesMask, faAnyFile+faSymLink, searchRec);'#010+ + ' SearchResult := FindFirst(IncludeT','railingPathDelimiter(directory)+'+ + 'AllFilesMask, faAnyFile+faSymLink, searchRec);'#010+ ' try'#010+ - ' wh','ile SearchResult=0 do'#010+ + ' while SearchResult=0 do'#010+ ' begin'#010+ ' if (searchRec.Name<>'#039'.'#039') and (searchRec.Name<>'#039'..'#039+ ') then'#010+ ' begin'#010+ ' result := false;'#010+ - ' break;'#010+ + ' ',' break;'#010+ ' end;'#010+ ' SearchResult := FindNext(searchRec);'#010+ ' end;'#010+ - ' ','finally'#010+ + ' finally'#010+ ' sysutils.FindClose(searchRec);'#010+ ' end;'#010+ 'end;'#010+ @@ -2322,11 +2526,11 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'function ParsecompilerOutput(M: TMemoryStream; Verbose: boolean): stri'+ 'ng;'#010+ 'type'#010+ - ' TParseCompilerOutputState = (cosBeginOfLine, cosSearchColon, cosPars'+ - 'eNumber, cosOther);'#010+ + ' TParseCompil','erOutputState = (cosBeginOfLine, cosSearchColon, cosPa'+ + 'rseNumber, cosOther);'#010+ #010+ 'var'#010+ - ' presult:',' pchar;'#010+ + ' presult: pchar;'#010+ ' state: TParseCompilerOutputState;'#010+ ' ch: char;'#010+ ' eolchar: char;'#010+ @@ -2334,59 +2538,59 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' m.Seek(0, soBeginning);'#010+ ' setlength(Result,M.Size);'#010+ #010+ - ' if verbose then'#010+ + ' if verbose th','en'#010+ ' begin'#010+ ' m.Read(Result[1],M.Size);'#010+ ' Exit;'#010+ ' end;'#010+ #010+ - ' presult := @Result[1];',#010+ + ' presult := @Result[1];'#010+ ' eolchar := RightStr(LineEnding,1)[1];'#010+ ' m.Seek(0,soBeginning);'#010+ ' state := cosBeginOfLine;'#010+ ' while m.PositionLength(R) then'#010+ + ' If J+Length(T)>Length(R) then'#010+ ' SetLength(R,J+Length(T));'#010+ ' For I:=1 to Length(t) do'#010+ ' begin'#010+ ' R[J]:=T[i];'#010+ ' If I'#039': W(J,Result,gtStr);'#010+ ' // Escape whitespace using CharRefs to be consistent with W3 spe'+ 'c X 3.3.3'#010+ ' #9: w(J,Result,'#039' '#039');'#010+ - '{ #10: wrtStr('#039' '#039');'#010+ + '{ ',' #10: wrtStr('#039' '#039');'#010+ ' #13: wrtStr('#039' '#039');}'#010+ ' else'#010+ ' Result[J]:=S[i];'#010+ - ' ','end;'#010+ + ' end;'#010+ ' If (J=Length(Result)) and (ILength(Result) then'#010+ - ' SetLength(Result,J);'#010+ + ' SetLength(Resul','t,J);'#010+ 'end;'#010+ #010+ #010+ 'function maybequoted(const s:string):string;'#010+ 'const'#010+ - ' {$IF DEFINED(MSWINDOWS) O','R DEFINED(AMIGA) OR DEFINED(MORPHOS) OR D'+ - 'EFINED(AROS)}'#010+ + ' {$IF DEFINED(MSWINDOWS) OR DEFINED(AMIGA) OR DEFINED(MORPHOS) OR DEF'+ + 'INED(AROS)}'#010+ ' FORBIDDEN_CHARS = ['#039'!'#039', '#039'@'#039', '#039'#'#039', '#039'$'#039+ ', '#039'%'#039', '#039'^'#039', '#039'&'#039', '#039'*'#039', '#039'('#039', '#039+ ')'#039','#010+ - ' '#039'{'#039', '#039'}'#039', '#039#039#039#039', '#039'`'+ - #039', '#039'~'#039'];'#010+ + ' ',' '#039'{'#039', '#039'}'#039', '#039#039#039#039', '#039+ + '`'#039', '#039'~'#039'];'#010+ ' {$ELSE}'#010+ ' FORBIDDEN_CHARS = ['#039'!'#039', '#039'@'#039', '#039'#'#039', '#039'$'#039+ - ', '#039'%'#039', '#039'^'#039',',' '#039'&'#039', '#039'*'#039', '#039'('#039', '#039+ + ', '#039'%'#039', '#039'^'#039', '#039'&'#039', '#039'*'#039', '#039'('#039', '#039+ ')'#039','#010+ ' '#039'{'#039', '#039'}'#039', '#039#039#039#039', '#039':'+ #039', '#039'\'#039', '#039'`'#039', '#039'~'#039'];'#010+ @@ -2463,13 +2667,13 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' s1 : string;'#010+ ' i : integer;'#010+ ' quoted : boolean;'#010+ - 'begin'#010+ + 'be','gin'#010+ ' quoted:=false;'#010+ ' s1:='#039'"'#039';'#010+ ' for i:=1 to length(s) do'#010+ ' begin'#010+ ' case s[i] of'#010+ - ' ',' '#039'"'#039' :'#010+ + ' '#039'"'#039' :'#010+ ' begin'#010+ ' quoted:=true;'#010+ ' s1:=s1+'#039'\"'#039';'#010+ @@ -2477,11 +2681,11 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' '#039' '#039','#010+ ' #128..#255 :'#010+ ' begin'#010+ - ' quoted:=true;'#010+ + ' quote','d:=true;'#010+ ' s1:=s1+s[i];'#010+ ' end;'#010+ ' else begin'#010+ - ' if s[i] in FORBID','DEN_CHARS then'#010+ + ' if s[i] in FORBIDDEN_CHARS then'#010+ ' quoted:=True;'#010+ ' s1:=s1+s[i];'#010+ ' end;'#010+ @@ -2490,39 +2694,38 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' if quoted then'#010+ ' maybequoted:=s1+'#039'"'#039#010+ ' else'#010+ - ' maybequoted:=s;'#010+ + ' maybe','quoted:=s;'#010+ 'end;'#010+ #010+ #010+ 'procedure ReadIniFile(Const AFileName: String;L:TStrings);'#010+ 'Var'#010+ - ' F : TFil','eStream;'#010+ + ' F : TFileStream;'#010+ ' Line : String;'#010+ ' I,P,PC : Integer;'#010+ 'begin'#010+ ' // On some file systems and when using a large number of parallel ma'+ 'ke'#010+ - ' // processes, the lock from the creation of the ini file may not yet'+ - #010+ - ' // have been released even though the file',' has been closed already'+ - #010+ + ' // processes, the lock',' from the creation of the ini file may not y'+ + 'et'#010+ + ' // have been released even though the file has been closed already'#010+ ' F:=TFileStream.Create(AFileName,fmOpenRead or fmShareDenyNone);'#010+ ' Try'#010+ ' L.LoadFromStream(F);'#010+ ' // Fix lines.'#010+ - ' For I:=L.Count-1 downto 0 do'#010+ + ' For I',':=L.Count-1 downto 0 do'#010+ ' begin'#010+ ' Line:=L[I];'#010+ ' P:=Pos('#039'='#039',Line);'#010+ - ' P','C:=Pos('#039';'#039',Line); // Comment line.'#010+ + ' PC:=Pos('#039';'#039',Line); // Comment line.'#010+ ' If (P=0) or ((PC<>0) and (PCDefaults.BuildOS) or (ACpu<>Defaults.BuildCPU);'#010+ + ' result := (AOs<>Defaults.BuildOS) or (ACpu<>Defaults.BuildCPU);'#010+ 'end;'#010+ #010+ 'Function StringToCPU(const S : String) : TCPU;'#010+ @@ -2620,88 +2823,87 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' I : Integer;'#010+ #010+ 'begin'#010+ - ' I:=GetEnumValue(TypeInfo(TCPU),S);'#010+ + ' I:=','GetEnumValue(TypeInfo(TCPU),S);'#010+ ' if (I=-1) then'#010+ - ' Raise EInstallerError.CreateFmt(SErrIn','validCPU,[S]);'#010+ + ' Raise EInstallerError.CreateFmt(SErrInvalidCPU,[S]);'#010+ ' Result:=TCPU(I);'#010+ 'end;'#010+ #010+ 'Function StringToCPUS(const S : String) : TCPUS;'#010+ #010+ 'begin'#010+ - ' Result:=TCPUS(StringToSet(PTypeInfo(TypeInfo(TCPUS)),S));'#010+ + ' Result:=TCPUS(StringToSet(PTypeInfo(TypeInfo(TCPUS)','),S));'#010+ 'end;'#010+ #010+ 'Function ModeToString(Mode: TCompilerMode) : String;'#010+ #010+ 'begin'#010+ - ' Result:=LowerCas','e(GetenumName(TypeInfo(TCompilerMode),Ord(Mode)));'+ - #010+ + ' Result:=LowerCase(GetenumName(TypeInfo(TCompilerMode),Ord(Mode)));'#010+ ' Delete(Result,1,2);'#010+ 'end;'#010+ #010+ 'Function StringToMode(const S : String) : TCompilerMode;'#010+ #010+ 'Var'#010+ - ' I : Integer;'#010+ + ' I : In','teger;'#010+ #010+ 'begin'#010+ ' I:=GetEnumValue(TypeInfo(TCompilerMode),S);'#010+ ' if (I=-1) then'#010+ - ' Raise EIns','tallerError.CreateFmt(SErrInvalidMode,[S]);'#010+ + ' Raise EInstallerError.CreateFmt(SErrInvalidMode,[S]);'#010+ ' Result:=TCompilerMode(I);'#010+ 'end;'#010+ #010+ #010+ - 'Function MakeTargetString(CPU : TCPU;OS: TOS;ALimit83: boolean) : Stri'+ + 'Function MakeTargetString(CPU : TCPU;OS: TOS;ALimit83: boolean) : Stri', 'ng;'#010+ #010+ 'begin'#010+ ' if ALimit83 then'#010+ ' Result := OSToString(OS)'#010+ ' else'#010+ - ' Result:=CPUToString(C','PU)+'#039'-'#039'+OSToString(OS);'#010+ + ' Result:=CPUToString(CPU)+'#039'-'#039'+OSToString(OS);'#010+ 'end;'#010+ #010+ 'Function MakeTargetString(CPU : TCPU;OS: TOS) : String;'#010+ #010+ 'begin'#010+ ' Result := MakeTargetString (CPU, OS,'#010+ - ' (Defaults.BuildOS in AllLimit83fsOses) or (OS in AllLimit83'+ - 'fsOses));'#010+ + ' (Defau','lts.BuildOS in AllLimit83fsOses) or (OS in AllLimit'+ + '83fsOses));'#010+ 'end;'#010+ #010+ - 'function MakeZipSuffix','(CPU : TCPU;OS: TOS;ALimit83: boolean) : Strin'+ - 'g;'#010+ + 'function MakeZipSuffix(CPU : TCPU;OS: TOS;ALimit83: boolean) : String;'+ + #010+ #010+ 'begin'#010+ ' case OS of'#010+ ' go32v2: result := '#039'dos'#039';'#010+ ' watcom: result := '#039'wat'#039';'#010+ - ' os2: result := '#039'os2'#039';'#010+ + ' os2: result := ',#039'os2'#039';'#010+ ' emx: result := '#039'emx'#039';'#010+ ' osNone:'#010+ ' begin'#010+ ' if ALimit83 then'#010+ - ' ',' result := '#039'src'#039#010+ + ' result := '#039'src'#039#010+ ' else'#010+ ' result := '#039'.source'#039#010+ ' end'#010+ ' else'#010+ ' result := '#039'.'#039' + MakeTargetString(CPU, OS, ALimit83);'#010+ ' end;'#010+ - 'end;'#010+ + 'end;'#010, #010+ 'function MakeZipSuffix(CPU : TCPU;OS: TOS) : String;'#010+ #010+ 'begin'#010+ - ' Result := MakeZipSuffix (CPU',', OS,'#010+ + ' Result := MakeZipSuffix (CPU, OS,'#010+ ' (Defaults.BuildOS in AllLimit83fsOses) or (OS in AllLimit83'+ 'fsOses));'#010+ 'end;'#010+ #010+ - 'Procedure StringToCPUOS(const S : String; Var CPU : TCPU; Var OS: TOS)'+ - ';'#010+ + 'Procedure StringToCPUOS(const S : String; Var CPU : TCPU;',' Var OS: TO'+ + 'S);'#010+ #010+ 'Var'#010+ ' P : integer;'#010+ @@ -2709,72 +2911,72 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'begin'#010+ ' P:=Pos('#039'-'#039',S);'#010+ ' If (P=0) then'#010+ - ' Raise EInsta','llerError.CreateFmt(SErrInvalidTarget,[S]);'#010+ + ' Raise EInstallerError.CreateFmt(SErrInvalidTarget,[S]);'#010+ ' CPU:=StringToCPU(Copy(S,1,P-1));'#010+ ' OS:=StringToOs(Copy(S,P+1,Length(S)-P));'#010+ 'end;'#010+ #010+ #010+ - 'Procedure ResolveDependencies(L : TDependencies; P : TNamedCollection)'+ - ';'#010+ + 'Procedure ResolveDep','endencies(L : TDependencies; P : TNamedCollectio'+ + 'n);'#010+ 'Var'#010+ ' I,J : Integer;'#010+ - ' C : TDependency;',#010+ + ' C : TDependency;'#010+ 'begin'#010+ ' If Assigned(L) then'#010+ ' For I:=0 to L.Count-1 do'#010+ ' begin'#010+ ' C:=L[i];'#010+ ' if C.DependencyType in [depPackage,depUnit] then'#010+ - ' begin'#010+ + ' ',' begin'#010+ ' J:=P.IndexOfName(C.Value);'#010+ ' If J<>-1 then'#010+ - ' C','.Target:=P.Items[J];'#010+ + ' C.Target:=P.Items[J];'#010+ ' end;'#010+ ' end;'#010+ 'end;'#010+ #010+ #010+ 'function AddConditionalStrings(APackage: TPackage; Dest : TStrings; Sr'+ - 'c : TConditionalStrings;ACPU:TCPU;AOS:TOS; Const APrefix : String='#039+ + 'c : TConditionalStrings;A','CPU:TCPU;AOS:TOS; Const APrefix : String='#039+ #039') : Integer ;'#010+ 'Var'#010+ ' I : Integer;'#010+ - ' C : TConditio','nalString;'#010+ + ' C : TConditionalString;'#010+ ' D : TPackageDictionary;'#010+ ' S : String;'#010+ 'begin'#010+ ' Result:=0;'#010+ ' D := PackageDictionaryClass.Create(nil);'#010+ - ' D.MasterDictionary := APackage.Dictionary;'#010+ + ' D.MasterDictionary := APackage.Dic','tionary;'#010+ ' try'#010+ ' D.AddVariable('#039'CPU'#039',CPUToString(ACPU));'#010+ - ' D.AddVariable('#039'OS'#039',OSToStrin','g(AOS));'#010+ + ' D.AddVariable('#039'OS'#039',OSToString(AOS));'#010+ ' For I:=0 to Src.Count-1 do'#010+ ' begin'#010+ ' C:=Src[I];'#010+ ' if (ACPU in C.CPUs) and (AOS in C.OSes) then'#010+ ' begin'#010+ - ' If (APrefix<>'#039#039') then'#010+ + ' ',' If (APrefix<>'#039#039') then'#010+ ' S:=APrefix+C.Value'#010+ ' else'#010+ - ' S:','=C.Value;'#010+ + ' S:=C.Value;'#010+ ' S := D.ReplaceStrings(s);'#010+ ' if C is TConditionalDestString then'#010+ ' begin'#010+ - ' // If a destination path is given, omit the path of th'+ - 'e sourcefile'#010+ - ' if TConditionalDestString','(c).DestPath='#039#039' then'#010+ + ' // If a destinati','on path is given, omit the path of '+ + 'the sourcefile'#010+ + ' if TConditionalDestString(c).DestPath='#039#039' then'#010+ ' Dest.values[S] := D.ReplaceStrings(IncludeTrailingP'+ 'athDelimiter(TConditionalDestString(c).DestPath))+S'#010+ - ' else'#010+ + ' ',' else'#010+ ' Dest.values[S] := D.ReplaceStrings(IncludeTrailingP'+ - 'athDel','imiter(TConditionalDestString(c).DestPath)+APrefix+ExtractFile'+ - 'Name(C.Value));'#010+ + 'athDelimiter(TConditionalDestString(c).DestPath)+APrefix+ExtractFileNa'+ + 'me(C.Value));'#010+ ' end'#010+ ' else'#010+ ' Dest.Add(S);'#010+ - ' Inc(Result);'#010+ + ' ',' Inc(Result);'#010+ ' end;'#010+ ' end;'#010+ ' finally'#010+ @@ -2783,19 +2985,19 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'function File','ListToString(List : TStrings; const APrefix : String) :'+ - ' String;'#010+ + 'function FileListToString(List : TStrings; const APrefix : String) : S'+ + 'tring;'#010+ 'Var'#010+ ' I : integer;'#010+ ' S : String;'#010+ 'begin'#010+ ' Result:='#039#039';'#010+ ' For I:=0 to List.Count-1 do'#010+ - ' begin'#010+ + ' ',' begin'#010+ ' If (I>0) then'#010+ ' Result:=Result+'#039' '#039';'#010+ ' S:=APrefix+List[i];'#010+ - ' If ','(Pos('#039' '#039',S)<>0) then'#010+ + ' If (Pos('#039' '#039',S)<>0) then'#010+ ' S:='#039'"'#039'+S+'#039'"'#039';'#010+ ' Result:=Result+S;'#010+ ' end;'#010+ @@ -2804,10 +3006,10 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'function FixPath (const APath : String) : String;'#010+ 'begin'#010+ - ' Result := FixPath(APath, False);'#010+ + ' Result :','= FixPath(APath, False);'#010+ 'end;'#010+ #010+ - 'function FixPath (const APath : String; AIsDir : Boolean) : ','String;'#010+ + 'function FixPath (const APath : String; AIsDir : Boolean) : String;'#010+ 'Var'#010+ ' P : PChar;'#010+ 'begin'#010+ @@ -2816,60 +3018,61 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' begin'#010+ ' UniqueString(Result);'#010+ ' P:=PChar(Result);'#010+ - ' While (P^<>#0) do'#010+ + ' While (P^<','>#0) do'#010+ ' begin'#010+ ' If P^ in ['#039'/'#039','#039'\'#039'] then'#010+ ' P^:=PathDelim;'#010+ - ' ',' Inc(P);'#010+ + ' Inc(P);'#010+ ' end;'#010+ ' end;'#010+ ' if AIsDir and (Result <> '#039#039') then'#010+ ' Result := IncludeTrailingPathDelimiter(Result);'#010+ 'end;'#010+ #010+ - 'function IsRelativePath(const APath: String): boolean;'#010+ + 'function IsRelativePath','(const APath: String): boolean;'#010+ 'begin'#010+ ' if APath='#039#039' then'#010+ ' result := true'#010+ '{$ifdef unix}'#010+ - ' ',' else if APath[1] in AllowDirectorySeparators then'#010+ + ' else if APath[1] in AllowDirectorySeparators then'#010+ ' result := false'#010+ '{$else}'#010+ ' else if ExtractFileDrive(APath)<>'#039#039' then'#010+ ' result := false'#010+ - '{$endif}'#010+ + '{$endif','}'#010+ ' else'#010+ ' result := true;'#010+ 'end;'#010+ #010+ 'procedure ChangeDir(const APath : String);'#010+ 'begin'#010+ - ' if No','t SetCurrentDir(APath) then'#010+ + ' if Not SetCurrentDir(APath) then'#010+ ' Raise EInstallerError.CreateFmt(SErrChangeDirFailed,[APath]);'#010+ 'end;'#010+ #010+ #010+ - 'procedure SearchFiles(AFileName, ASearchPathPrefix: string; Recursive:'+ - ' boolean; var List: TStrings);'#010+ + 'procedure SearchFiles(AFileName, ASearchPathPref','ix: string; Recursiv'+ + 'e: boolean; var List: TStrings);'#010+ #010+ - ' procedure AddRecursiveFiles(const S','earchDir, FileMask: string; Rec'+ - 'ursive: boolean);'#010+ + ' procedure AddRecursiveFiles(const SearchDir, FileMask: string; Recur'+ + 'sive: boolean);'#010+ ' var'#010+ ' Info : TSearchRec;'#010+ ' begin'#010+ - ' if FindFirst(SearchDir+AllFilesMask,faAnyFile and faDirectory,Info'+ - ')=0 then'#010+ + ' Writeln('#039'Searching '#039',Searchdir);'#010+ + ' if FindFirst(SearchDir','+AllFilesMask,faAnyFile and faDirectory,In'+ + 'fo)=0 then'#010+ ' begin'#010+ ' repeat'#010+ - ' if ((Info.Attr and faDirectory) = faDirect','ory) and (Info.N'+ - 'ame <> '#039'.'#039') and (Info.Name <> '#039'..'#039') and (Recursive) th'+ - 'en'#010+ - ' AddRecursiveFiles(SearchDir + Info.Name + PathDelim, FileM'+ - 'ask, Recursive);'#010+ + ' if ((Info.Attr and faDirectory) = faDirectory) and (Info.Nam'+ + 'e <> '#039'.'#039') and (Info.Name <> '#039'..'#039') and (Recursive) then'+ + #010+ + ' AddRecursiveFiles(SearchDir',' + Info.Name + PathDelim, Fil'+ + 'eMask, Recursive);'#010+ ' if ((Info.Attr and faDirectory) <> faDirectory) and IsWild(I'+ - 'nfo.Name, ','FileMask, FileNameCaseSensitive) then'#010+ + 'nfo.Name, FileMask, FileNameCaseSensitive) then'#010+ ' List.Add(SearchDir + Info.Name);'#010+ - ' until FindNext(Info)<>0;'#010+ + ' until FindNext(Info)<>0',';'#010+ ' end;'#010+ ' sysutils.FindClose(Info);'#010+ ' end;'#010+ @@ -2879,30 +3082,28 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' BasePath: string;'#010+ ' i: integer;'#010+ 'begin'#010+ - ' if IsRelativePath(AFil','eName) and (ASearchPathPrefix<>'#039#039') the'+ - 'n'#010+ + ' if IsRelativePath(AFileName) and (ASearchPathPrefix<>'#039#039') then'#010+ ' AFileName := IncludeTrailingPathDelimiter(ASearchPathPrefix) + AFi'+ - 'leName;'#010+ + 'le','Name;'#010+ #010+ ' BasePath := ExtractFilePath(ExpandFileName(AFileName));'#010+ #010+ - ' AddRecursiveFiles(BasePath, ExtractFileName(AFileName), Recu','rsive)'+ - ';'#010+ + ' AddRecursiveFiles(BasePath, ExtractFileName(AFileName), Recursive);'#010+ #010+ ' CurrDir:=GetCurrentDir;'#010+ ' for i := 0 to Pred(List.Count) do'#010+ - ' List[i] := ExtractRelativepath(IncludeTrailingPathDelimiter(Includ'+ - 'eTrailingPathDelimiter(CurrDir)+ASearchPathPrefix), List[i]);'#010+ + ' List[i] := ExtractRelativepath(Includ','eTrailingPathDelimiter(Incl'+ + 'udeTrailingPathDelimiter(CurrDir)+ASearchPathPrefix), List[i]);'#010+ 'end;'#010+ #010+ 'Const'#010+ - ' WhiteSpace = [#9,#10,#1','3,'#039' '#039'];'#010+ + ' WhiteSpace = [#9,#10,#13,'#039' '#039'];'#010+ ' QuoteChars = ['#039#039#039#039','#039'"'#039'];'#010+ #010+ 'procedure SplitCommand(const Cmd : String; var Exe, Options : String);'+ #010+ #010+ - 'Var'#010+ + 'Var'#010, ' I : Integer;'#010+ ' InQuote : Boolean;'#010+ ' LastQuote : Char;'#010+ @@ -2911,17 +3112,17 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'begin'#010+ ' S:=Trim(Cmd);'#010+ ' InQuote:=False;'#010+ - ' LastQuote:=#0;'#010, + ' LastQuote:=#0;'#010+ ' I:=1;'#010+ ' While (I<=Length(S)) and (Inquote or not (S[I] in whiteSpace)) do'#010+ ' begin'#010+ - ' If S[i] in QuoteChars then'#010+ + ' If S[i] in QuoteChars ','then'#010+ ' begin'#010+ ' InQuote:=Not (S[i]=LastQuote);'#010+ ' If InQuote then'#010+ ' LastQuote:=S[i]'#010+ ' else'#010+ - ' LastQu','ote:=#0;'#010+ + ' LastQuote:=#0;'#010+ ' end;'#010+ ' Inc(I);'#010+ ' end;'#010+ @@ -2930,49 +3131,60 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Options:=Trim(S);'#010+ 'end;'#010+ #010+ - 'procedure AddCustomFpmakeCommandlineOption(const ACommandLineOption, H'+ - 'elpMessage : string);'#010+ + 'proced','ure AddCustomFpmakeCommandlineOption(const ACommandLineOption,'+ + ' HelpMessage : string);'#010+ 'begin'#010+ - ' if not assigned(CustomFpmakeComman','dlineOptions) then'#010+ + ' if not assigned(CustomFpmakeCommandlineOptions) then'#010+ ' CustomFpmakeCommandlineOptions := TStringList.Create;'#010+ - ' CustomFpmakeCommandlineOptions.Values[ACommandLineOption]:=HelpMessa'+ - 'ge;'#010+ + ' CustomFpmakeCommandlineOptions.Va','lues[ACommandLineOption]:=HelpMes'+ + 'sage;'#010+ 'end;'#010+ #010+ 'function GetCustomFpmakeCommandlineOptionValue(const ACommandLineOptio'+ - 'n: string): s','tring;'#010+ + 'n: string): string;'#010+ 'begin'#010+ ' if not assigned(CustomFpMakeCommandlineValues) then'#010+ ' result := '#039#039#010+ ' else'#010+ - ' result := CustomFpMakeCommandlineValues.Values[ACommandLineOption]'+ - ';'#010+ + ' result := CustomF','pMakeCommandlineValues.Values[ACommandLineOptio'+ + 'n];'#010+ 'end;'#010+ #010+ 'function AddProgramExtension(const ExecutableName: string; AOS : TOS):'+ - ' ','string;'#010+ + ' string;'#010+ 'begin'#010+ ' if AOS in [Go32v2,Win32,Win64,Wince,OS2,EMX,Watcom] then'#010+ ' Result:=ExecutableName+ExeExt'#010+ - ' else'#010+ + ' els','e'#010+ ' Result:=ExecutableName;'#010+ 'end;'#010+ #010+ + 'function AddLibraryExtension(const LibraryName: string; AOS : TOS): st'+ + 'ring;'#010+ + 'begin'#010+ + ' if AOS in [Go32v2,Win32,Win64,Wince,OS2,EMX,Watcom] then'#010+ + ' Result:=LibraryName+DLLExt'#010+ + ' else if aOS in [darwin,macos,i','phonesim] then'#010+ + ' Result:=LibraryName+DyLibExt'#010+ + ' else'#010+ + ' Result:=LibraryName+SharedLibExt;'#010+ + 'end;'#010+ + #010+ 'function GetImportLibraryFilename(const UnitName: string; AOS: TOS): s'+ 'tring;'#010+ 'begin'#010+ - ' if AOS ','in [go32v2,watcom] then'#010+ - ' Result := '#039'libimp'#039'+UnitName'#010+ + ' if AOS in [go32v2,watcom] then'#010+ + ' Result := '#039'libimp'#039'+Un','itName'#010+ ' else if AOS in [os2,emx] then'#010+ ' Result := UnitName'#010+ ' else if AOS in [netware,netwlibc,macos] then'#010+ ' Result := '#039'lib'#039'+UnitName'#010+ ' else'#010+ ' Result := '#039'libimp'#039'+UnitName;'#010+ - ' Result := R','esult + LibExt;'#010+ + ' Result := Result + LibExt;'#010+ 'end;'#010+ #010+ - 'Function OptionListToString(L : TStrings) : String;'#010+ + 'Function OptionListToString','(L : TStrings) : String;'#010+ #010+ 'var'#010+ ' I : Integer;'#010+ @@ -2985,8 +3197,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' If (Result<>'#039#039') then'#010+ ' Result:=Result+'#039' '#039';'#010+ ' S:=L[I];'#010+ - ' If (Po','s('#039' '#039',S)<>0) or (S='#039#039') then'#010+ - ' Result:= Result + '#039'"'#039'+S+'#039'"'#039#010+ + ' If (Pos('#039' '#039',S)<>0) or (S='#039#039') then'#010+ + ' Result:= Result',' + '#039'"'#039'+S+'#039'"'#039#010+ ' else'#010+ ' Result:= Result + S;'#010+ ' end;'#010+ @@ -3001,9 +3213,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Result:=Nil;'#010+ ' If (S='#039#039') then'#010+ ' Exit;'#010+ - ' Res','ult:=TStringList.Create;'#010+ + ' Result:=TStringList.Create;'#010+ ' Repeat'#010+ - ' P:=Pos('#039' '#039',S);'#010+ + ' P:=Pos('#039' '#039',','S);'#010+ ' If P=0 then'#010+ ' P:=Length(S)+1;'#010+ ' Result.Add(Copy(S,1,P-1));'#010+ @@ -3015,9 +3227,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - '{$ifde','f HAS_UNIT_PROCESS}'#010+ - 'function GetCompilerInfo(const ACompiler,AOptions:string; ReadStdErr: '+ - 'boolean):string;'#010+ + '{$ifdef HAS_UNIT_PROCESS}'#010+ + 'function GetCompilerInfo(cons','t ACompiler,AOptions:string; ReadStdErr'+ + ': boolean):string;'#010+ 'const'#010+ ' BufSize = 1024;'#010+ 'var'#010+ @@ -3025,28 +3237,28 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Buf: array [0..BufSize - 1] of char;'#010+ ' Count: longint;'#010+ 'begin'#010+ - ' S:=TProcess.Create(Nil);'#010, + ' S:=TProcess.Create(Nil);'#010+ ' S.Commandline:=ACompiler+'#039' '#039'+AOptions;'#010+ - ' S.Options:=[poUsePipes,poWaitOnExit];'#010+ + ' S.Opti','ons:=[poUsePipes,poWaitOnExit];'#010+ ' S.execute;'#010+ ' Count:=s.output.read(buf,BufSize);'#010+ ' if (count=0) and ReadStdErr then'#010+ ' Count:=s.Stderr.read(buf,BufSize);'#010+ ' S.Free;'#010+ - ' SetLength(Result,Count)',';'#010+ + ' SetLength(Result,Count);'#010+ ' Move(Buf,Result[1],Count);'#010+ 'end;'#010+ - '{$endif HAS_UNIT_PROCESS}'#010+ + '{$endif HAS_U','NIT_PROCESS}'#010+ #010+ 'function GetDefaultLibGCCDir(CPU : TCPU;OS: TOS; var ErrorMessage: str'+ 'ing): string;'#010+ #010+ ' function Get4thWord(const AString: string): string;'#010+ ' var p: pchar;'#010+ - ' spacecount: inte','ger;'#010+ + ' spacecount: integer;'#010+ ' StartWord: pchar;'#010+ ' begin'#010+ - ' result:='#039#039';'#010+ + ' result:=',#039#039';'#010+ ' if length(AString)>6 then'#010+ ' begin'#010+ ' p := @AString[1];'#010+ @@ -3054,9 +3266,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' StartWord:=nil;'#010+ ' while (not (p^ in [#0,#10,#13])) and ((p^<>'#039' '#039') or (Star'+ 'tWord=nil)) do'#010+ - ' ',' begin'#010+ + ' begin'#010+ ' if p^='#039' '#039' then'#010+ - ' begin'#010+ + ' beg','in'#010+ ' inc(spacecount);'#010+ ' if spacecount=3 then StartWord:=p+1;'#010+ ' end;'#010+ @@ -3064,8 +3276,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' end;'#010+ ' if StartWord<>nil then'#010+ ' begin'#010+ - ' SetLength(result,p-','StartWord);'#010+ - ' move(StartWord^,result[1],p-StartWord);'#010+ + ' SetLength(result,p-StartWord);'#010+ + ' move(StartWord^,result[1],p-S','tartWord);'#010+ ' end'#010+ ' else'#010+ ' result := '#039#039';'#010+ @@ -3074,35 +3286,35 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ ' function GetGccDirArch(const ACpuType, GCCParams: string) : string;'#010+ ' var ExecResult: string;'#010+ - ' libgccFilename',': string;'#010+ + ' libgccFilename: string;'#010+ ' GccExecutable: string;'#010+ ' begin'#010+ - ' result := '#039#039';'#010+ + ' ',' result := '#039#039';'#010+ ' GccExecutable := ExeSearch(AddProgramExtension('#039'gcc'#039', OS),'+ 'Sysutils.GetEnvironmentVariable('#039'PATH'#039'));'#010+ ' if FileExists(GccExecutable) then'#010+ ' begin'#010+ - '{$ifdef HAS_UNIT_PROC','ESS}'#010+ - ' ExecResult:=GetCompilerInfo(GccExecutable,'#039'-v '#039'+GCCParam'+ - 's, True);'#010+ + '{$ifdef HAS_UNIT_PROCESS}'#010+ + ' ExecResult:=GetCompilerInfo(GccExecuta','ble,'#039'-v '#039'+GCCPar'+ + 'ams, True);'#010+ ' libgccFilename:=Get4thWord(ExecResult);'#010+ ' // Use IsRelativePath to check if the 4th word is an (absolute) '+ 'path.'#010+ - ' // This depends on the language set','tings. In English the 4th w'+ - 'ord is'#010+ - ' // empty, if this particular gcc version does not return the lib'+ - 'gcc-'#010+ + ' // This depends on the language settings. In English the 4th wor'+ + 'd is'#010+ + ' // empty,',' if this particular gcc version does not return the l'+ + 'ibgcc-'#010+ ' // filename on -v. But in other languages (e.g. Dutch) it may be'+ ' another'#010+ ' // word.'#010+ - ' if IsRelativePath(libgccFilenam','e) then'#010+ + ' if IsRelativePath(libgccFilename) then'#010+ ' libgccFilename:='#039#039';'#010+ - ' if libgccFilename='#039#039' then'#010+ + ' if libg','ccFilename='#039#039' then'#010+ ' libgccFilename:=GetCompilerInfo(GccExecutable,'#039'--print-lib'+ 'gcc-file-name '#039'+GCCParams, False);'#010+ ' result := ExtractFileDir(libgccFilename);'#010+ - '{$else HAS_UNIT_PROCESS','}'#010+ - ' ErrorMessage := SWarnNoFCLProcessSupport;'#010+ + '{$else HAS_UNIT_PROCESS}'#010+ + ' ErrorMessage := SWarnNoFCLProcessSupport;',#010+ '{$endif HAS_UNIT_PROCESS}'#010+ ' end'#010+ ' else'#010+ @@ -3113,51 +3325,279 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' result := '#039#039';'#010+ ' ErrorMessage:='#039#039';'#010+ ' if OS in [freebsd, openbsd, dragonfly] then'#010+ - ' resul','t := '#039'/usr/local/lib'#039#010+ - ' else if OS = netbsd then'#010+ + ' result := '#039'/usr/local/lib'#039#010+ + ' else if OS = netbsd then'#010, ' result := '#039'/usr/pkg/lib'#039#010+ ' else if OS = linux then'#010+ ' case CPU of'#010+ ' i386: result := GetGccDirArch('#039'cpui386'#039','#039'-m32'#039+ ');'#010+ ' x86_64: result := GetGccDirArch('#039'cpux86_64'#039','#039'-m64'#039+ - ');'#010, - ' powerpc: result := GetGccDirArch('#039'cpupowerpc'#039','#039'-m32'+ - #039');'#010+ + ');'#010+ + ' powerpc: result := GetGccDirArch('#039'cpupower','pc'#039','#039'-m'+ + '32'#039');'#010+ ' powerpc64:result := GetGccDirArch('#039'cpupowerpc64'#039','#039'-m'+ '64'#039');'#010+ ' aarch64: result := GetGccDirArch('#039'cpuaarch64'#039','#039#039')'+ ';'#010+ + ' riscv32: result := GetGccDirArch('#039'cpuriscv64'#039','#039'-mar'+ + 'ch=rv32imafdc'#039');'#010+ + ' riscv64: result := GetG','ccDirArch('#039'cpuriscv64'#039','#039'-m'+ + 'arch=rv64imafdc'#039');'#010+ ' end {case}'#010+ ' else if OS = darwin then'#010+ - ' case CPU o','f'#010+ + ' case CPU of'#010+ ' i386: result := GetGccDirArch('#039'cpui386'#039','#039'-arch i'+ '386'#039');'#010+ ' x86_64: result := GetGccDirArch('#039'cpux86_64'#039','#039'-arch'+ ' x86_64'#039');'#010+ - ' powerpc: result := GetGccDirArch('#039'cpupowerpc'#039','#039'-arc'+ - 'h ppc'#039');'#010+ - ' powerpc64:result := GetGccDirAr','ch('#039'cpupowerpc64'#039','#039'-'+ - 'arch ppc64'#039');'#010+ + ' ',' powerpc: result := GetGccDirArch('#039'cpupowerpc'#039','#039'-a'+ + 'rch ppc'#039');'#010+ + ' powerpc64:result := GetGccDirArch('#039'cpupowerpc64'#039','#039'-a'+ + 'rch ppc64'#039');'#010+ ' { this target uses clang }'#010+ ' aarch64: result := '#039#039#010+ ' end; {case}'#010+ 'end;'#010+ #010+ - 'constructor TPackageVariant.Create(ACollection: TCollection);'#010+ + 'function GetPluginMan','ager: TfpmPluginManager;'#010+ 'begin'#010+ - ' inherited Create(ACollection);'#010+ - ' FTargets := TTarget','s.Create(TTarget);'#010+ - ' FOptions := TStringList.Create;'#010+ - ' FIncludePath:=TConditionalStrings.Create(TConditionalString);'#010+ - ' FSourcePath:=TConditionalStrings.Create(TConditionalString);'#010+ + ' if not assigned(GPluginManager) then'#010+ + ' GPluginManager := TfpmPluginManager.Create;'#010+ + ' Result := GPluginManager;'#010+ 'end;'#010+ #010+ - 'destructor TPackageVariant.Destroy;'#010+ - 'begin'#010+ - ' FOptions.F','ree;'#010+ - ' FTargets.Free;'#010+ - ' FIncludePath.Free;'#010+ + '{ TfpmResolvePackagePathsPlugin }'#010+ + #010+ + 'procedure TfpmResolvePackagePathsPlugin.ResolveUnitCo','nfigFilenameFor'+ + 'BasePath('#010+ + ' ABuildEngine: TBuildEngine; APackage: TPackage; ABasePath: string;'#010+ + ' out AContinue: Boolean);'#010+ + 'var'#010+ + ' IsPackageSourceLocation: boolean;'#010+ + ' ASubDir: string;'#010+ + ' AnUnitConfigFilename: string;'#010+ + ' PackageBaseDir: string;'#010+ + 'be','gin'#010+ + ' if APackage.State=tsNotFound then'#010+ + ' // When the state is tsNotFound, the package is not part of this f'+ + 'pmake, and only the package-name is known.'#010+ + ' // In this case search for the package-name.'#010+ + ' // This is not right for packages ','where the package-name and dir'+ + 'ectory name of the source-files are'#010+ + ' // not the same. We don'#039't have a better option, though.'#010+ + ' ASubDir:=APackage.Name'#010+ + ' else'#010+ + ' ASubDir:=APackage.Directory;'#010+ + #010+ + ' IsPackageSourceLocation:=ABuildEngine.SysFil','eExists(IncludeTrailin'+ + 'gPathDelimiter(IncludeTrailingPathDelimiter(ABasePath)+ASubDir)+FPMake'+ + 'PPFile);'#010+ + ' if IsPackageSourceLocation then'#010+ + ' begin'#010+ + ' PackageBaseDir:=IncludeTrailingPathDelimiter(IncludeTrailingPath'+ + 'Delimiter(ABasePath)+ASub','Dir);'#010+ + ' AnUnitConfigFileName:=PackageBaseDir+APackage.GetUnitConfigOutpu'+ + 'tFilename(Defaults.CPU,Defaults.OS);'#010+ + ' PackageBaseDir:=IncludeTrailingPathDelimiter(PackageBaseDir+APac'+ + 'kage.GetUnitsOutputDir(defaults.CPU, Defaults.OS));'#010+ + ' e','nd'#010+ + ' else'#010+ + ' begin'#010+ + ' PackageBaseDir:=IncludeTrailingPathDelimiter(ABasePath);'#010+ + ' AnUnitConfigFileName:=IncludeTrailingPathDelimiter(ABuildEngine.'+ + 'GetUnitConfigFilesInstallDir(ABasePath))+APackage.Name+FpmkExt;'#010+ + ' PackageBaseDir:=I','ncludeTrailingPathDelimiter(IncludeTrailingPa'+ + 'thDelimiter(ABasePath)+APackage.GetUnitsOutputDir(Defaults.CPU, Defaul'+ + 'ts.OS))+APackage.Name;'#010+ + ' end;'#010+ + #010+ + ' if (PackageBaseDir<>'#039#039') and ABuildEngine.SysDirectoryExists(Pa'+ + 'ckageBaseDir) then'#010+ + ' begin',#010+ + ' AnUnitConfigFilename:=APackage.Dictionary.ReplaceStrings(AnUnitC'+ + 'onfigFilename);'#010+ + ' if ABuildEngine.SysFileExists(AnUnitConfigFilename) then'#010+ + ' APackage.UnitConfigFileName:=AnUnitConfigFilename'#010+ + ' else'#010+ + ' begin'#010+ + ' ',' // To avoid that directories which do not contain installe'+ + 'd packages'#010+ + ' // check that there is an unit-configfile, or Packages.fpc f'+ + 'ile. (The'#010+ + ' // latter to detect packages compiled using old style Makefi'+ + 'le'#039's, like'#010+ + ' ',' // the rtl). These directories which are not packages may '+ + 'exist in'#010+ + ' // Lazarus-source-repositories.'#010+ + ' if not ABuildEngine.SysFileExists(ConcatPaths([PackageBaseDi'+ + 'r, '#039'Package.fpc'#039'])) then'#010+ + ' begin'#010+ + ' i','f IsPackageSourceLocation then'#010+ + ' begin'#010+ + ' // There is no way that I know of to confirm that a di'+ + 'rectory'#010+ + ' // contains the compiled sources of the rtl. So we nee'+ + 'd a'#010+ + ' // workaround. This',' test is skipped in case of the r'+ + 'tl.'#010+ + ' if APackage.Name<>'#039'rtl'#039' then'#010+ + ' begin'#010+ + ' Installer.Log(vlInfo,Format(SInfoSrcDirectoryNoPkg,['+ + 'PackageBaseDir, APackage.Name]));'#010+ + ' Exit;'#010+ + ' ',' end;'#010+ + ' end'#010+ + ' else'#010+ + ' begin'#010+ + ' Installer.Log(vlInfo,Format(SInfoDirectoryNoPackage,[P'+ + 'ackageBaseDir, APackage.Name]));'#010+ + ' Exit;'#010+ + ' end;'#010+ + ' end;',#010+ + ' end;'#010+ + #010+ + ' APackage.UnitDir:=PackageBaseDir;'#010+ + ' AContinue := False;'#010+ + #010+ + ' if IsPackageSourceLocation then'#010+ + ' // Set the state to tsNoCompile and not tsCompiled. Because pa'+ + 'ckages'#010+ + ' // in the tsCompiled state trigger ','a rebuild of packages tha'+ + 't depend'#010+ + ' // on it.'#010+ + ' APackage.FTargetState:=tsNoCompile'#010+ + ' else if not (APackage.FTargetState in [tsCompiled, tsNoCompile])'+ + ' then'#010+ + ' APackage.FTargetState:=tsInstalled;'#010+ + ' end'#010+ + ' else'#010+ + ' AConti','nue := True;'#010+ + 'end;'#010+ + #010+ + 'procedure TfpmResolvePackagePathsPlugin.BeforeResolvePackagePath(ABuil'+ + 'dEngine: TBuildEngine;'#010+ + ' APackage: TPackage; out AContinue: Boolean);'#010+ + 'begin'#010+ + ' if (APackage.State in [tsCompiled, tsNoCompile, tsInstalled]) then'#010+ + ' Re','solveUnitConfigFilenameForBasePath(ABuildEngine, APackage, ABu'+ + 'ildEngine.StartDir, AContinue)'#010+ + ' else'#010+ + ' AContinue := True;'#010+ + 'end;'#010+ + #010+ + 'procedure TfpmResolvePackagePathsPlugin.ResolvePackagePath(ABuildEngin'+ + 'e: TBuildEngine;'#010+ + ' APackage: TPackage; Se','archPath: string; out AContinue: Boolean);'#010+ + 'begin'#010+ + ' ResolveUnitConfigFilenameForBasePath(ABuildEngine, APackage, SearchP'+ + 'ath, AContinue)'#010+ + 'end;'#010+ + #010+ + '{ TfpmPlugin }'#010+ + #010+ + 'function TfpmPlugin.GetName: string;'#010+ + 'begin'#010+ + ' Result := ClassName;'#010+ + 'end;'#010+ + #010+ + 'procedure T','fpmPlugin.BeforeResolvePackagePath(ABuildEngine: TBuildEn'+ + 'gine; APackage: TPackage;'#010+ + ' out AContinue: Boolean);'#010+ + 'begin'#010+ + ' AContinue := True;'#010+ + 'end;'#010+ + #010+ + 'procedure TfpmPlugin.ResolvePackagePath(ABuildEngine: TBuildEngine; AP'+ + 'ackage: TPackage;'#010+ + ' SearchD','irectory: string; out AContinue: Boolean);'#010+ + 'begin'#010+ + ' AContinue := True;'#010+ + 'end;'#010+ + #010+ + 'procedure TfpmPlugin.AfterResolvePackagePath(ABuildEngine: TBuildEngin'+ + 'e; APackage: TPackage;'#010+ + ' out AContinue: Boolean);'#010+ + 'begin'#010+ + ' AContinue := True;'#010+ + 'end;'#010+ + #010+ + '{ TfpmPlugi','nManager }'#010+ + #010+ + 'destructor TfpmPluginManager.Destroy;'#010+ + 'var'#010+ + ' i: Integer;'#010+ + 'begin'#010+ + ' for i := 0 to High(FPlugins) do'#010+ + ' FPlugins[i].Free;'#010+ + ' inherited Destroy;'#010+ + 'end;'#010+ + #010+ + 'procedure TfpmPluginManager.RegisterPlugin(APlugin: TfpmPluginClass);'#010+ + 'begin'#010+ + ' SetLe','ngth(FPlugins, Length(FPlugins)+1);'#010+ + ' FPlugins[high(FPlugins)] := APlugin.Create;'#010+ + 'end;'#010+ + #010+ + 'procedure TfpmPluginManager.BeforeResolvePackagePath(ABuildEngine: TBu'+ + 'ildEngine; APackage: TPackage;'#010+ + ' out AContinue: Boolean);'#010+ + 'var'#010+ + ' i: Integer;'#010+ + 'begin'#010, + ' for i := 0 to high(FPlugins) do'#010+ + ' begin'#010+ + ' FPlugins[i].BeforeResolvePackagePath(ABuildEngine, APackage, ACo'+ + 'ntinue);'#010+ + ' if not AContinue then'#010+ + ' Exit;'#010+ + ' end;'#010+ + 'end;'#010+ + #010+ + 'procedure TfpmPluginManager.ResolvePackagePath(ABuildEngine:',' TBuildE'+ + 'ngine; APackage: TPackage;'#010+ + ' SearchPath: string; out AContinue: Boolean);'#010+ + 'var'#010+ + ' i: Integer;'#010+ + 'begin'#010+ + ' for i := 0 to high(FPlugins) do'#010+ + ' begin'#010+ + ' FPlugins[i].ResolvePackagePath(ABuildEngine, APackage, SearchPat'+ + 'h, AContinue);'#010+ + ' ',' if not AContinue then'#010+ + ' Exit;'#010+ + ' end;'#010+ + 'end;'#010+ + #010+ + 'procedure TfpmPluginManager.AfterResolvePackagePath(ABuildEngine: TBui'+ + 'ldEngine; APackage: TPackage;'#010+ + ' out AContinue: Boolean);'#010+ + 'var'#010+ + ' i: Integer;'#010+ + 'begin'#010+ + ' for i := 0 to high(FPlugins) do'#010+ + ' ',' begin'#010+ + ' FPlugins[i].AfterResolvePackagePath(ABuildEngine, APackage, ACon'+ + 'tinue);'#010+ + ' if not AContinue then'#010+ + ' Exit;'#010+ + ' end;'#010+ + 'end;'#010+ + #010+ + 'constructor TPackageVariant.Create(ACollection: TCollection);'#010+ + 'begin'#010+ + ' inherited Create(ACollection',');'#010+ + ' FTargets := TTargets.Create(TTarget);'#010+ + ' FOptions := TStringList.Create;'#010+ + ' FIncludePath:=TConditionalStrings.Create(TConditionalString);'#010+ + ' FSourcePath:=TConditionalStrings.Create(TConditionalString);'#010+ + 'end;'#010+ + #010+ + 'destructor TPackageVariant.Des','troy;'#010+ + 'begin'#010+ + ' FOptions.Free;'#010+ + ' FTargets.Free;'#010+ + ' FIncludePath.Free;'#010+ ' FSourcePath.Free;'#010+ ' inherited Destroy;'#010+ 'end;'#010+ @@ -3167,16 +3607,15 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'procedure TPackageVariants.SetDefaultPackageVariantName(AValue: string'+ ');'#010+ 'begin'#010+ - ' if FDefaultPackageVariantName=AValue then Exit;',#010+ + ' if FDefaultPackageVaria','ntName=AValue then Exit;'#010+ ' if not assigned(ItemByName(avalue)) then'#010+ ' raise exception.CreateFmt(SErrPackVarNotExist,[AValue]);'#010+ ' FDefaultPackageVariantName:=AValue;'#010+ 'end;'#010+ #010+ - 'function TPackageVariants.GetActivePackageVariant: TPackageVariant;'#010+ + 'function TPackageVariants.GetActivePackageVariant: TPackageVariant;',#010+ 'begin'#010+ - ' result := ItemB','yName(ActivePackageVariantName) as TPackageVariant;'+ - #010+ + ' result := ItemByName(ActivePackageVariantName) as TPackageVariant;'#010+ 'end;'#010+ #010+ 'function TPackageVariants.GetDefaultPackageVariant: TPackageVariant;'#010+ @@ -3184,25 +3623,25 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' result := ItemByName(DefaultPackageVariantName) as TPackageVariant;'#010+ 'end;'#010+ #010+ - 'procedure TPackageVariants.SetA','ctivePackageVariantName(AValue: strin'+ + 'procedu','re TPackageVariants.SetActivePackageVariantName(AValue: strin'+ 'g);'#010+ 'begin'#010+ ' if FActivePackageVariantName=AValue then Exit;'#010+ ' if not assigned(ItemByName(avalue)) then'#010+ ' raise exception.CreateFmt(SErrPackVarNotExist,[AValue]);'#010+ - ' FActivePackageVariantName:=AValue;'#010+ - 'end',';'#010+ + ' FActivePackage','VariantName:=AValue;'#010+ + 'end;'#010+ #010+ 'function TPackageVariants.Add(AName: String): TPackageVariant;'#010+ 'begin'#010+ ' result := self.add as TPackageVariant;'#010+ ' result.Name := AName;'#010+ ' if FDefaultPackageVariantName='#039#039' then'#010+ - ' FDefaultPackageVariantName:=AName;'#010+ + ' FDefaultPackageVariantName:=AName;'#010, 'end;'#010+ #010+ #010+ - '{ TConditionalDes','tStrings }'#010+ + '{ TConditionalDestStrings }'#010+ #010+ 'function TConditionalDestStrings.GetConditionalString(Index : Integer)'+ ': TConditionalDestString;'#010+ @@ -3210,8 +3649,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Result:=TConditionalDestString(Items[Index]);'#010+ 'end;'#010+ #010+ - 'procedure TConditionalDestStrings.SetConditionalString(Index : Integer'+ - '; ','AValue: TConditionalDestString);'#010+ + 'procedure TConditionalDestStrings.SetConditional','String(Index : Integ'+ + 'er; AValue: TConditionalDestString);'#010+ 'begin'#010+ ' Items[Index]:=AValue;'#010+ 'end;'#010+ @@ -3222,23 +3661,23 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' inherited Create(AClass);'#010+ 'end;'#010+ #010+ - 'function TConditionalDestStrings.Add(const Value: ','String; ADestPath:'+ + 'function TConditionalDestS','trings.Add(const Value: String; ADestPath:'+ ' String): TConditionalDestString;'#010+ 'begin'#010+ ' Result:=Add(Value, AllCPUs, AllOSes, ADestPath);'#010+ 'end;'#010+ #010+ 'function TConditionalDestStrings.Add(const Value: String; const OSes: '+ - 'TOSes; ADestPath: String): TConditionalDestString;'#010+ - 'begi','n'#010+ + 'TOSes; ADestPath: String): TCon','ditionalDestString;'#010+ + 'begin'#010+ ' Result:=Add(Value, AllCPUs, OSes, ADestPath);'#010+ 'end;'#010+ #010+ '{$ifdef cpu_only_overloads}'#010+ 'Function TConditionalDestStrings.Add(Const Value : String;const CPUs:T'+ 'CPUs; ADestPath: String) : TConditionalDestString;inline;'#010+ - 'begin'#010+ - ' Result:=Add(Value, C','PUs, AllOSes, ADestPath);'#010+ + 'begi','n'#010+ + ' Result:=Add(Value, CPUs, AllOSes, ADestPath);'#010+ 'end;'#010+ '{$endif cpu_only_overloads}'#010+ #010+ @@ -3246,7 +3685,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'function TConditionalDestStrings.Add(const Value: String; const CPUs: '+ 'TCPUs; const OSes: TOSes; ADestPath: String): TConditionalDestString;'#010+ 'var'#010+ - ' ACondString: TConditionalDestStri','ng;'#010+ + ' ACondStri','ng: TConditionalDestString;'#010+ 'begin'#010+ ' ACondString := inherited Add(Value,CPUs,OSes) as TConditionalDestStr'+ 'ing;'#010+ @@ -3256,7 +3695,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ '{ TPackageDictionary }'#010+ #010+ - 'function TPackageDictionary.GetValue(const AName, Args: String): St','r'+ + 'function TPackageDictionary.GetValue(const ','AName, Args: String): Str'+ 'ing;'#010+ 'Var'#010+ ' O : TObject;'#010+ @@ -3268,7 +3707,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' if assigned(MasterDictionary) then'#010+ ' result := MasterDictionary.GetValue(AName,Args)'#010+ ' else'#010+ - ' result := GlobalDictiona','ry.GetValue(AName,Args);'#010+ + ' ','result := GlobalDictionary.GetValue(AName,Args);'#010+ ' Exit;'#010+ ' end;'#010+ ' O:=Flist.Objects[I];'#010+ @@ -3280,15 +3719,15 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ '{$ifndef NO_THREADING}'#010+ #010+ - '{ TCompileWorkerThread }'#010+ + '{ T','CompileWorkerThread }'#010+ #010+ - 'c','onstructor TCompileWorkerThread.Create(ABuildEngine: TBuildEngine; '+ - 'NotifyMainThreadEvent: PRTLEvent);'#010+ + 'constructor TCompileWorkerThread.Create(ABuildEngine: TBuildEngine; No'+ + 'tifyMainThreadEvent: PRTLEvent);'#010+ 'begin'#010+ ' inherited Create(false);'#010+ ' FNotifyStartTask := RTLEventCreate;'#010+ ' FBuildEngine := ABuildEngine;'#010+ - ' FNotifyMainThreadEvent:=NotifyMai','nThreadEvent;'#010+ + ' FNotifyMa','inThreadEvent:=NotifyMainThreadEvent;'#010+ 'end;'#010+ #010+ 'destructor TCompileWorkerThread.Destroy;'#010+ @@ -3301,15 +3740,28 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'begin'#010+ ' while not Terminated do'#010+ ' begin'#010+ + ' ',' { Make sure all of our results are committed before we set (F)Do'+ + 'ne to true.'#010+ + ' While RTLeventSetEvent implies a barrier, once the main thread i'+ + 's notified'#010+ + ' it will walk over all threads and look for those that have Done='+ + 'true -> it'#010+ + ' ',' can look at a thread between that thread setting FDone to true'+ + ' and it'#010+ + ' calling RTLEventSetEvent }'#010+ + ' WriteBarrier;'#010+ ' FDone:=true;'#010+ - ' RTLeve','ntSetEvent(FNotifyMainThreadEvent);'#010+ + ' RTLeventSetEvent(FNotifyMainThreadEvent);'#010+ ' RTLeventWaitFor(FNotifyStartTask,500);'#010+ - ' if not FDone then'#010+ + ' if n','ot FDone then'#010+ ' begin'#010+ + ' { synchronise with WriteBarrier in mainthread for same reason as'+ + ' above }'#010+ + ' ReadBarrier;'#010+ ' FBuildEngine.log(vlInfo,'#039'Compiling: '#039'+APackage.Name);'#010+ ' FCompilationOK:=false;'#010+ ' try'#010+ - ' FBuildEngine.Compile','(APackage);'#010+ + ' FBuildEng','ine.Compile(APackage);'#010+ ' FCompilationOK:=true;'#010+ ' except'#010+ ' on E: Exception do'#010+ @@ -3321,7 +3773,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ '{$endif NO_THREADING}'#010+ #010+ - '{***********************************************************','********'+ + '{************************************************','*******************'+ '*********'#010+ ' TUnsortedDuplicatesStringList'#010+ '**********************************************************************'+ @@ -3329,8 +3781,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'function TUnsortedDuplicatesStringList.Add(const S: string): Integer;'#010+ #010+ - 'begin'#010+ - ' result ',':= IndexOf(S);'#010+ + 'begi','n'#010+ + ' result := IndexOf(S);'#010+ ' If result > -1 then'#010+ ' Case DUplicates of'#010+ ' DupIgnore : Exit;'#010+ @@ -3339,8 +3791,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' inherited Add(S);'#010+ 'end;'#010+ #010+ - '{*********************************************************************'+ - '*******'#010, + '{******************************************************************','*'+ + '*********'#010+ ' TNamedItem'#010+ '**********************************************************************'+ '******}'#010+ @@ -3349,7 +3801,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'begin'#010+ ' if FName=AValue then exit;'#010+ - ' With TNamedCollection(Collec','tion) do'#010+ + ' With TNamedCollec','tion(Collection) do'#010+ ' If UniqueNames then'#010+ ' If (IndexOfName(AVAlue)<>-1) then'#010+ ' Raise ECollectionError.CreateFmt(SErrNameExists,[AValue]);'#010+ @@ -3357,15 +3809,15 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - '{*********************************************************************'+ - '******','*'#010+ + '{****************************************************************','***'+ + '*********'#010+ ' TNamedCollection'#010+ '**********************************************************************'+ '******}'#010+ #010+ 'function TNamedCollection.GetItem(Index: Integer): TNamedItem;'#010+ 'begin'#010+ - ' result := TNamedItem(inherited getItem(','index));'#010+ + ' result := TNamedItem(inherit','ed getItem(index));'#010+ 'end;'#010+ #010+ 'procedure TNamedCollection.SetItem(Index: Integer; AValue: TNamedItem)'+ @@ -3377,9 +3829,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'function TNamedCollection.IndexOfName(const AName: String): Integer;'#010+ #010+ 'begin'#010+ - ' Result:=Count-1;'#010+ - ' While (R','esult>=0) and (CompareText(TNamedItem(Items[Result]).FName'+ - ',AName)<>0) do'#010+ + ' Result:=Count-1;',#010+ + ' While (Result>=0) and (CompareText(TNamedItem(Items[Result]).FName,A'+ + 'Name)<>0) do'#010+ ' Dec(Result);'#010+ 'end;'#010+ #010+ @@ -3391,8 +3843,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'begin'#010+ ' I:=IndexOfName(AName);'#010+ - ' If (I=-1) Then'#010+ - ' ','Raise ECollectionError.CreateFmt(SErrNoSuchName,[AName]);'#010+ + ' If (I=-1',') Then'#010+ + ' Raise ECollectionError.CreateFmt(SErrNoSuchName,[AName]);'#010+ ' Result:=TNamedItem(Items[i]);'#010+ 'end;'#010+ #010+ @@ -3400,7 +3852,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( '{*********************************************************************'+ '*******'#010+ ' TNamedItemList'#010+ - '*********************','***********************************************'+ + '**********','**********************************************************'+ '********}'#010+ #010+ 'function TNamedItemList.GetNamedItem(Index : Integer): TNamedItem;'#010+ @@ -3409,7 +3861,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'procedure TNamedItemList.SetNamedItem(Index : Integer; const AValu','e:'+ + 'procedure TNamedItemList.SetNamedItem(Index : Integer; ','const AValue:'+ ' TNamedItem);'#010+ 'begin'#010+ ' Items[Index]:=AValue;'#010+ @@ -3421,8 +3873,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Result:=Count-1;'#010+ ' While (Result>=0) and (CompareText(GetNamedItem(Result).Name,AName)<'+ '>0) do'#010+ - ' Dec(Result);'#010+ - 'e','nd;'#010+ + ' Dec','(Result);'#010+ + 'end;'#010+ #010+ #010+ 'function TNamedItemList.ItemByName(const ANAme: String): TNamedItem;'#010+ @@ -3432,8 +3884,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' I:=IndexOfName(AName);'#010+ ' If (I=-1) Then'#010+ ' Raise ECollectionError.CreateFmt(SErrNoSuchName,[AName]);'#010+ - ' Result:=TNamedItem(Items[i]);'#010+ - 'end;',#010+ + ' Result:=TNamedItem(Item','s[i]);'#010+ + 'end;'#010+ #010+ #010+ '{*********************************************************************'+ @@ -3442,7 +3894,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( '**********************************************************************'+ '******}'#010+ #010+ - 'function TTargets.GetTargetItem(Index :',' Integer): TTarget;'#010+ + 'function TTargets.GetTargetI','tem(Index : Integer): TTarget;'#010+ 'begin'#010+ ' Result:=TTarget(Items[Index]);'#010+ 'end;'#010+ @@ -3454,7 +3906,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'procedure TTargets.SetTargetItem(Index : Integer; const AValue:',' TTar'+ + 'procedure TTargets.SetTargetItem(Index : Integer; co','nst AValue: TTar'+ 'get);'#010+ 'begin'#010+ ' Items[Index]:=AValue;'#010+ @@ -3466,10 +3918,10 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Result:=Add as TTarget;'#010+ ' Result.Name:=AUnitName;'#010+ ' Result.XML:=AXMLName;'#010+ - ' Result.TargetType:=ttFPDoc;'#010+ + ' Result.TargetType:=ttFPDoc',';'#010+ 'end;'#010+ #010+ - 'Fun','ction TTargets.AddUnit(Const AUnitName : String) : TTarget;'#010+ + 'Function TTargets.AddUnit(Const AUnitName : String) : TTarget;'#010+ 'begin'#010+ ' Result:=AddUnit(AUnitName,AllCPUs,AllOSes);'#010+ 'end;'#010+ @@ -3478,7 +3930,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'Function TTargets.AddUnit(Const AUnitName : String;const OSes:TOSes) :'+ ' TTarget;'#010+ 'begin'#010+ - ' Result:=AddUnit(AUnitName,AllCPUs',',OSes);'#010+ + ' Result:=AddUnit(AUnitN','ame,AllCPUs,OSes);'#010+ 'end;'#010+ #010+ #010+ @@ -3491,7 +3943,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( '{$endif cpu_only_overloads}'#010+ #010+ #010+ - 'Function TTargets.AddUnit(Const A','UnitName : String;const CPUs:TCPUs;'+ + 'Function TTargets.AddU','nit(Const AUnitName : String;const CPUs:TCPUs;'+ 'const OSes:TOSes) : TTarget;'#010+ 'begin'#010+ ' Result:=Add as TTarget;'#010+ @@ -3502,7 +3954,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'Function TTargets.AddImplicitUnit(Const ','AUnitName : String;InstallUn'+ + 'Function TTargets.AddImplicit','Unit(Const AUnitName : String;InstallUn'+ 'it:boolean=true) : TTarget;'#010+ 'begin'#010+ ' Result:=AddImplicitUnit(AUnitName,AllCPUs,AllOSes,InstallUnit);'#010+ @@ -3510,7 +3962,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ #010+ 'Function TTargets.AddImplicitUnit(Const AUnitName : String;const OSes:'+ - 'TOSes;InstallUnit:boolean=true) : T','Target;'#010+ + 'TOSes;InstallUnit:boolea','n=true) : TTarget;'#010+ 'begin'#010+ ' Result:=AddImplicitUnit(AUnitName,AllCPUs,OSes,InstallUnit);'#010+ 'end;'#010+ @@ -3519,7 +3971,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'Function TTargets.AddImplicitUnit(Const AUnitName : String;const CPUs:'+ 'TCPUs;InstallUnit:boolean=true) : TTarget;'#010+ 'begin'#010+ - ' Result:=AddImplicitUnit(AUnitName,C','PUs,AllOSes,InstallUnit);'#010+ + ' Result:=AddImplicitUnit(','AUnitName,CPUs,AllOSes,InstallUnit);'#010+ 'end;'#010+ #010+ #010+ @@ -3528,7 +3980,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'begin'#010+ ' Result:=Add as TTarget;'#010+ ' Result.Name:=AUnitName;'#010+ - ' Result.CPUs:=CPUs',';'#010+ + ' Result','.CPUs:=CPUs;'#010+ ' Result.OSes:=OSes;'#010+ ' if InstallUnit then'#010+ ' Result.TargetType:=TTImplicitUnit'#010+ @@ -3539,7 +3991,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'Function TTargets.AddProgram(Const AProgramName : String) : TTarget;'#010+ 'begin'#010+ - ' Result:=AddProgram(AProgra','mName,AllCPUs,AllOSes);'#010+ + ' Result:=AddProg','ram(AProgramName,AllCPUs,AllOSes);'#010+ 'end;'#010+ #010+ #010+ @@ -3551,7 +4003,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ #010+ '{$ifdef cpu_only_overloads}'#010+ - 'Function TTargets.AddProgram(Cons','t AProgramName : String;const CPUs:'+ + 'Function TTargets.AddP','rogram(Const AProgramName : String;const CPUs:'+ 'TCPUs) : TTarget;'#010+ 'begin'#010+ ' Result:=AddProgram(AProgramName,CPUs,AllOSes);'#010+ @@ -3560,7 +4012,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ #010+ 'Function TTargets.AddProgram(Const AProgramName : String;const CPUs:TC'+ - 'PUs;const OSes:TOSes) : TTa','rget;'#010+ + 'PUs;const OSes:T','OSes) : TTarget;'#010+ 'begin'#010+ ' Result:=Add as TTarget;'#010+ ' Result.Name:=AProgramName;'#010+ @@ -3570,9 +4022,43 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'Function TTargets.AddExampleUnit(Const AUnitName : String) : TTarget;'#010+ + 'Function TTargets.AddLibrary(Const ALibraryName : String) : TTarget;'#010+ + 'begin'#010+ + ' Resu','lt:=AddLibrary(ALibraryName,AllCPUs,AllOSes);'#010+ + 'end;'#010+ + #010+ + #010+ + 'Function TTargets.AddLibrary(Const ALibraryName : String;const OSes:TO'+ + 'Ses) : TTarget;'#010+ 'begin'#010+ - ' Result:=AddExa','mpleUnit(AUnitName,AllCPUs,AllOSes);'#010+ + ' Result:=AddLibrary(ALibraryName,AllCPUs,OSes);'#010+ + 'end;'#010+ + #010+ + #010+ + '{$ifdef cpu_only_overloads}'#010+ + 'Function TT','argets.AddLibrary(Const ALibraryName : String;const CPUs:'+ + 'TCPUs) : TTarget;'#010+ + 'begin'#010+ + ' Result:=AddLibrary(ALibraryName,CPUs,AllOSes);'#010+ + 'end;'#010+ + '{$endif cpu_only_overloads}'#010+ + #010+ + #010+ + 'Function TTargets.AddLibrary(Const ALibraryName : String;const CPUs:TC'+ + 'PUs;c','onst OSes:TOSes) : TTarget;'#010+ + 'begin'#010+ + ' Result:=Add as TTarget;'#010+ + ' Result.Name:=ALibraryName;'#010+ + ' Result.CPUs:=CPUs;'#010+ + ' Result.OSes:=OSes;'#010+ + ' Result.TargetType:=ttSharedLibrary;'#010+ + 'end;'#010+ + #010+ + #010+ + 'Function TTargets.AddExampleUnit(Const AUnitName : String) : TTa','rget'+ + ';'#010+ + 'begin'#010+ + ' Result:=AddExampleUnit(AUnitName,AllCPUs,AllOSes);'#010+ 'end;'#010+ #010+ #010+ @@ -3583,17 +4069,17 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - '{$ifdef cpu_only_overloads}'#010+ - 'Function TTargets.','AddExampleUnit(Const AUnitName : String;const CPUs'+ - ':TCPUs) : TTarget;'#010+ + '{$ifdef cpu_only_o','verloads}'#010+ + 'Function TTargets.AddExampleUnit(Const AUnitName : String;const CPUs:T'+ + 'CPUs) : TTarget;'#010+ 'begin'#010+ ' Result:=AddExampleUnit(AUnitName,CPUs,AllOSes);'#010+ 'end;'#010+ '{$endif cpu_only_overloads}'#010+ #010+ #010+ - 'Function TTargets.AddExampleUnit(Const AUnitName : String;const CPUs:T'+ - 'CPUs;const',' OSes:TOSes) : TTarget;'#010+ + 'Function TTargets.AddExampleUnit(Const AUnitName : S','tring;const CPUs'+ + ':TCPUs;const OSes:TOSes) : TTarget;'#010+ 'begin'#010+ ' Result:=Add as TTarget;'#010+ ' Result.Name:=AUnitName;'#010+ @@ -3603,8 +4089,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'Function TTargets.AddExampleProgram(Const AProgramName : String) : TTa'+ - 'rge','t;'#010+ + 'Function TTargets.AddExampleProgram(Const APr','ogramName : String) : T'+ + 'Target;'#010+ 'begin'#010+ ' Result:=AddExampleProgram(AProgramName,AllCPUs,AllOSes);'#010+ 'end;'#010+ @@ -3613,37 +4099,37 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'Function TTargets.AddExampleProgram(Const AProgramName : String;const '+ 'OSes:TOSes) : TTarget;'#010+ 'begin'#010+ - ' Result:=AddExampleProgram(AProgramName,AllCPUs,OSes);'#010+ + ' Result:=AddExampleProgram(AProgramNa','me,AllCPUs,OSes);'#010+ 'end;'#010+ #010+ #010+ - '{$i','fdef cpu_only_overloads}'#010+ + '{$ifdef cpu_only_overloads}'#010+ 'Function TTargets.AddExampleProgram(Const AProgramName : String;const '+ 'CPUs:TCPUs) : TTarget;'#010+ 'begin'#010+ ' Result:=AddExampleProgram(AProgramName,CPUs,AllOSes);'#010+ 'end;'#010+ - '{$endif cpu_only_overloads}'#010+ + '{$endif cpu_only_overloads}',#010+ #010+ #010+ - 'Function TTargets.AddExam','pleProgram(Const AProgramName : String;cons'+ - 't CPUs:TCPUs;const OSes:TOSes) : TTarget;'#010+ + 'Function TTargets.AddExampleProgram(Const AProgramName : String;const '+ + 'CPUs:TCPUs;const OSes:TOSes) : TTarget;'#010+ 'begin'#010+ ' Result:=Add as TTarget;'#010+ ' Result.Name:=AProgramName;'#010+ ' Result.CPUs:=CPUs;'#010+ ' Result.OSes:=OSes;'#010+ - ' Result.TargetType:=ttExampleProgram;'#010+ + ' Result.TargetType:=ttE','xampleProgram;'#010+ 'end;'#010+ #010+ #010+ - '{*****','**************************************************************'+ - '*********'#010+ + '{*********************************************************************'+ + '*******'#010+ ' TSources'#010+ '**********************************************************************'+ '******}'#010+ #010+ - 'function TSources.GetSourceItem(Index : Integer)',': TSource;'#010+ + 'function TSources.Ge','tSourceItem(Index : Integer): TSource;'#010+ 'begin'#010+ ' Result:=TSource(Items[Index]);'#010+ 'end;'#010+ @@ -3656,9 +4142,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'function TSources.AddDoc (const AFiles : String) : TSource;'#010+ + 'function TSources.AddDoc (const AFiles : Str','ing) : TSource;'#010+ 'begin'#010+ - ' Resu','lt:=Add as TSource;'#010+ + ' Result:=Add as TSource;'#010+ ' Result.Name:=AFiles;'#010+ ' Result.FSourceType:=stDoc;'#010+ 'end;'#010+ @@ -3668,8 +4154,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'ing): TSource;'#010+ 'begin'#010+ ' Result:=Add as TSource;'#010+ - ' Result.Name:=AFiles;'#010+ - ' Result.FInstallSour','cePath:=AInstallSourcePath;'#010+ + ' Result.Name:=A','Files;'#010+ + ' Result.FInstallSourcePath:=AInstallSourcePath;'#010+ ' Result.FSourceType:=stDoc;'#010+ 'end;'#010+ #010+ @@ -3679,10 +4165,10 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Result:=Add as TSource;'#010+ ' Result.Name:=AFiles;'#010+ ' Result.FSourceType:=stSrc;'#010+ - 'end;'#010+ + 'end;'#010, #010+ #010+ - 'function TSources.AddExamp','le(const AFiles : String) : TSource;'#010+ + 'function TSources.AddExample(const AFiles : String) : TSource;'#010+ 'begin'#010+ ' Result:=Add as TSource;'#010+ ' Result.Name:=AFiles;'#010+ @@ -3690,9 +4176,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ 'function TSources.AddExample(const AFiles: String; AInstallSourcePath:'+ - ' String): TSource;'#010+ + ' String): T','Source;'#010+ 'begin'#010+ - ' Result:=Add ','as TSource;'#010+ + ' Result:=Add as TSource;'#010+ ' Result.Name:=AFiles;'#010+ ' Result.FInstallSourcePath:=AInstallSourcePath;'#010+ ' Result.FSourceType:=stExample;'#010+ @@ -3701,9 +4187,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'function TSources.AddTest(const AFiles : String) : TSource;'#010+ 'begin'#010+ - ' Result:=Add as TSource;'#010+ + ' Result:=Add as TSour','ce;'#010+ ' Result.Name:=AFiles;'#010+ - ' ',' Result.FSourceType:=stTest;'#010+ + ' Result.FSourceType:=stTest;'#010+ 'end;'#010+ #010+ 'procedure TSources.AddDocFiles(const AFileMask, ASearchPathPrefix: str'+ @@ -3712,16 +4198,16 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' List : TStrings;'#010+ ' i: integer;'#010+ 'begin'#010+ - ' List := TStringList.Create;'#010+ - ' Search','Files(AFileMask, ASearchPathPrefix, Recursive, List);'#010+ + ' List := ','TStringList.Create;'#010+ + ' SearchFiles(AFileMask, ASearchPathPrefix, Recursive, List);'#010+ ' for i:= 0 to Pred(List.Count) do'#010+ ' AddDoc(List[i], AInstallSourcePath);'#010+ ' List.Free;'#010+ 'end;'#010+ #010+ #010+ - 'procedure TSources.AddSrcFiles(const AFileMask, ASearchPathPrefix: str'+ - 'ing; Recursive: bool','ean);'#010+ + 'procedure TSources.AddSrcFiles(const AFileMask, ASearchPathPre','fix: s'+ + 'tring; Recursive: boolean);'#010+ 'var'#010+ ' List : TStrings;'#010+ ' i: integer;'#010+ @@ -3731,17 +4217,17 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' for i:= 0 to Pred(List.Count) do'#010+ ' AddSrc(List[i]);'#010+ ' List.Free;'#010+ - 'end;'#010+ + 'en','d;'#010+ #010+ #010+ - 'procedure TSources.AddE','xampleFiles(const AFileMask, ASearchPathPrefi'+ - 'x: string; Recursive: boolean; AInstallSourcePath: String);'#010+ + 'procedure TSources.AddExampleFiles(const AFileMask, ASearchPathPrefix:'+ + ' string; Recursive: boolean; AInstallSourcePath: String);'#010+ 'var'#010+ ' List : TStrings;'#010+ ' i: integer;'#010+ 'begin'#010+ ' List := TStringList.Create;'#010+ - ' SearchFiles(AFileMask, ASearchPathPrefix, Recursive, List);'#010, + ' SearchFiles(AFileMask, ASearchPa','thPrefix, Recursive, List);'#010+ ' for i:= 0 to Pred(List.Count) do'#010+ ' AddExample(List[i], AInstallSourcePath);'#010+ ' List.Free;'#010+ @@ -3751,9 +4237,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'procedure TSources.AddTestFiles(const AFileMask, ASearchPathPrefix: st'+ 'ring; Recursive: boolean);'#010+ 'var'#010+ - ' List : TStrings;'#010+ + ' List : TS','trings;'#010+ ' i: integer;'#010+ - 'begin'#010, + 'begin'#010+ ' List := TStringList.Create;'#010+ ' SearchFiles(AFileMask, ASearchPathPrefix, Recursive, List);'#010+ ' for i:= 0 to Pred(List.Count) do'#010+ @@ -3762,30 +4248,30 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - '{*********************************************************************'+ - '*','******'#010+ + '{******************************************','*************************'+ + '*********'#010+ ' TPackage'#010+ '**********************************************************************'+ '******}'#010+ #010+ 'constructor TPackage.Create(ACollection: TCollection);'#010+ 'begin'#010+ - ' inherited Create(ACollection);'#010+ - ' FVersion:=TFPVersion','.Create;'#010+ + ' inherited Create(ACollect','ion);'#010+ + ' FVersion:=TFPVersion.Create;'#010+ ' FTargets:=TTargets.Create(TTarget);'#010+ ' FSources:=TSources.Create(TSource);'#010+ ' FDependencies:=TDependencies.Create(TDependency);'#010+ ' FInstallFiles:=TConditionalDestStrings.Create(TConditionalDestString'+ ');'#010+ - ' FCleanFiles:=TConditionalStr','ings.Create(TConditionalString);'#010+ + ' ','FCleanFiles:=TConditionalStrings.Create(TConditionalString);'#010+ ' FUnitPath:=TConditionalStrings.Create(TConditionalString);'#010+ ' FObjectPath:=TConditionalStrings.Create(TConditionalString);'#010+ - ' FIncludePath:=TConditionalStrings.Create(TConditionalString);'#010+ - ' FSourcePath:=TCon','ditionalStrings.Create(TConditionalString);'#010+ + ' FIncludePath:=TConditionalStrings.Create(TConditional','String);'#010+ + ' FSourcePath:=TConditionalStrings.Create(TConditionalString);'#010+ ' FExamplePath:=TConditionalStrings.Create(TConditionalString);'#010+ ' FTestPath:=TConditionalStrings.Create(TConditionalString);'#010+ ' FCommands:=TCommands.Create(TCommand);'#010+ - ' FUnitsOutputDir:='#039'units'#039'+Pat','hDelim+'#039'$(target)'#039'+Pat'+ + ' ','FUnitsOutputDir:='#039'units'#039'+PathDelim+'#039'$(target)'#039'+Pat'+ 'hDelim;'#010+ ' FPackageVariants:=TFPList.Create;'#010+ ' FCPUs:=AllCPUs;'#010+ @@ -3793,8 +4279,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' FInstalledChecksum:=$ffffffff;'#010+ ' FFlags := TStringList.Create;'#010+ ' // Implicit dependency on RTL'#010+ - ' FDependencies.Add('#039'rtl'#039');'#010+ - ' FSupportBui','ldModes:=[bmBuildUnit, bmOneByOne];'#010+ + ' FDependenci','es.Add('#039'rtl'#039');'#010+ + ' FSupportBuildModes:=[bmBuildUnit, bmOneByOne];'#010+ 'end;'#010+ #010+ #010+ @@ -3806,8 +4292,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' FreeAndNil(FDependencies);'#010+ ' FreeAndNil(FInstallFiles);'#010+ ' FreeAndNil(FCleanFiles);'#010+ - ' FreeAndNil(FIncludePath);'#010+ - ' Fr','eeAndNil(FSourcePath);'#010+ + ' Fr','eeAndNil(FIncludePath);'#010+ + ' FreeAndNil(FSourcePath);'#010+ ' FreeAndNil(FExamplePath);'#010+ ' FreeAndNil(FTestPath);'#010+ ' FreeAndNil(FCommands);'#010+ @@ -3815,8 +4301,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' FreeAndNil(FUnitPath);'#010+ ' FreeAndNil(FSources);'#010+ ' FreeAndNil(FTargets);'#010+ - ' FreeAndNil(FVersion);'#010+ - ' FreeAndNil(FO','ptions);'#010+ + ' FreeAndNi','l(FVersion);'#010+ + ' FreeAndNil(FOptions);'#010+ + ' FreeAndNil(FTransmitOptions);'#010+ ' FreeAndNil(FFlags);'#010+ ' FreeAndNil(FPackageVariants);'#010+ ' inherited destroy;'#010+ @@ -3828,9 +4315,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'procedure TPackage.SetName(const AValue: String);'#010+ + 'procedure ','TPackage.SetName(const AValue: String);'#010+ 'begin'#010+ - ' inherited Se','tName(AValue);'#010+ + ' inherited SetName(AValue);'#010+ ' // RTL should not have any dependencies'#010+ ' if AValue='#039'rtl'#039' then'#010+ ' FDependencies.Clear;'#010+ @@ -3838,34 +4325,34 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ #010+ 'Function TPackage.GetUnitsOutputDir(ACPU:TCPU; AOS : TOS):String;'#010+ - 'begin'#010+ - ' result:=FixPath(Dictionary.Substitute(FUnitsOutputDir,','['#039'CPU'#039+ - ',CPUToString(ACPU),'#039'OS'#039',OSToString(AOS),'#039'target'#039',MakeT'+ - 'argetString(ACPU,AOS)]), False);'#010+ + 'be','gin'#010+ + ' result:=FixPath(Dictionary.Substitute(FUnitsOutputDir,['#039'CPU'#039','+ + 'CPUToString(ACPU),'#039'OS'#039',OSToString(AOS),'#039'target'#039',MakeTa'+ + 'rgetString(ACPU,AOS)]), False);'#010+ 'end;'#010+ #010+ 'function TPackage.GetUnitConfigOutputFilename(ACPU: TCPU; AOS: TOS): S'+ 'tring;'#010+ - 'begin'#010+ - ' result:=FixPath(Dictionary.Substitute(Name+'#039'-$(target)'#039'+','Fp'+ - 'mkExt,['#039'CPU'#039',CPUToString(ACPU),'#039'OS'#039',OSToString(AOS),'#039+ + 'begi','n'#010+ + ' result:=FixPath(Dictionary.Substitute(Name+'#039'-$(target)'#039'+Fpmk'+ + 'Ext,['#039'CPU'#039',CPUToString(ACPU),'#039'OS'#039',OSToString(AOS),'#039+ 'target'#039',MakeTargetString(ACPU,AOS)]), False);'#010+ 'end;'#010+ #010+ 'procedure TPackage.InheritPackageVariantsFromDependency(ADependencyPac'+ - 'kage: TPackage);'#010+ + 'kag','e: TPackage);'#010+ 'var'#010+ ' i: integer;'#010+ - ' APackageVariants: TPackage','Variants;'#010+ + ' APackageVariants: TPackageVariants;'#010+ 'begin'#010+ ' for i := 0 to ADependencyPackage.FPackageVariants.Count-1 do'#010+ ' begin'#010+ ' APackageVariants := TPackageVariants(ADependencyPackage.FPackage'+ 'Variants[i]);'#010+ - ' if APackageVariants.IsInheritable then'#010+ + ' i','f APackageVariants.IsInheritable then'#010+ ' begin'#010+ - ' ','if not assigned(GetPackageVariantsByName(APackageVariants.Na'+ - 'me)) then'#010+ + ' if not assigned(GetPackageVariantsByName(APackageVariants.Name'+ + ')) then'#010+ ' begin'#010+ ' FPackageVariants.Add(APackageVariants);'#010+ ' end;'#010+ @@ -3873,7 +4360,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' end;'#010+ 'end;'#010+ #010+ - 'function TPackage.GetPackageVariantsByName(AName: string): TP','ackageV'+ + 'f','unction TPackage.GetPackageVariantsByName(AName: string): TPackageV'+ 'ariants;'#010+ 'var'#010+ ' i: Integer;'#010+ @@ -3882,8 +4369,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' for i := 0 to FPackageVariants.Count-1 do'#010+ ' if SameText(TPackageVariants(FPackageVariants.Items[i]).Name, ANam'+ 'e) then'#010+ - ' begin'#010+ - ' result := TPackageVariants(FPackageVariants','.Items[i]);'#010+ + ' ',' begin'#010+ + ' result := TPackageVariants(FPackageVariants.Items[i]);'#010+ ' break;'#010+ ' end;'#010+ 'end;'#010+ @@ -3891,20 +4378,20 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'procedure TPackage.SetUnitsOutputDir(AValue: string);'#010+ 'begin'#010+ ' if AValue<>'#039#039' then'#010+ - ' FUnitsOutputDir:=IncludeTrailingPathDelimiter(AValue)'#010+ + ' FUnitsOutputDir:=IncludeTrailingPathDelimiter(AValue)',#010+ ' else'#010+ ' FUnitsOutputDir:='#039#039';'#010+ 'end;'#010+ #010+ - 'function TPackage.Get','PackageUnitInstallDir(ACPU: TCPU; AOS: TOS): St'+ - 'ring;'#010+ + 'function TPackage.GetPackageUnitInstallDir(ACPU: TCPU; AOS: TOS): Stri'+ + 'ng;'#010+ 'begin'#010+ ' result:=FixPath(Dictionary.Substitute(FPackageUnitInstallDir,['#039'C'+ 'PU'#039',CPUToString(ACPU),'#039'OS'#039',OSToString(AOS),'#039'target'#039+ - ',MakeTargetString(ACPU,AOS)]), False);'#010+ + ',Mak','eTargetString(ACPU,AOS)]), False);'#010+ 'end;'#010+ #010+ - 'procedure TPackage.','SetPackageUnitInstallDir(AValue: string);'#010+ + 'procedure TPackage.SetPackageUnitInstallDir(AValue: string);'#010+ 'begin'#010+ ' if AValue<>'#039#039' then'#010+ ' FPackageUnitInstallDir:=IncludeTrailingPathDelimiter(AValue)'#010+ @@ -3912,8 +4399,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' FPackageUnitInstallDir:='#039#039';'#010+ 'end;'#010+ #010+ - #010+ - 'Function TPackage.GetBinOutputDir(ACPU:TCPU; AOS : TOS) : St','ring;'#010+ + #010, + 'Function TPackage.GetBinOutputDir(ACPU:TCPU; AOS : TOS) : String;'#010+ 'begin'#010+ ' Result:='#039'bin'#039'+PathDelim+MakeTargetString(ACPU,AOS);'#010+ 'end;'#010+ @@ -3923,38 +4410,38 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ';'#010+ 'Var'#010+ ' OB,OU : String;'#010+ - ' I : Integer;'#010+ + ' I : Integer',';'#010+ 'begin'#010+ - ' OB:=IncludeTrailingPathDelimiter(GetBinOutputDir(A','CPU,AOS));'#010+ + ' OB:=IncludeTrailingPathDelimiter(GetBinOutputDir(ACPU,AOS));'#010+ ' OU:=IncludeTrailingPathDelimiter(GetUnitsOutputDir(ACPU,AOS));'#010+ ' List.Add(GetUnitConfigOutputFilename(Defaults.CPU,Defaults.OS));'#010+ - ' AddConditionalStrings(Self, List,CleanFiles,ACPU,AOS);'#010+ + ' AddConditionalStrings(Self, List,Cl','eanFiles,ACPU,AOS);'#010+ ' For I:=0 to FTargets.Count-1 do'#010+ - ' FT','argets.TargetItems[I].GetCleanFiles(List, OU, OB, ACPU, AOS);'#010+ + ' FTargets.TargetItems[I].GetCleanFiles(List, OU, OB, ACPU, AOS);'#010+ 'end;'#010+ #010+ #010+ 'procedure TPackage.GetInstallFiles(List: TStrings;Types : TTargetTypes'+ ';ACPU:TCPU; AOS : TOS);'#010+ 'Var'#010+ - ' OB,OU : String;'#010+ + ' OB,OU,OL : ','String;'#010+ ' I : Integer;'#010+ ' T : TTarget;'#010+ 'begin'#010+ - ' if Types=[] then'#010, + ' if Types=[] then'#010+ ' AddConditionalStrings(Self, List,InstallFiles,ACPU,AOS)'#010+ ' else'#010+ ' begin'#010+ ' OB:=IncludeTrailingPathDelimiter(GetBinOutputDir(Defaults.CPU,De'+ 'faults.OS));'#010+ - ' OU:=IncludeTrailingPathDelimiter(GetUnitsOutputDir(Defaults.CPU,'+ - 'Defaults.O','S));'#010+ + ' OU:=Include','TrailingPathDelimiter(GetUnitsOutputDir(Defaults.CP'+ + 'U,Defaults.OS));'#010+ ' For I:=0 to FTargets.Count-1 do'#010+ ' begin'#010+ ' T:=FTargets.TargetItems[I];'#010+ ' if (T.TargetType in Types) and Installer.BuildEngine.TargetI'+ - 'nstallOK(T, ACPU, AOS) then'#010+ - ' T.GetInstallFiles(List, OU, OB, ACP','U, AOS);'#010+ + 'nstallOK(T, ','ACPU, AOS) then'#010+ + ' T.GetInstallFiles(List, OU, OB, ACPU, AOS);'#010+ ' end;'#010+ ' end;'#010+ 'end;'#010+ @@ -3964,10 +4451,10 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' TSourceTypes; TargetTypes : TTargetTypes);'#010+ 'Var'#010+ ' I : Integer;'#010+ - ' S : TSource;'#010+ + ' S : ','TSource;'#010+ ' T : TTarget;'#010+ 'begin'#010+ - ' For I:=0 to FSources.Count-1 do',#010+ + ' For I:=0 to FSources.Count-1 do'#010+ ' begin'#010+ ' S:=FSources.SourceItems[I];'#010+ ' if (S.SourceType in SourceTypes) then'#010+ @@ -3975,8 +4462,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' end;'#010+ ' For I:=0 to FTargets.Count-1 do'#010+ ' begin'#010+ - ' T:=FTargets.TargetItems[I];'#010+ - ' if (T.TargetType in Targe','tTypes) then'#010+ + ' ',' T:=FTargets.TargetItems[I];'#010+ + ' if (T.TargetType in TargetTypes) then'#010+ ' T.GetArchiveFiles(List,Defaults.CPU,Defaults.OS);'#010+ ' end;'#010+ 'end;'#010+ @@ -3985,22 +4472,22 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'procedure TPackage.GetArchiveFiles(List: TStrings; ACPU:TCPU; AOS : TO'+ 'S);'#010+ 'Var'#010+ - ' I : Integer;'#010+ + ' I : Intege','r;'#010+ 'begin'#010+ ' // Targets only'#010+ ' For I:=0 to FTargets.Count-1 do'#010+ - ' ',' FTargets.TargetItems[I].GetArchiveFiles(List,ACPU,AOS);'#010+ + ' FTargets.TargetItems[I].GetArchiveFiles(List,ACPU,AOS);'#010+ 'end;'#010+ #010+ 'procedure TPackage.GetArchiveSourceFiles(List: TStrings);'#010+ 'var'#010+ ' i : integer;'#010+ 'begin'#010+ - ' for i := 0 to Sources.Count-1 do'#010+ + ' for i := 0 to Sources.Count-','1 do'#010+ ' List.Add(Sources[i].Name);'#010+ 'end;'#010+ #010+ - 'Function TPackage.Get','Description : string;'#010+ + 'Function TPackage.GetDescription : string;'#010+ 'Var'#010+ ' FN : String;'#010+ ' L : TStringList;'#010+ @@ -4010,17 +4497,17 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' else'#010+ ' If (FDescriptionFile<>'#039#039') then'#010+ ' begin'#010+ - ' // Always relative to binary name.'#010+ - ' FN:=ExtractFile','Path(ParamStr(0));'#010+ + ' ',' // Always relative to binary name.'#010+ + ' FN:=ExtractFilePath(ParamStr(0));'#010+ ' FN:=FN+FDescriptionFile;'#010+ ' If FileExists(FN) then'#010+ ' begin'#010+ ' L:=TStringList.Create;'#010+ ' Try'#010+ - ' L.LoadFromFile(FN);'#010+ + ' L.LoadFromFil','e(FN);'#010+ ' Result:=L.Text;'#010+ ' Finally'#010+ - ' ',' L.Free;'#010+ + ' L.Free;'#010+ ' end;'#010+ ' end;'#010+ ' end;'#010+ @@ -4029,24 +4516,31 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'function TPackage.GetDictionary: TDictionary;'#010+ 'begin'#010+ ' if not assigned(FDictionary) then'#010+ - ' FDictionary:=PackageDictionaryClass.Create(Nil);'#010+ + ' FDictionary:=Package','DictionaryClass.Create(Nil);'#010+ ' result := FDictionary;'#010+ 'end;'#010+ #010+ #010+ - 'Fu','nction TPackage.GetVersion : string;'#010+ + 'Function TPackage.GetVersion : string;'#010+ 'begin'#010+ ' result:=FVersion.AsString;'#010+ 'end;'#010+ #010+ 'procedure TPackage.SetOptions(const AValue: TStrings);'#010+ 'begin'#010+ - ' If (AValue=Nil) or (AValue.Count=0) then'#010+ + ' If (AValue=Nil) or (AValue.Count=0) ','then'#010+ ' FreeAndNil(Foptions)'#010+ ' else'#010+ - ' Options.Assign(AValue)',';'#010+ + ' Options.Assign(AValue);'#010+ 'end;'#010+ #010+ + 'procedure TPackage.SetTransmitOptions(AValue: TStrings);'#010+ + 'begin'#010+ + ' If (AValue=Nil) or (AValue.Count=0) then'#010+ + ' FreeAndNil(FTransmitOptions)'#010+ + ' else'#010+ + ' TransmitOptions.Ass','ign(AValue);'#010+ + 'end;'#010+ #010+ 'Procedure TPackage.SetVersion(const V : string);'#010+ 'begin'#010+ @@ -4059,9 +4553,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' If (FFileName<>'#039#039') then'#010+ ' Result:=FFileName'#010+ ' else'#010+ - ' if not FVersion.Empty and not'#010+ - ' ((De','faults.OS in AllLimit83fsOses) or (Defaults.BuildOS in All'+ - 'Limit83fsOses)) then'#010+ + ' if not FVersion.Empty and not'#010, + ' ((Defaults.OS in AllLimit83fsOses) or (Defaults.BuildOS in AllLi'+ + 'mit83fsOses)) then'#010+ ' Result := Name + '#039'-'#039' + FVersion.AsString'#010+ ' else'#010+ ' Result := ShortName;'#010+ @@ -4070,7 +4564,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'Function TPackage.GetShortName : string;'#010+ 'begin'#010+ - ' if FShortName<>'#039#039' then',#010+ + ' if FShortNam','e<>'#039#039' then'#010+ ' result := FShortName'#010+ ' else'#010+ ' result := Name;'#010+ @@ -4084,20 +4578,26 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Result:=FOptions;'#010+ 'end;'#010+ #010+ + 'function TPackage.GetTransmitOptions: T','Strings;'#010+ + 'begin'#010+ + ' If (FTransmitOptions=Nil) then'#010+ + ' FTransmitOptions:=TStringList.Create;'#010+ + ' Result:=FTransmitOptions;'#010+ + 'end;'#010+ #010+ - 'Procedure TPackage.GetManifest(Manifest : TStrin','gs);'#010+ + 'Procedure TPackage.GetManifest(Manifest : TStrings);'#010+ #010+ ' procedure AddOSes(const AIndent:string;AOSes:TOSes);'#010+ ' var'#010+ - ' IOS : TOS;'#010+ + ' ',' IOS : TOS;'#010+ ' begin'#010+ ' if (AOSes=AllOSes) then'#010+ ' exit;'#010+ ' Manifest.Add(AIndent+'#039''#039');'#010+ ' for IOS:=low(TOSes) to high(TOSes) do'#010+ ' if IOS in AOSes then'#010+ - ' ',' Manifest.Add(Format(AIndent+'#039' '#039',[OSTo'+ - 'String(IOS)]));'#010+ + ' Manifest.Add(Format(AIndent+'#039' '#039',[OSToSt'+ + 'ring(IOS)])',');'#010+ ' Manifest.Add(AIndent+'#039''#039');'#010+ ' end;'#010+ #010+ @@ -4106,60 +4606,60 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' ICPU : TCPU;'#010+ ' begin'#010+ ' if (ACPUs=AllCPUs) then'#010+ - ' exit',';'#010+ + ' exit;'#010+ ' Manifest.Add(AIndent+'#039''#039');'#010+ - ' for ICPU:=low(TCPUs) to high(TCPUs) do'#010+ + ' for ICPU:=low(TCPUs) to hi','gh(TCPUs) do'#010+ ' if ICPU in ACPUs then'#010+ ' Manifest.Add(Format(AIndent+'#039' '#039',[CPUTo'+ 'String(ICPU)]));'#010+ ' Manifest.Add(AIndent+'#039''#039');'#010+ ' end;'#010+ #010+ - ' funct','ion GetXMLVersionString(sMajor, sMinor, sMicro, sBuild: integ'+ - 'er): string;'#010+ + ' function GetXMLVersionString(sMajor, sMinor, sMicro, sBuild: integer'+ + '): st','ring;'#010+ ' begin'#010+ ' Result := '#039' -1 then'#010+ ' Result := Result + '#039' major="'#039' + IntToStr(sMajor) + '#039'"'+ #039';'#010+ ' if sMinor <> -1 then'#010+ - ' Result := Resu','lt + '#039' minor="'#039' + IntToStr(sMinor) + '#039+ - '"'#039';'#010+ - ' if sMicro <> -1 then'#010+ - ' Result := Result + '#039' micro="'#039' + IntToStr(sMicro) + '#039'"'+ + ' Result := Result + '#039' minor="'#039' + IntToStr(sMinor) + '#039'"'+ #039';'#010+ + ' if sMicro <> -1 then'#010+ + ' ',' Result := Result + '#039' micro="'#039' + IntToStr(sMicro) + '#039+ + '"'#039';'#010+ ' if sBuild <> -1 then'#010+ ' Result := Result + '#039' build="'#039' + IntToStr(sBuild) + '#039'"'+ #039';'#010+ #010+ - ' Result := Result + ',#039'/>'#039';'#010+ + ' Result := Result + '#039'/>'#039';'#010+ ' end;'#010+ #010+ 'Var'#010+ ' S : String;'#010+ ' i : Integer;'#010+ ' D : TDependency;'#010+ - 'begin'#010+ + 'be','gin'#010+ ' With Manifest do'#010+ ' begin'#010+ ' Add(Format('#039''#039',[QuoteXml(Name)]));'#010+ #010+ ' Add('#039' '#039' + GetXMLVersionString(FVersion.Major,FVersion.Mino'+ - 'r,FVersion.Micro,FV','ersion.Build));'#010+ + 'r,FVersion.Micro,FVersion.Build));'#010+ ' AddOSes('#039' '#039',OSes);'#010+ ' AddCPUs('#039' '#039',CPUs);'#010+ - ' Add(Format('#039' %s'#039',[QuoteXml(FileName +'+ - ' ZipExt)]));'#010+ + ' Ad','d(Format('#039' %s'#039',[QuoteXml(FileName'+ + ' + MakeZipSuffix(cpuNone, osNone) + ZipExt)]));'#010+ ' Add(Format('#039' %s'#039',[QuoteXml(Author)]));'#010+ - ' Add(Format('#039' %s'#039',[Qu','oteXml(License)])'+ - ');'#010+ - ' if HomepageURL<>'#039#039' then'#010+ + ' Add(Format('#039' %s'#039',[QuoteXml(License)]));'+ + #010+ + ' if Homepage','URL<>'#039#039' then'#010+ ' Add(Format('#039' %s'#039',[QuoteXml(Ho'+ 'mepageURL)]));'#010+ ' if DownloadURL<>'#039#039' then'#010+ ' Add(Format('#039' %s'#039',[QuoteXml(Do'+ 'wnloadURL)]));'#010+ - ' Add(Fo','rmat('#039' %s'#039',[QuoteXMl(Email)]));'#010+ + ' Add(Format('#039' %s'#039',[QuoteXMl','(Email)]));'#010+ ' S:=Description;'#010+ ' If (S<>'#039#039') then'#010+ ' Add(Format('#039' %s'#039',[QuoteXML(S)'+ @@ -4167,21 +4667,21 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' If (Dependencies.Count>0) then'#010+ ' begin'#010+ ' Add('#039' '#039');'#010+ - ' ',' for I:=0 to Dependencies.Count-1 do'#010+ + ' for I:=0 to Dependencies.Count-1 d','o'#010+ ' begin'#010+ ' D:=Dependencies[i];'#010+ ' Add('#039' '#039');'#010+ ' Add(Format('#039' '#039',[Quote'+ 'XML(D.Value)]));'#010+ - ' if not D.FVersion.Empty then'#010, - ' Add('#039' '#039' + GetXMLVersionString(D.FVersion.Major'+ - ',D.FVersion.Minor,D.FVersion.Micro,D.FVersion.Build));'#010+ + ' if not D.FVersion.Empty then'#010+ + ' Add('#039' '#039' + GetXMLVer','sionString(D.FVersion.Maj'+ + 'or,D.FVersion.Minor,D.FVersion.Micro,D.FVersion.Build));'#010+ ' AddOSes('#039' '#039',D.OSes);'#010+ ' AddCPUs('#039' '#039',D.CPUs);'#010+ ' Add('#039' '#039');'#010+ ' end;'#010+ - ' ',' Add('#039' '#039');'#010+ - ' end;'#010+ + ' Add('#039' '#039');'#010+ + ' ',' end;'#010+ ' Add('#039''#039');'#010+ ' end;'#010+ 'end;'#010+ @@ -4191,16 +4691,16 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' function GetArchiveName (const APackage: TPackage; ALimit83: boolean'+ '): string;'#010+ ' begin'#010+ - '{ Special hack to ','allow both long and short source files being recog'+ + '{ Special hack to allow both long and short source fi','les being recog'+ 'nized }'#010+ ' if ALimit83 and (Defaults.ZipPrefix = '#039'units-'#039') then'#010+ ' result := '#039'u'#039#010+ ' else'#010+ ' result := Defaults.ZipPrefix;'#010+ ' if ALimit83 then'#010+ - ' result := result + APackage.Short','Name'#010+ + ' result := result + APackage.ShortName'#010+ ' else'#010+ - ' result := result + APackage.Name;'#010+ + ' result := resul','t + APackage.Name;'#010+ ' result := result + MakeZipSuffix(Defaults.CPU, Defaults.OS, ALimit'+ '83);'#010+ ' end;'#010+ @@ -4210,27 +4710,27 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'begin'#010+ '{ if OSes = AllOSes then'#010+ ' Exit;}'#010+ - ' if ((OSes = AllOSes) or (Defaults.OS in ','OSes)) and'#010+ - ' ((CPUs = AllCPUs) or (Defaults.CPU in CPUs)) or'#010+ + ' if ((OSes = AllOSes) or (Defaults.OS in OSes)) and'#010+ + ' ((CPUs = AllCPU','s) or (Defaults.CPU in CPUs)) or'#010+ ' (Defaults.OS = osNone) and (Defaults.CPU = cpuN'+ 'one) then'#010+ ' begin'#010+ ' if Defaults.OS = osNone then'#010+ - ' PkgList.Add (Format ('#039'# Source %d'#039', [Su','cc (PkgList.C'+ - 'ount div 2)]))'#010+ - ' else {if OSes <> AllOSes then}'#010+ + ' PkgList.Add (Format ('#039'# Source %d'#039', [Succ (PkgList.Cou'+ + 'nt div 2)]))'#010+ + ' e','lse {if OSes <> AllOSes then}'#010+ ' PkgList.Add (Format ('#039'# '#039' + OSToString(Defaults.OS) + '+ #039' %d'#039', [Succ (PkgList.Count div 2)]));'#010+ ' S := '#039'package='#039' + GetArchiveName (Self, false) + Archive'+ 'Extension;'#010+ - ' ',' if ((ShortName <> Name) or (Defaults.ZipPrefix = '#039'units-'#039+ + ' if ((ShortName <> Name) or (De','faults.ZipPrefix = '#039'units-'#039+ ')) and'#010+ ' ((Defaults.OS in AllLimit83fsOSes) or (Defaults.OS = osNo'+ 'ne)) then'#010+ ' S := S + '#039'['#039' + GetArchiveName (Self, true) + ArchiveEx'+ 'tension + '#039']'#039';'#010+ - ' S := S +',' '#039','#039' + Description;'#010+ - ' PkgList.Add(S);'#010+ + ' S := S + '#039','#039' + Description;'#010+ + ' PkgList.A','dd(S);'#010+ ' end;'#010+ 'end;'#010+ #010+ @@ -4239,7 +4739,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'begin'#010+ ' if not assigned(APackageVariant.FMasterPackage) then'#010+ ' APackageVariant.FMasterPackage := Self;'#010+ - ' FPa','ckageVariants.Add(APackageVariant);'#010+ + ' FPackageVariants.Add(APackageVariant);',#010+ 'end;'#010+ #010+ 'procedure TPackage.ApplyPackageVariantToCompilerOptions(ACompilerOptio'+ @@ -4249,8 +4749,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' PackageVariants: TPackageVariants;'#010+ 'begin'#010+ ' for i := 0 to FPackageVariants.Count-1 do'#010+ - ' begi','n'#010+ - ' PackageVariants := TPackageVariants(FPackageVariants.Items[i]);'#010+ + ' begin'#010+ + ' PackageVariants := TPackageVa','riants(FPackageVariants.Items[i]);'#010+ ' ACompilerOptions.AddStrings(PackageVariants.ActivePackageVariant.O'+ 'ptions);'#010+ ' end;'#010+ @@ -4259,41 +4759,41 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'procedure TPackage.SetDefaultPackageVariant;'#010+ 'var'#010+ ' i,j: integer;'#010+ - ' PackageVa','riants: TPackageVariants;'#010+ + ' PackageVariants: TPackageVariants;'#010+ 'begin'#010+ - ' for i := 0 to FPackageVariants.Count-1 do'#010+ + ' f','or i := 0 to FPackageVariants.Count-1 do'#010+ ' begin'#010+ ' PackageVariants := TPackageVariants(FPackageVariants.Items[i]);'#010+ ' if Installer.FPackageVariantSettings.Values[PackageVariants.Name]<'+ '>'#039#039' then'#010+ - ' P','ackageVariants.ActivePackageVariantName:= Installer.FPackageV'+ + ' PackageVariants.ActivePackageVariant','Name:= Installer.FPackageV'+ 'ariantSettings.Values[PackageVariants.Name]'#010+ ' else'#010+ ' PackageVariants.ActivePackageVariantName:= PackageVariants.Defau'+ 'ltPackageVariantName;'#010+ - ' IncludePath.AddList(PackageVar','iants.ActivePackageVariant.Include'+ - 'Path);'#010+ + ' IncludePath.AddList(PackageVariants.ActivePackageVariant.IncludeP', + 'ath);'#010+ ' SourcePath.AddList(PackageVariants.ActivePackageVariant.SourcePath'+ ');'#010+ ' Dictionary.AddVariable(PackageVariants.Name,PackageVariants.Active'+ 'PackageVariantName);'#010+ - ' SetUnitsOutputDir(IncludeTraili','ngPathDelimiter(FUnitsOutputDir)+'+ - #039'$('#039'+PackageVariants.name+'#039')'#039');'#010+ - ' SetPackageUnitInstallDir(IncludeTrailingPathDelimiter(FPackageUnit'+ - 'InstallDir)+'#039'$('#039'+PackageVariants.Name+'#039')'#039');'#010+ + ' SetUnitsOutputDir(IncludeTrailingPathDelimiter(FUnitsOutputDir)+'#039+ + '$','('#039'+PackageVariants.name+'#039')'#039');'#010+ + ' SetPackageUnitInstallDir(FixPath(FPackageUnitInstallDir, True)+'#039+ + '$('#039'+PackageVariants.Name+'#039')'#039');'#010+ ' // Do not add targets f the package is inherited'#010+ - ' if P','ackageVariants.MasterPackage=Self then'#010+ - ' for j := 0 to PackageVariants.ActivePackageVariant.Targets.count'+ - ' -1 do'#010+ + ' if PackageVariants.MasterPackage=Self then'#010+ + ' for j',' := 0 to PackageVariants.ActivePackageVariant.Targets.cou'+ + 'nt -1 do'#010+ ' targets.add.assign(PackageVariants.ActivePackageVariant.Target'+ 's.items[j]);'#010+ ' end;'#010+ 'end;'#010+ #010+ #010+ - 'procedure TPackage.LoadUn','itConfigFromFile(Const AFileName: String);'#010+ + 'procedure TPackage.LoadUnitConfigFromFile(Const AFileName: String);'#010+ 'var'#010+ - ' L,L2 : TStrings;'#010+ + ' L',',L2 : TStrings;'#010+ ' VOS : TOS;'#010+ ' VCPU : TCPU;'#010+ ' i,k : Integer;'#010+ @@ -4302,80 +4802,81 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' D : TDependency;'#010+ ' PackageVariantsStr: string;'#010+ ' PackageVarName: string;'#010+ - ' pv: TP','ackageVariants;'#010+ + ' pv: TPackageVariants;'#010+ ' AnIsInheritable: boolean;'#010+ - 'begin'#010+ + 'begin'#010, ' L:=TStringList.Create;'#010+ ' Try'#010+ ' ReadIniFile(AFileName,L);'#010+ ' With L do'#010+ ' begin'#010+ ' Version:=Values[KeyVersion];'#010+ - ' InstalledChecksum:=Cardinal(StrToInt64Def(Values[KeyChecks','um'+ - '],$ffffffff));'#010+ - ' VCPU:=StringToCPU(Values[KeyCPU]);'#010+ + ' InstalledChecksum:=Cardinal(StrToInt64Def(Values[KeyChecksum],'+ + '$ffffffff));'#010+ + ' VCPU:=StringToCPU(Values[','KeyCPU]);'#010+ ' VOS:=StringToOS(Values[KeyOS]);'#010+ ' OSes:=[VOS];'#010+ ' CPUs:=[VCPU];'#010+ ' L2:=TStringList.Create;'#010+ ' L2.CommaText:=Values[KeyDepends];'#010+ - ' for i:=0 to L2.','Count-1 do'#010+ + ' for i:=0 to L2.Count-1 do'#010+ ' begin'#010+ - ' DepName:=L2[i];'#010+ + ' DepName:=L2','[i];'#010+ ' k:=Pos('#039'|'#039',DepName);'#010+ ' if k>0 then'#010+ ' begin'#010+ ' DepChecksum:=StrToInt(Copy(DepName,k+1,Length(DepName)'+ '-k));'#010+ - ' DepName:=Copy(De','pName,1,k-1);'#010+ + ' DepName:=Copy(DepName,1,k-1);'#010+ ' end'#010+ ' else'#010+ - ' DepChecksum:=$ffffffff;'#010+ + ' ',' DepChecksum:=$ffffffff;'#010+ ' D:=Dependencies.Add(DepName,CPUs,OSes);'#010+ ' D.RequireChecksum:=DepChecksum;'#010+ ' end;'#010+ ' FreeAndNil(L2);'#010+ - ' NeedLibC:=','Upcase(Values[KeyNeedLibC])='#039'Y'#039';'#010+ - ' IsFPMakeAddIn:=Upcase(Values[KeyAddIn])='#039'Y'#039';'#010+ + ' NeedLibC:=Upcase(Values[KeyNeedLibC])='#039'Y'#039';'#010+ + ' IsFPMakeA','ddIn:=Upcase(Values[KeyAddIn])='#039'Y'#039';'#010+ ' Flags.DelimitedText:=Values[KeyFlags];'#010+ - #010+ + ' if Values[KeyTransmit]<>'#039#039' then'#010+ + ' TransmitOptions.DelimitedText:=Values[KeyTransmit];'#010+ ' i := 1;'#010+ ' repeat'#010+ - ' PackageVariantsStr:=Values[KeyPackageVar+inttostr(i)];'#010+ - ' if P','ackageVariantsStr<>'#039#039' then'#010+ + ' PackageVariantsS','tr:=Values[KeyPackageVar+inttostr(i)];'#010+ + ' if PackageVariantsStr<>'#039#039' then'#010+ ' begin'#010+ ' k := pos('#039':'#039',PackageVariantsStr);'#010+ ' if k > 0 then'#010+ ' begin'#010+ - ' PackageVarName:=copy(PackageVariantsStr,1,k-1);'#010+ - ' if PackageVarName[Length(','PackageVarName)]='#039'*'#039+ - ' then'#010+ + ' PackageVarName:=copy(PackageVariantsSt','r,1,k-1);'#010+ + ' if PackageVarName[Length(PackageVarName)]='#039'*'#039' '+ + 'then'#010+ ' begin'#010+ ' SetLength(PackageVarName,Length(PackageVarName)-1);'#010+ ' AnIsInheritable:=true;'#010+ ' end'#010+ - ' else'#010+ - ' AnIsInheritable:=f','alse;'#010+ + ' ',' else'#010+ + ' AnIsInheritable:=false;'#010+ ' PackageVariantsStr:=copy(PackageVariantsStr,k+1,length'+ '(PackageVariantsStr)-k);'#010+ ' pv := Installer.AddPackageVariant(PackageVarName, AnIs'+ 'Inheritable);'#010+ - ' AddPackageVariant(pv);'#010+ + ' ',' AddPackageVariant(pv);'#010+ #010+ - ' ',' k := pos('#039','#039',PackageVariantsStr);'#010+ + ' k := pos('#039','#039',PackageVariantsStr);'#010+ ' while k>0 do'#010+ ' begin'#010+ ' PackageVarName:=copy(PackageVariantsStr,1,k-1);'#010+ - ' PackageVariantsStr:=copy(PackageVariantsStr,k+1,le'+ - 'ngth(PackageVa','riantsStr)-k);'#010+ + ' PackageVarian','tsStr:=copy(PackageVariantsStr,k+1,'+ + 'length(PackageVariantsStr)-k);'#010+ ' pv.Add(PackageVarName);'#010+ ' k := pos('#039','#039',PackageVariantsStr);'#010+ ' end;'#010+ ' pv.Add(PackageVariantsStr);'#010+ - ' end;'#010+ + ' ',' end;'#010+ ' end;'#010+ ' inc(i);'#010+ - ' un','til PackageVariantsStr='#039#039';'#010+ + ' until PackageVariantsStr='#039#039';'#010+ #010+ ' end;'#010+ ' Finally'#010+ @@ -4386,73 +4887,90 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'procedure TPackage.SaveUnitConfigToStringList(const AStringList: TStri'+ 'ngs; ACPU: TCPU; AOS: TOS);'#010+ 'Var'#010+ - ' Deps : String;'#010+ + ' Deps : Stri','ng;'#010+ ' i,j : integer;'#010+ ' D : TDependency;'#010+ - ' p : TPack','age;'#010+ + ' p : TPackage;'#010+ ' PackageVariants : TPackageVariants;'#010+ ' PackageVariantsStr: string;'#010+ + ' s: string;'#010+ 'begin'#010+ ' with AStringList do'#010+ ' begin'#010+ ' Values[KeyName]:=Name;'#010+ ' Values[KeyVersion]:=Version;'#010+ - ' // TODO Generate checksum based on PPUs'#010+ - ' InstalledChec','ksum:=DateTimeToFileDate(Now);'#010+ + ' ',' // TODO Generate checksum based on PPUs'#010+ + ' InstalledChecksum:=DateTimeToFileDate(Now);'#010+ ' Values[KeyChecksum]:=IntToStr(InstalledChecksum);'#010+ ' Values[KeyCPU]:=CPUToString(ACPU);'#010+ ' Values[KeyOS]:=OSToString(AOS);'#010+ - ' //Installer;'#010+ - ' Values[KeySourcePath]:=IncludeTrailingPathDelimit','er(IncludeTra'+ - 'ilingPathDelimiter(Installer.BuildEngine.FStartDir)+Directory);'#010+ + ' //In','staller;'#010+ + ' Values[KeySourcePath]:=IncludeTrailingPathDelimiter(IncludeTrail'+ + 'ingPathDelimiter(Installer.BuildEngine.FStartDir)+Directory);'#010+ ' Values[KeyFPMakeOptions]:=trim(Installer.FPMakeOptionsString);'#010+ ' Deps:='#039#039';'#010+ - ' for i:=0 to Dependencies.Count-1 do'#010+ + ' for i:=0',' to Dependencies.Count-1 do'#010+ ' begin'#010+ - ' D:=Dependenc','ies[i];'#010+ + ' D:=Dependencies[i];'#010+ ' if (ACPU in D.CPUs) and (AOS in D.OSes) then'#010+ ' begin'#010+ ' if Deps<>'#039#039' then'#010+ ' Deps:=Deps+'#039','#039';'#010+ - ' Deps:=Deps+D.Value;'#010+ + ' Deps:=Deps+D.Value',';'#010+ ' P:=TPackage(D.Target);'#010+ - ' if assigned','(P) and (P.InstalledChecksum<>$ffffffff) th'+ - 'en'#010+ + ' if assigned(P) and (P.InstalledChecksum<>$ffffffff) then'+ + #010+ ' Deps:=Deps+'#039'|'#039'+IntToStr(P.InstalledChecksum);'#010+ ' end;'#010+ ' end;'#010+ ' Values[KeyDepends]:=Deps;'#010+ - ' if Flags.Count>0 then'#010+ - ' Values[KeyFlags]:=Flags.DelimitedT','ext;'#010+ + ' ','if Flags.Count>0 then'#010+ + ' Values[KeyFlags]:=Flags.DelimitedText;'#010+ + ' if TransmitOptions.Count>0 then'#010+ + ' Values[KeyTransmit]:=TransmitOptions.DelimitedText;'#010+ ' if NeedLibC then'#010+ ' Values[KeyNeedLibC]:='#039'Y'#039#010+ ' else'#010+ - ' Values[KeyNeedLibC]:='#039'N'#039';'#010+ + ' ',' Values[KeyNeedLibC]:='#039'N'#039';'#010+ ' if IsFPMakeAddIn then'#010+ ' Values[KeyAddIn]:='#039'Y'#039#010+ ' else'#010+ ' Values[KeyAddIn]:='#039'N'#039';'#010+ - ' for i := 0 to FPackageVarian','ts.Count-1 do'#010+ + #010+ + ' s := '#039#039';'#010+ + ' for i := 0 to FTargets.Count-1 do'#010+ + ' begin'#010+ + ' if FTargets.TargetItems[i].IsFPM','akePlugin then'#010+ + ' begin'#010+ + ' if s <> '#039#039' then'#010+ + ' s := s + '#039','#039';'#010+ + ' s := s + FTargets.TargetItems[i].Name;'#010+ + ' end;'#010+ + ' end;'#010+ + ' if s<>'#039#039' then'#010+ + ' Values[KeyPluginUnits]:=s;'#010+ + #010+ + ' fo','r i := 0 to FPackageVariants.Count-1 do'#010+ ' begin'#010+ ' PackageVariants := TPackageVariants(FPackageVariants.Items[i'+ ']);'#010+ ' PackageVariantsStr:=PackageVariants.Name;'#010+ ' if PackageVariants.IsInheritable then'#010+ - ' PackageVariantsStr:=Packag','eVariantsStr+'#039'*'#039';'#010+ + ' ','PackageVariantsStr:=PackageVariantsStr+'#039'*'#039';'#010+ ' PackageVariantsStr := PackageVariantsStr +'#039':'#039'+Packag'+ 'eVariants.DefaultPackageVariantName;'#010+ ' for j := 0 to PackageVariants.Count-1 do'#010+ - ' if not sametext(PackageVariants.Items[j].Name, PackageVari'+ - 'an','ts.DefaultPackageVariantName) then'#010+ + ' if not sametext(PackageVariants.It','ems[j].Name, PackageVa'+ + 'riants.DefaultPackageVariantName) then'#010+ ' PackageVariantsStr:=PackageVariantsStr+'#039','#039'+Packa'+ 'geVariants.Items[j].Name;'#010+ ' values[KeyPackageVar+inttostr(i+1)] := PackageVariantsStr;'#010+ ' end;'#010+ - ' end;'#010+ + ' end;'#010, 'end;'#010+ #010+ - 'procedure TPackage.S','aveUnitConfigToFile(Const AFileName: String;ACPU'+ - ':TCPU;AOS:TOS);'#010+ + 'procedure TPackage.SaveUnitConfigToFile(Const AFileName: String;ACPU:T'+ + 'CPU;AOS:TOS);'#010+ 'Var'#010+ ' F : TFileStream;'#010+ ' L : TStringList;'#010+ @@ -4460,7 +4978,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' F:=TFileStream.Create(AFileName,fmCreate or fmShareDenyNone);'#010+ ' L:=TStringList.Create;'#010+ ' try'#010+ - ' SaveUnitConfigToStringList(L,','ACPU,AOS);'#010+ + ' Sav','eUnitConfigToStringList(L,ACPU,AOS);'#010+ ' L.SaveToStream(F);'#010+ ' Finally'#010+ ' L.Free;'#010+ @@ -4473,7 +4991,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( '{*********************************************************************'+ '*******'#010+ ' TPackages'#010+ - '***************************************','*****************************'+ + '*************','*******************************************************'+ '********}'#010+ #010+ 'function TPackages.GetPackage(const AName : String): TPackage;'#010+ @@ -4481,9 +4999,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Result:=TPackage(ItemByName(AName))'#010+ 'end;'#010+ #010+ - 'function TPackages.GetPackageItem(AIndex : Integer): TPackage;'#010+ + 'function TPackages.GetPackageItem(AIndex : Integer): TPackage',';'#010+ 'begin'#010+ - ' Result:=TPackage','(Items[AIndex]);'#010+ + ' Result:=TPackage(Items[AIndex]);'#010+ 'end;'#010+ #010+ #010+ @@ -4496,9 +5014,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'function TPackages.AddPackage(const AName: String): TPackage;'#010+ 'var'#010+ - ' i: integer;'#010+ + ' i: int','eger;'#010+ 'begin'#010+ - ' i := IndexOf','Name(AName);'#010+ + ' i := IndexOfName(AName);'#010+ ' if i > -1 then'#010+ ' begin'#010+ ' result := PackageItems[i];'#010+ @@ -4507,18 +5025,18 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' else'#010+ ' begin'#010+ ' Result:=Add as TPackage;'#010+ - ' Result.Name:=AName;'#010+ + ' Result.Name:=AName',';'#010+ ' end;'#010+ 'end;'#010+ #010+ #010+ - '{*******','************************************************************'+ - '*********'#010+ + '{*********************************************************************'+ + '*******'#010+ ' TCustomDefaults'#010+ '**********************************************************************'+ '******}'#010+ #010+ - 'procedure TCustomDefaults.SetCPU(const AValue:',' TCPU);'#010+ + 'procedure TCustomDef','aults.SetCPU(const AValue: TCPU);'#010+ 'begin'#010+ ' FCPU:=AValue;'#010+ ' GlobalDictionary.AddVariable('#039'CPU'#039',CPUToString(FCPU));'#010+ @@ -4527,8 +5045,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'procedure TCustomDefaults.SetOptions(const AValue: TStrings);'#010+ 'begin'#010+ - ' If (AValue=Nil) or (AValue.Count=0) then'#010+ - ' FreeAndNil(Fopti','ons)'#010+ + ' If (AValue=Nil) or (AValue.Count=0)',' then'#010+ + ' FreeAndNil(Foptions)'#010+ ' else'#010+ ' Options.Assign(AValue)'#010+ 'end;'#010+ @@ -4540,8 +5058,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Result:=FBaseInstallDir'#010+ ' else'#010+ ' if UnixPaths then'#010+ - ' Result:=Prefix +'#039'lib'#039' + PathDelim + '#039'fpc'#039,' + Pat'+ - 'hDelim + FCompilerVersion + PathDelim'#010+ + ' Result:=Prefix ','+'#039'lib'#039' + PathDelim + '#039'fpc'#039' + Pa'+ + 'thDelim + FCompilerVersion + PathDelim'#010+ ' else'#010+ ' Result:=Prefix;'#010+ 'end;'#010+ @@ -4552,8 +5070,20 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' If (FBinInstallDir<>'#039#039') then'#010+ ' Result:=FBinInstallDir'#010+ ' else'#010+ + ' If Uni','xPaths then'#010+ + ' Result:=Prefix+'#039'bin'#039#010+ + ' else'#010+ + ' Result:=BaseInstallDir+'#039'bin'#039'+pathdelim+MakeTargetString('+ + 'Defaults.cpu, Defaults.OS);'#010+ + 'end;'#010+ + #010+ + 'function TCustomDefaults.GetLibInstallDir: String;'#010+ + 'begin'#010+ + ' If (FLibInstallDir<>'#039#039') then'#010+ + ' Resu','lt:=FLibInstallDir'#010+ + ' else'#010+ ' If UnixPaths then'#010+ - ' Result:=','Prefix+'#039'bin'#039#010+ + ' Result:=Prefix+'#039'lib'#039#010+ ' else'#010+ ' Result:=BaseInstallDir+'#039'bin'#039'+pathdelim+MakeTargetString('+ 'Defaults.cpu, Defaults.OS);'#010+ @@ -4562,10 +5092,10 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'function TCustomDefaults.GetCompiler: String;'#010+ 'begin'#010+ - ' If (FCompiler<>'#039#039') then'#010+ + ' If (F','Compiler<>'#039#039') then'#010+ ' Result:=FCompiler'#010+ ' else'#010+ - ' Result:='#039'f','pc'#039';'#010+ + ' Result:='#039'fpc'#039';'#010+ 'end;'#010+ #010+ #010+ @@ -4573,16 +5103,16 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'begin'#010+ ' If (FDocInstallDir<>'#039#039') then'#010+ ' Result:=FDocInstallDir'#010+ - ' else if (Defaults.BuildOS=freebsd) or (Defaults.BuildOS=dragonfly) t'+ - 'hen'#010+ - ' Result:=Prefix+'#039'share'#039'+PathDelim+'#039'd','oc'#039'+PathDelim'+ - '+'#039'fpc-$(CompilerVersion)'#039'+PathDelim+'#039'$(PackageName)'#039#010+ - ' else If UnixPaths then'#010+ + ' else if (Defaults.BuildOS=freebsd) or (Defaults.B','uildOS=dragonfly)'+ + ' then'#010+ ' Result:=Prefix+'#039'share'#039'+PathDelim+'#039'doc'#039'+PathDelim+'#039+ 'fpc-$(CompilerVersion)'#039'+PathDelim+'#039'$(PackageName)'#039#010+ + ' else If UnixPaths then'#010+ + ' Result:=Prefix+'#039'share'#039'+PathDelim+'#039'doc'#039'+PathDelim+'#039+ + 'fpc-$(CompilerVersion)'#039'+PathDelim','+'#039'$(PackageName)'#039#010+ ' else'#010+ - ' Result:=BaseInstallDir+'#039'docs'#039'+Pat','hDelim+'#039'$(PackageNa'+ - 'me)'#039';'#010+ + ' Result:=BaseInstallDir+'#039'docs'#039'+PathDelim+'#039'$(PackageName'+ + ')'#039';'#010+ 'end;'#010+ #010+ #010+ @@ -4590,15 +5120,15 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'begin'#010+ ' If (FExamplesInstallDir<>'#039#039') then'#010+ ' Result:=FExamplesInstallDir'#010+ - ' else if (Defaults.BuildOS=freebsd) or (Defaults.BuildOS=dragonfly) t'+ - 'hen'#010+ - ' ','Result:=Prefix+'#039'share'#039'+PathDelim+'#039'examples'#039'+Path'+ - 'Delim+'#039'fpc-$(CompilerVersion)'#039'+PathDelim+'#039'$(PackageName)'#039+ + ' else if (Defau','lts.BuildOS=freebsd) or (Defaults.BuildOS=dragonfly)'+ + ' then'#010+ + ' Result:=Prefix+'#039'share'#039'+PathDelim+'#039'examples'#039'+PathDe'+ + 'lim+'#039'fpc-$(CompilerVersion)'#039'+PathDelim+'#039'$(PackageName)'#039+ '+PathDelim+'#039'examples'#039#010+ ' else If UnixPaths then'#010+ - ' Result:=Prefix+'#039'share'#039'+PathDelim+'#039'doc'#039'+PathDelim+'#039+ - 'fpc-$(CompilerVersion)'#039'+PathDelim+',#039'$(PackageName)'#039'+PathDel'+ - 'im+'#039'examples'#039#010+ + ' Result:=Prefix+'#039'share'#039,'+PathDelim+'#039'doc'#039'+PathDelim+'+ + #039'fpc-$(CompilerVersion)'#039'+PathDelim+'#039'$(PackageName)'#039'+Path'+ + 'Delim+'#039'examples'#039#010+ ' else'#010+ ' Result:=BaseInstallDir+'#039'examples'#039'+PathDelim+'#039'$(Package'+ 'Name)'#039';'#010+ @@ -4606,9 +5136,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'function TCustomDefaults.GetOptions: TStrings;'#010+ 'begin'#010+ - ' If (FOptions=Nil) then'#010+ + ' If (FO','ptions=Nil) then'#010+ ' FOptions:=TStringList.Create;'#010+ - ' Result:=F','Options;'#010+ + ' Result:=FOptions;'#010+ 'end;'#010+ #010+ #010+ @@ -4616,27 +5146,36 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'begin'#010+ ' // Use ExpandFileName to support ~/ expansion'#010+ ' if FPrefix<>'#039#039' then'#010+ - ' Result:=IncludeTrailingPathDelimiter(ExpandFileName(FPrefix))'#010+ + ' Result:=IncludeTrailingPathDelimiter(E','xpandFileName(FPrefix))'#010+ ' else'#010+ ' Result:='#039#039';'#010+ 'end;'#010+ #010+ #010+ - 'function',' TCustomDefaults.GetUnitInstallDir: String;'#010+ + 'function TCustomDefaults.GetSearchPath: TStrings;'#010+ + 'begin'#010+ + ' Result := FSearchPath;'#010+ + 'end;'#010+ + #010+ + #010+ + 'function TCustomDefaults.GetUnitInstallDir: String;'#010+ 'begin'#010+ ' result := FUnitInstallDir;'#010+ 'end;'#010+ #010+ #010+ - 'function TCustomDefaults.GetUnitConfigFilesInstallDir: String;'#010+ + 'func','tion TCustomDefaults.GetUnitConfigFilesInstallDir: String;'#010+ 'begin'#010+ ' result := FUnitConfigFilesInstallDir;'#010+ 'end;'#010+ #010+ #010+ - 'function TCustomDefaults.GetLocalUnitD','ir: String;'#010+ + 'function TCustomDefaults.GetLocalUnitDir: String;'#010+ 'begin'#010+ - ' Result:=FLocalUnitDir;'#010+ + ' if FSearchPath.Count>0 then'#010+ + ' Result:=FSearchPath[0]'#010+ + ' else'#010+ + ' Resu','lt:='#039#039';'#010+ 'end;'#010+ #010+ 'function TCustomDefaults.GetFPDocOutputDir: String;'#010+ @@ -4645,9 +5184,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Result:=FixPath(FFPDocOutputDir, True)'#010+ ' else'#010+ ' Result:=FixPath('#039'.'#039'+PathDelim+'#039'docs'#039', True);'#010+ - 'en','d;'#010+ + 'end;'#010+ #010+ - 'function TCustomDefaults.GetFPUnitSourcePath: String;'#010+ + 'function TCustomDefaults.GetFPU','nitSourcePath: String;'#010+ 'begin'#010+ ' If (FFPUnitSourcePath='#039#039') or (FFPUnitSourcePath='#039'0'#039') t'+ 'hen'#010+ @@ -4656,9 +5195,18 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Result:=FixPath(FFPUnitSourcePath, True);'#010+ 'end;'#010+ #010+ - 'function TCustomDefaults.','GetBuildCPU: TCpu;'#010+ + 'function TCustomDefaults.SafeExpandFileName(const AFileName:',' string)'+ + ': string;'#010+ 'begin'#010+ - ' result := StringToCPU({$I %FPCTARGETCPU%});'#010+ + ' if AFileName<>'#039#039' then'#010+ + ' Result:=IncludeTrailingPathDelimiter(ExpandFileName(AFileName))'#010+ + ' else'#010+ + ' Result:='#039#039';'#010+ + 'end;'#010+ + #010+ + 'function TCustomDefaults.GetBuildCPU: TCpu;'#010+ + 'begin'#010+ + ' result := StringToCPU({$I %FPCTARGETCPU%});',#010+ 'end;'#010+ #010+ 'function TCustomDefaults.GetBuildOS: TOS;'#010+ @@ -4668,90 +5216,101 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'function TCustomDefaults.GetBuildString: String;'#010+ 'begin'#010+ - ' result :','= MakeTargetString(BuildCPU, BuildOS);'#010+ + ' result := MakeTargetString(BuildCPU, BuildOS);'#010+ 'end;'#010+ #010+ - 'function TCustomDefaults.GetGlobalUnitDir: String;'#010+ + 'function TCustomDefaults.','GetGlobalUnitDir: String;'#010+ 'begin'#010+ - ' If (FGlobalUnitDir<>'#039#039') then'#010+ - ' Result:=FGlobalUnitDir'#010+ + ' if FSearchPath.Count>1 then'#010+ + ' Result:=FSearchPath[1]'#010+ ' else'#010+ - ' Result:=UnitInstallDir;'#010+ + ' Result:='#039#039';'#010+ 'end;'#010+ #010+ #010+ - 'procedure TCustomDefaults.SetLocalUnit','Dir(const AValue: String);'#010+ + 'procedure TCustomDefaults.SetLocalUnitDir(const AValue: String);'#010+ 'begin'#010+ ' // Use ExpandFileName to support ~/ expansion'#010+ - ' if AValue<>'#039#039' then'#010+ - ' FLocalUnitDir:=IncludeTrailingPathDelimiter(ExpandFileName(AValue)'+ - ')'#010+ + ' ','if FSearchPath.Count=0 then'#010+ + ' FSearchPath.Add(SafeExpandFileName(AValue))'#010+ ' else'#010+ - ' FLocalUnitDir:='#039#039';'#010+ + ' FSearchPath[0]:=SafeExpandFileName(AValue);'#010+ 'end;'#010+ #010+ #010+ - 'procedure TCustomDefaults.Set','GlobalUnitDir(const AValue: String);'#010+ + 'procedure TCustomDefaults.SetGlobalUnitDir(const AValue: String);'#010+ 'begin'#010+ - ' // Use ExpandFileName to support ~/ expansion'#010+ - ' if AValue<>'#039#039' then'#010+ - ' FGlobalUnitDir:=IncludeTrailingPathDelimiter(ExpandFileName(AValue'+ - '))'#010+ + ' // Use ExpandFileName to sup','port ~/ expansion'#010+ + ' if FSearchPath.Count<2 then'#010+ + ' begin'#010+ + ' if FSearchPath.Count<1 then'#010+ + ' FSearchPath.Add('#039#039');'#010+ + ' FSearchPath.Add(SafeExpandFileName(AValue));'#010+ + ' end'#010+ ' else'#010+ - ' FGlobalUnitDir:='#039#039';'#010+ - 'end;'#010+ + ' FSearchPath[1]:=SafeExpandFileName(AValue);'#010+ + 'end;'#010, #010+ - 'procedure TCustomD','efaults.IntSetBaseInstallDir(const AValue: String)'+ - ';'#010+ + 'procedure TCustomDefaults.IntSetBaseInstallDir(const AValue: String);'#010+ 'begin'#010+ ' if AValue<>'#039#039' then'#010+ ' FBaseInstallDir:=IncludeTrailingPathDelimiter(AValue)'#010+ ' else'#010+ - ' FBaseInstallDir:='#039#039';'#010+ - ' GlobalDictionary.AddVariable('#039'baseinstalldir'#039',BaseInstallDir'+ - ');'#010+ - ' Glob','alDictionary.AddVariable('#039'bininstalldir'#039',BinInstallDir'+ - ');'#010+ + ' FBaseInstallDir:='#039#039';'#010+ + ' GlobalDictionary.AddVariable('#039'baseinstalldir'#039',Base','InstallD'+ + 'ir);'#010+ + ' GlobalDictionary.AddVariable('#039'bininstalldir'#039',BinInstallDir);'+ + #010+ + ' GlobalDictionary.AddVariable('#039'libinstalldir'#039',LibInstallDir);'+ + #010+ ' BinInstallDir:='#039#039';'#010+ + ' LibInstallDir:='#039#039';'#010+ ' ExamplesInstallDir:='#039#039';'#010+ 'end;'#010+ #010+ #010+ - 'procedure TCustomDefaults.SetBaseInstallDir(const AValue: String);'#010+ + 'procedure TCustomDefaults.','SetBaseInstallDir(const AValue: String);'#010+ 'begin'#010+ - ' // There must be a possibility to skip ExpandFileName.',' So that the'+ - ' files'#010+ + ' // There must be a possibility to skip ExpandFileName. So that the f'+ + 'iles'#010+ ' // can be written into an archive with a relative path.'#010+ ' if AValue<>'#039#039' then'#010+ - ' // Use ExpandFileName to support ~/ expansion'#010+ + ' // Use ExpandFileName to support ~/',' expansion'#010+ ' IntSetBaseInstallDir(ExpandFileName(AValue))'#010+ ' else'#010+ ' IntSetBaseInstallDir(AValue);'#010+ - 'en','d;'#010+ + 'end;'#010+ #010+ #010+ 'procedure TCustomDefaults.SetOS(const AValue: TOS);'#010+ 'begin'#010+ ' FOS:=AValue;'#010+ ' GlobalDictionary.AddVariable('#039'OS'#039',OSToString(FOS));'#010+ - ' Recalctarget;'#010+ + ' Rec','alctarget;'#010+ 'end;'#010+ #010+ #010+ 'procedure TCustomDefaults.SetPrefix(const AValue: String);'#010+ 'begin'#010+ - ' if FPrefix=AValue ','then exit;'#010+ + ' if FPrefix=AValue then exit;'#010+ ' FPrefix:=AValue;'#010+ ' GlobalDictionary.AddVariable('#039'prefix'#039',Prefix);'#010+ - ' GlobalDictionary.AddVariable('#039'bininstalldir'#039',BinInstallDir);'+ + ' GlobalDictionary.AddVariable('#039'bininstalldir'#039',BinInstallD','ir'+ + ');'#010+ + ' GlobalDictionary.AddVariable('#039'libinstalldir'#039',LibInstallDir);'+ #010+ ' BaseInstallDir:='#039#039';'#010+ 'end;'#010+ #010+ + 'procedure TCustomDefaults.SetSearchPath(AValue: TStrings);'#010+ + 'begin'#010+ + ' FSearchPath.Assign(AValue);'#010+ + 'end;'#010+ #010+ - 'procedure TCustomDefaults.SetTarget(const AValue: String);'#010+ + #010+ + 'procedure TCustomDefaults.SetTarget(const ','AValue: String);'#010+ 'Var'#010+ - ' P : ','Integer;'#010+ + ' P : Integer;'#010+ 'begin'#010+ ' if FTarget<>AValue then'#010+ ' begin'#010+ @@ -4759,7 +5318,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' If (P<>0) then'#010+ ' begin'#010+ ' FOS:=StringToOS(System.Copy(Avalue,P+1,Length(AValue)-P));'#010+ - ' GlobalDictionary.AddVariable('#039'OS'#039',OSToString(FOS)',')'+ + ' GlobalDictionary.AddVa','riable('#039'OS'#039',OSToString(FOS))'+ ';'#010+ ' FCPU:=StringToCPU(System.Copy(Avalue,1,P-1));'#010+ ' GlobalDictionary.AddVariable('#039'CPU'#039',CPUToString(FCPU)'+ @@ -4768,7 +5327,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' else'#010+ ' FOS:=StringToOS(AValue);'#010+ ' FTarget:=AValue;'#010+ - ' GlobalDictionary.AddVariable('#039't','arget'#039',Target);'#010+ + ' Glob','alDictionary.AddVariable('#039'target'#039',Target);'#010+ ' end;'#010+ 'end;'#010+ #010+ @@ -4781,7 +5340,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'procedure TCustomDefaults.SetUnitConfigFilesInst','allDir(const AValue:'+ + 'procedure TCustomDefa','ults.SetUnitConfigFilesInstallDir(const AValue:'+ ' String);'#010+ 'begin'#010+ ' FUnitConfigFilesInstallDir:=AValue;'#010+ @@ -4795,7 +5354,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'procedure TCustomDefaults.RecalcTa','rget;'#010+ + 'procedu','re TCustomDefaults.RecalcTarget;'#010+ 'begin'#010+ ' Ftarget:=MakeTargetString(FCPU,FOS);'#010+ ' GlobalDictionary.AddVariable('#039'target'#039',Target);'#010+ @@ -4804,17 +5363,24 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'function TCustomDefaults.CmdLineOptions: String;'#010+ 'begin'#010+ ' If Haveoptions then'#010+ - ' Result:=OptionListToString(FOptions);'#010+ + ' Result:=OptionListToString','(FOptions);'#010+ 'end;'#010+ #010+ #010+ - 'construc','tor TCustomDefaults.Create;'#010+ + 'constructor TCustomDefaults.Create;'#010+ 'begin'#010+ + ' FSearchPath:=TStringList.Create;'#010+ ' InitDefaults;'#010+ 'end;'#010+ #010+ + 'destructor TCustomDefaults.Destroy;'#010+ + 'begin'#010+ + ' FSearchPath.Free;'#010+ + ' inherited;'#010+ + 'end;'#010+ #010+ - 'procedure TCustomDefaults.InitDefaults;'#010+ + #010+ + 'procedure TCustomDefaults.InitDefaults;'#010, 'begin'#010+ '{$ifdef unix}'#010+ ' UnixPaths:=True;'#010+ @@ -4824,21 +5390,21 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' FNoFPCCfg:=False;'#010+ ' FCPU:=cpuNone;'#010+ ' FOS:=osNone;'#010+ - ' FUnitInstallD','ir:='#039'$(baseinstalldir)units/$(target)/$(packagena'+ - 'me)'#039';'#010+ - ' FUnitConfigFilesInstallDir:='#039'fpmkinst/$(target)'#039';'#010+ + ' FUnitInstallDir:='#039'$(baseinstalldir)units/$(target)/$(packagename'+ + ')'#039';'#010+ + ' FUnitConfigFilesInstallDir:='#039'fpmkinst/$(','target)'#039';'#010+ ' FBuildMode:=bmOneByOne;'#010+ ' FThreadsAmount:=-1;'#010+ 'end;'#010+ #010+ 'function TCustomDefaults.HaveOptions: Boolean;'#010+ 'begin'#010+ - ' Result:=Assigned(FOption','s);'#010+ + ' Result:=Assigned(FOptions);'#010+ 'end;'#010+ #010+ 'function TCustomDefaults.IsBuildDifferentFromTarget: boolean;'#010+ 'begin'#010+ - ' result := IsDifferentFromBuild(CPU,OS);'#010+ + ' result := IsDiffe','rentFromBuild(CPU,OS);'#010+ 'end;'#010+ #010+ #010+ @@ -4847,26 +5413,26 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' FN : String;'#010+ 'begin'#010+ ' FN:=AFileName;'#010+ - ' If (FN','='#039#039') then'#010+ + ' If (FN='#039#039') then'#010+ ' begin'#010+ ' // Environment variable.'#010+ - ' FN:=SysUtils.GetEnvironmentVariable('#039'FPMAKECFG'#039');'#010+ + ' FN:=SysUtils.GetEnvironmentVariable('#039'FPMAKEC','FG'#039');'#010+ ' If (FN<>'#039#039') then'#010+ ' If not FileExists(FN) then'#010+ ' FN:='#039#039';'#010+ ' // User config file fpmake.cfg'#010+ ' If (FN='#039#039') then'#010+ - ' begin'#010, + ' begin'#010+ ' FN:=GetAppConfigFile(False);'#010+ ' If Not FileExists(FN) then'#010+ ' FN:='#039#039';'#010+ ' end;'#010+ - ' // Global config file fpmake.cfg'#010+ + ' ',' // Global config file fpmake.cfg'#010+ ' If (FN='#039#039') then'#010+ ' begin'#010+ ' FN:=GetAppConfigFile(True);'#010+ ' If Not FileExists(FN) then'#010+ - ' F','N:='#039#039';'#010+ + ' FN:='#039#039';'#010+ ' end;'#010+ ' end;'#010+ ' If (FN<>'#039#039') and FileExists(FN) then'#010+ @@ -4874,63 +5440,63 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'procedure TCustomDefaults.CompilerDefaults;'#010+ + 'pro','cedure TCustomDefaults.CompilerDefaults;'#010+ '{$ifdef HAS_UNIT_PROCESS}'#010+ 'var'#010+ ' infoSL : TStringList;'#010+ '{$endif HAS_UNIT_PROCESS}'#010+ 'begin'#010+ - ' if (CPU=cpuNon','e) or ((OS=osNone) and not ExplicitOSNone) or'#010+ - ' (FCompilerVersion'+ - '='#039#039') then'#010+ + ' if (CPU=cpuNone) or ((OS=osNone) and not ExplicitOSNone) or'#010+ + ' ',' (FCompilerVersi'+ + 'on='#039#039') then'#010+ ' begin'#010+ '{$ifdef HAS_UNIT_PROCESS}'#010+ ' // Detect compiler version/target from -i option'#010+ - ' infosl:=TStringLi','st.Create;'#010+ + ' infosl:=TStringList.Create;'#010+ ' infosl.Delimiter:='#039' '#039';'#010+ - ' infosl.DelimitedText:=GetCompilerInfo(GetCompiler,'#039'-iVTPTO'#039+ + ' infosl.DelimitedText:=GetCompilerInfo(GetCompiler,'#039,'-iVTPTO'#039+ ', False);'#010+ ' if infosl.Count<>3 then'#010+ ' Raise EInstallerError.Create(SErrInvalidFPCInfo);'#010+ ' if FCompilerVersion='#039#039' then'#010+ - ' ',' FCompilerVersion:=infosl[0];'#010+ + ' FCompilerVersion:=infosl[0];'#010+ ' if CPU=cpuNone then'#010+ - ' CPU:=StringToCPU(infosl[1]);'#010+ + ' CPU:=StringToCPU(infosl[1]);'#010, ' if (OS=osNone) and not ExplicitOSNone then'#010+ ' OS:=StringToOS(infosl[2]);'#010+ '{$else HAS_UNIT_PROCESS}'#010+ - ' // Defaults taken from compi','ler used to build fpmake'#010+ + ' // Defaults taken from compiler used to build fpmake'#010+ ' if CPU=cpuNone then'#010+ - ' CPU:=StringToCPU({$I %FPCTARGETCPU%});'#010+ + ' CPU:=StringToCPU({$I %FPCTARGETCPU%});',#010+ ' if (OS=osNone) and not ExplicitOSNone then'#010+ ' OS:=StringToOS({$I %FPCTARGETOS%});'#010+ ' if FCompilerVersion='#039#039' then'#010+ - ' FCompil','erVersion:={$I %FPCVERSION%};'#010+ + ' FCompilerVersion:={$I %FPCVERSION%};'#010+ '{$endif HAS_UNIT_PROCESS}'#010+ ' end;'#010+ 'end;'#010+ #010+ #010+ - 'procedure TCustomDefaults.LoadFromFile(Const AFileName: String);'#010+ + 'procedure TCustomDefaults','.LoadFromFile(Const AFileName: String);'#010+ 'Var'#010+ ' F : TFileStream;'#010+ 'begin'#010+ ' F:=TFileStream.Create(AFileName,fmOpenRead or fmShareDenyNone);'#010+ ' Try'#010+ - ' ',' LoadFromStream(F);'#010+ + ' LoadFromStream(F);'#010+ ' Finally'#010+ ' F.Free;'#010+ ' end;'#010+ 'end;'#010+ #010+ #010+ - 'procedure TCustomDefaults.SaveToFile(Const AFileName: String);'#010+ + 'procedure TCustomDefaults.SaveToFile(Con','st AFileName: String);'#010+ 'Var'#010+ ' F : TFileStream;'#010+ 'begin'#010+ ' F:=TFileStream.Create(AFileName,fmCreate or fmShareDenyNone);'#010+ ' Try'#010+ - ' SaveToStream(F);'#010, + ' SaveToStream(F);'#010+ ' Finally'#010+ ' F.Free;'#010+ ' end;'#010+ @@ -4939,40 +5505,41 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'procedure TCustomDefaults.SaveToStream(S : TStream);'#010+ 'Var'#010+ - ' L : TStringList;'#010+ + ' L ',': TStringList;'#010+ 'begin'#010+ ' L:=TStringList.Create;'#010+ ' try'#010+ ' With L do'#010+ ' begin'#010+ ' Values[KeyArchive]:=FArchive;'#010+ - ' Values[KeyCompiler]:=FC','ompiler;'#010+ + ' Values[KeyCompiler]:=FCompiler;'#010+ ' Values[KeyCopy]:=FCopy;'#010+ ' Values[KeyMkDir]:=FMkDir;'#010+ - ' Values[KeyMove]:=FMove;'#010+ + ' Values[KeyMove]:=FMo','ve;'#010+ ' Values[KeyOptions]:=CmdLineOptions;'#010+ ' Values[KeyCPU]:=CPUToString(FCPU);'#010+ ' Values[KeyOS]:=OSToString(FOS);'#010+ - ' Values[KeyMo','de]:=ModeToString(FMode);'#010+ - ' Values[KeyLocalUnitDir]:=FLocalUnitDir;'#010+ - ' Values[KeyGlobalUnitDir]:=FGlobalUnitDir;'#010+ + ' Values[KeyMode]:=ModeToString(FMode);'#010+ + ' Values[KeyLocalUnitDir]:=LocalUnitDir;'#010+ + ' Values[KeyGlobalUnit','Dir]:=GlobalUnitDir;'#010+ ' Values[KeyPrefix]:=FPrefix;'#010+ ' Values[KeyBaseInstallDir]:=FBaseInstallDir;'#010+ - ' Values[KeyUnitInstallDir]:=FUn','itInstallDir;'#010+ + ' Values[KeyUnitInstallDir]:=FUnitInstallDir;'#010+ ' Values[KeyBinInstallDir]:=FBinInstallDir;'#010+ + ' Values[KeyLibInstallDir]:=FLibI','nstallDir;'#010+ ' Values[KeyDocInstallDir]:=FDocInstallDir;'#010+ ' Values[KeyExamplesInstallDir]:=FExamplesInstallDir;'#010+ ' Values[KeyRemove]:=FRemove;'#010+ - ' Values[KeyRemoveDir]:=FRemoveDir',';'#010+ + ' Values[KeyRemoveDir]:=FRemoveDir;'#010+ ' Values[KeyRemoveTree]:=FRemoveTree;'#010+ - ' Values[KeyTarget]:=FTarget;'#010+ + ' V','alues[KeyTarget]:=FTarget;'#010+ ' if FNoFPCCfg then'#010+ ' Values[KeyNoFPCCfg]:='#039'Y'#039';'#010+ ' if FUseEnvironment then'#010+ ' Values[KeyUseEnv]:='#039'Y'#039';'#010+ ' if FInstallExamples then'#010+ - ' V','alues[KeyInstallExamples]:='#039'Y'#039';'#010+ - ' if FSkipCrossPrograms then'#010+ + ' Values[KeyInstallExamples]:='#039'Y'#039';'#010+ + ' if FSkipCross','Programs then'#010+ ' Values[KeySkipCrossProdrams]:='#039'Y'#039';'#010+ ' end;'#010+ ' L.SaveToStream(S);'#010+ @@ -4984,10 +5551,10 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'procedure TCustomDefaults.LoadFromStream(S: TStream);'#010+ 'Var'#010+ - ' L ',': TStrings;'#010+ + ' L : TStrings;'#010+ ' Line : String;'#010+ ' I,P,PC : Integer;'#010+ - 'begin'#010+ + 'be','gin'#010+ ' L:=TStringList.Create;'#010+ ' Try'#010+ ' L.LoadFromStream(S);'#010+ @@ -4996,8 +5563,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' begin'#010+ ' Line:=L[I];'#010+ ' P:=Pos('#039'='#039',Line);'#010+ - ' PC:=Pos('#039';'#039',Line);',' // Comment line.'#010+ - ' If (P=0) or ((PC<>0) and (PC0) and (','PC'#039#039') then'#010+ ' FCPU:=StringToCPU(Line);'#010+ ' Line:=Values[KeyOS];'#010+ ' If (Line<>'#039#039') then'#010+ - ' FOS:=StringTo','OS(Line);'#010+ + ' FOS:=StringToOS(Line);'#010+ ' Line:=Values[KeyMode];'#010+ - ' If (Line<>'#039#039') then'#010+ + ' If (Li','ne<>'#039#039') then'#010+ ' FMode:=StringToMode(Line);'#010+ ' FTarget:=Values[KeyTarget];'#010+ - ' FLocalUnitDir:=Values[KeyLocalUnitDir];'#010+ - ' FGlobalUnitDir:=Values[KeyGlobalUnitDir];'#010+ - ' FPrefix',':=Values[KeyPrefix];'#010+ - ' FBaseInstallDir:=Values[KeyBaseInstallDir];'#010+ + ' LocalUnitDir:=Values[KeyLocalUnitDir];'#010+ + ' GlobalUnitDir:=Values[KeyGlobalUnitDir];'#010+ + ' FPrefix:=Values[KeyPrefix];'#010+ + ' FBaseInstallDir:=Values[Ke','yBaseInstallDir];'#010+ ' FUnitInstallDir:=Values[KeyUnitInstallDir];'#010+ ' FBinInstallDir:=Values[KeyBinInstallDir];'#010+ + ' FLibInstallDir:=Values[KeyLibInstallDir];'#010+ ' FDocInstallDir:=Values[KeyDocInstallDir];'#010+ - ' FExamplesInstallD','ir:=Values[KeyExamplesInstallDir];'#010+ + ' FExamplesInstallDir:=V','alues[KeyExamplesInstallDir];'#010+ ' FInstallExamples:=(Upcase(Values[KeyInstallExamples])='#039'Y'#039+ ');'#010+ ' FSkipCrossPrograms:=(Upcase(Values[KeySkipCrossProdrams])='#039'Y'+ #039');'#010+ ' FNoFPCCfg:=(Upcase(Values[KeyNoFPCCfg])='#039'Y'#039');'#010+ - ' FUseEnviron','ment:=(Upcase(Values[KeyUseEnv])='#039'Y'#039');'#010+ + ' FUseEnvironment:','=(Upcase(Values[KeyUseEnv])='#039'Y'#039');'#010+ #010+ ' GlobalDictionary.AddVariable('#039'target'#039',Target);'#010+ ' GlobalDictionary.AddVariable('#039'baseinstalldir'#039',BaseInstal'+ 'lDir);'#010+ ' GlobalDictionary.AddVariable('#039'prefix'#039',Prefix);'#010+ - ' GlobalDictionary.Ad','dVariable('#039'bininstalldir'#039',BinInstal'+ + ' GlobalDictionary.AddVari','able('#039'bininstalldir'#039',BinInstal'+ 'lDir);'#010+ + ' GlobalDictionary.AddVariable('#039'libinstalldir'#039',LibInstallD'+ + 'ir);'#010+ ' end;'#010+ ' Finally'#010+ ' L.Free;'#010+ @@ -5054,9 +5624,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ '{*********************************************************************'+ '*******'#010+ - ' TFPCDefaults'#010+ - '*******************************','*************************************'+ - '********}'#010+ + ' ',' TFPCDefaults'#010+ + '**********************************************************************'+ + '******}'#010+ #010+ 'procedure TFPCDefaults.CompilerDefaults;'#010+ 'var'#010+ @@ -5064,16 +5634,16 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'begin'#010+ ' inherited CompilerDefaults;'#010+ #010+ - ' // Use the same algorithm as the compiler, see options.pas'#010+ + ' // Use the same algorithm as th','e compiler, see options.pas'#010+ '{$ifdef Unix}'#010+ - ' BD:=FixPath(GetEnv','ironmentVariable('#039'FPCDIR'#039'), False);'#010+ + ' BD:=FixPath(GetEnvironmentVariable('#039'FPCDIR'#039'), False);'#010+ ' if BD='#039#039' then'#010+ ' begin'#010+ ' BD:='#039'/usr/local/lib/fpc/'#039'+FCompilerVersion;'#010+ ' if not DirectoryExists(BD) and'#010+ - ' DirectoryExists('#039'/usr/lib/fpc/'#039'+FCompilerVersion) the'+ - 'n'#010+ - ' BD:='#039'/usr/lib/fpc/'#039,'+FCompilerVersion;'#010+ + ' DirectoryExists('#039'/us','r/lib/fpc/'#039'+FCompilerVersion) t'+ + 'hen'#010+ + ' BD:='#039'/usr/lib/fpc/'#039'+FCompilerVersion;'#010+ ' end;'#010+ '{$else unix}'#010+ ' BD:=FixPath(SysUtils.GetEnvironmentVariable('#039'FPCDIR'#039'), False'+ @@ -5081,54 +5651,51 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' if BD='#039#039' then'#010+ ' begin'#010+ ' BD:=ExtractFilePath(FCompiler)+'#039'..'#039';'#010+ - ' if not(DirectoryExists(BD+'#039'/units'#039')) and'#010+ - ' not(Direc','toryExists(BD+'#039'/rtl'#039')) then'#010+ + ' ',' if not(DirectoryExists(BD+'#039'/units'#039')) and'#010+ + ' not(DirectoryExists(BD+'#039'/rtl'#039')) then'#010+ ' BD:=FBaseInstallDir+'#039'..'#039';'#010+ ' end;'#010+ '{$endif unix}'#010+ #010+ ' // Where to install by default'#010+ ' if (FBaseInstallDir='#039#039') and (FPrefix='#039#039') then'#010+ - ' BaseInstallDir:=BD;'#010+ - #010+ - ' // Where to find the units by default'#010+ - ' if (FG','lobalUnitDir='#039#039') then'#010+ - ' GlobalUnitDir:=IncludeTrailingPathDelimiter(BD)+'#039'units'#039'+Pa'+ - 'thDelim+Target;'#010+ + ' BaseIns','tallDir:=BD;'#010+ 'end;'#010+ #010+ #010+ '{*********************************************************************'+ '*******'#010+ ' TCustomInstaller'#010+ - '**********','**********************************************************'+ - '********}'#010+ + '**********************************************************************'+ + '******}'#010+ #010+ - 'constructor TCustomInstaller.Create(AOwner: TComponent);'#010+ + 'constructor TCusto','mInstaller.Create(AOwner: TComponent);'#010+ 'begin'#010+ ' FPackageVariantSettings := TStringList.Create;'#010+ ' FPackageVariants := TFPList.Create;'#010+ - ' GlobalDictionary:=D','ictionaryClass.Create(Nil);'#010+ + ' GlobalDictionary:=DictionaryClass.Create(Nil);'#010+ ' AnalyzeOptions;'#010+ - ' GlobalDictionary.AddVariable('#039'baseinstalldir'#039',Defaults.BaseI'+ - 'nstallDir);'#010+ + ' GlobalDictionary.AddVariable('#039'baseinsta','lldir'#039',Defaults.Bas'+ + 'eInstallDir);'#010+ ' GlobalDictionary.AddVariable('#039'bininstalldir'#039',Defaults.BinIns'+ 'tallDir);'#010+ - ' GlobalDictionary.AddVariable('#039'Target'#039',Defaults','.Target);'#010+ - ' GlobalDictionary.AddVariable('#039'BuildString'#039',Defaults.BuildStr'+ - 'ing);'#010+ + ' GlobalDictionary.AddVariable('#039'libinstalldir'#039',Defaults.LibIns'+ + 'tallDir);'#010+ + ' GlobalDictionary.AddVariable('#039'Target'#039',Defaults.Target);'#010+ + ' Glo','balDictionary.AddVariable('#039'BuildString'#039',Defaults.BuildS'+ + 'tring);'#010+ ' GlobalDictionary.AddVariable('#039'Prefix'#039',Defaults.Prefix);'#010+ ' GlobalDictionary.AddVariable('#039'CompilerVersion'#039',Defaults.Comp'+ 'ilerVersion);'#010+ - ' FNotifyEventCollection := ','TNotifyEventCollection.create([neaBefore'+ + ' FNotifyEventCollection := TNotifyEventCol','lection.create([neaBefore'+ 'Compile, neaAfterCompile, neaBeforeClean, neaAfterClean,'#010+ ' neaBeforeIn'+ 'stall, neaAfterInstall, neaBeforeArchive, neaAfterArchive,'#010+ - ' ',' neaBefore'+ + ' ',' neaBefore'+ 'Manifest, neaAfterManifest, neaBeforePkgList, neaAfterPkgList,'#010+ ' neaBeforeUn'+ 'Install, neaAfterUnInstall,'#010+ - ' ',' neaBefore'+ + ' ',' neaBefore'+ 'CreateBuildEngine, neaAfterCreateBuildengine]);'#010+ ' CreatePackages;'#010+ 'end;'#010+ @@ -5140,14 +5707,14 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'begin'#010+ ' FreePackages;'#010+ ' FreeAndNil(Defaults);'#010+ - ' FreeAndNil(GlobalDict','ionary);'#010+ - ' FreeAndNil(FPackageVariantSettings);'#010+ + ' FreeAndNil(GlobalDictionary);'#010+ + ' Free','AndNil(FPackageVariantSettings);'#010+ ' for i := 0 to FPackageVariants.Count-1 do'#010+ ' begin'#010+ ' if TPackageVariants(FPackageVariants.Items[i]).Owner=Self then'#010+ ' TPackageVariants(FPackageVariants.Items[i]).Free;'#010+ ' end;'#010+ - ' Free','AndNil(FPackageVariants);'#010+ + ' FreeAndNil(FPackage','Variants);'#010+ ' FreeAndNil(FNotifyEventCollection);'#010+ ' inherited destroy;'#010+ 'end;'#010+ @@ -5157,9 +5724,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' result := FPackages;'#010+ 'end;'#010+ #010+ - 'procedure TCustomInstaller.Log(Level: TVerboseLevel; Const Msg: ','Stri'+ - 'ng);'#010+ - 'begin'#010+ + 'procedure TCustomInstaller.Log(Level: TVerboseLevel; Const Msg: String'+ + ');'#010+ + 'begin'#010, ' If Level in FLogLevels then'#010+ ' begin'#010+ ' Writeln(StdOut, Msg);'#010+ @@ -5173,8 +5740,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' FPackages:=TPackages.Create(TPackage);'#010+ 'end;'#010+ #010+ - 'procedure TCustomInstaller.F','reePackages;'#010+ - 'begin'#010+ + 'procedure TCustomInstaller.FreePackages;'#010+ + 'be','gin'#010+ ' FreeAndNil(FPackages);'#010+ 'end;'#010+ #010+ @@ -5183,15 +5750,16 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'begin'#010+ ' NotifyEventCollection.CallEvents(neaBeforeCreateBuildEngine, Self);'#010+ ' FBuildEngine:=TBuildEngine.Create(Self);'#010+ - '// FBuildEngine.Default','s:=Defaults;'#010+ - ' FBuildEngine.ListMode:=FListMode;'#010+ + '// FBuildEngine.Defaults:=Defaults;'#010+ + ' ','FBuildEngine.ListMode:=FListMode;'#010+ + ' FBuildEngine.FInteractive:=FInteractive;'#010+ ' FBuildEngine.Verbose := (FLogLevels = AllMessages);'#010+ ' FBuildEngine.OnLog:=@Self.Log;'#010+ ' NotifyEventCollection.CallEvents(neaAfterCreateBuildengine, Self);'#010+ 'end;'#010+ #010+ - #010+ - 'procedure TCustomInstaller.E','rror(const Msg: String);'#010+ + #010, + 'procedure TCustomInstaller.Error(const Msg: String);'#010+ 'begin'#010+ ' Raise EInstallerError.Create(Msg);'#010+ 'end;'#010+ @@ -5204,53 +5772,86 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'Function TCustomInstaller.AddPac','kage(const AName: String) : TPackage'+ + 'Func','tion TCustomInstaller.AddPackage(const AName: String) : TPackage'+ ';'#010+ 'begin'#010+ ' result:=Packages.AddPackage(AName);'#010+ + ' AddAutoPackageVariantsToPackage(result);'#010+ 'end;'#010+ #010+ - 'function TCustomInstaller.AddPackageVariant(AName: string; AIsInherita'+ - 'ble: boolean): TPackageVariants;'#010+ + 'Function TCustomInstaller.AddPackageVariant(AName: string; AIsInherita'+ + 'ble: boolea','n; AutoAddToPackage: Boolean): TPackageVariants;'#010+ 'begin'#010+ - ' result := TPackageVariants.Create(TPackag','eVariant);'#010+ + ' result := TPackageVariants.Create(TPackageVariant);'#010+ ' result.Name:=AName;'#010+ ' result.FIsInheritable:=AIsInheritable;'#010+ - ' FPackageVariants.Add(result);'#010+ + ' result.FAutoAddToPackage:=AutoAddToPackage;'#010+ + ' FPackageVariants.Add','(result);'#010+ 'end;'#010+ #010+ 'procedure TCustomInstaller.AnalyzeOptions;'#010+ #010+ ' Function CheckOption(Index : Integer;const Short,Long : String; AddT'+ - 'oOptionString:',' boolean = false): Boolean;'#010+ + 'oOptionString: boolean = false): Boolean;'#010+ ' var'#010+ ' O : String;'#010+ ' begin'#010+ ' O:=Paramstr(Index);'#010+ - ' Result:=(O='#039'-'#039'+short) or (O='#039'--'#039'+long) or (copy(O,'+ - '1,Length(Long)+3)=('#039'--'#039'+long+'#039'='#039'));'#010+ + ' Result:=(O','='#039'-'#039'+short) or (O='#039'--'#039'+long) or (copy('+ + 'O,1,Length(Long)+3)=('#039'--'#039'+long+'#039'='#039'));'#010+ ' if AddToOptionString and Result then'#010+ - ' FFPMakeOptionsString ',':= FFPMakeOptionsString+'#039' '#039'+O;'#010+ + ' FFPMakeOptionsString := FFPMakeOptionsString+'#039' '#039'+O;'#010+ ' end;'#010+ #010+ - ' Function CheckBuildOptionSetValue(Index: Integer): boolean;'#010+ + ' Function CheckBuildOptionSetValue(Index: Integer): bool','ean;'#010+ ' var'#010+ ' O : String;'#010+ ' BuildModeName: string;'#010+ ' P: integer;'#010+ + ' C: string;'#010+ + ' PV: TPackageVariants;'#010+ + ' SL: TStringList;'#010+ ' begin'#010+ ' O:=Paramstr(Index);'#010+ ' result := O[1]='#039'+'#039';'#010+ - ' if result then',#010+ + ' if result then'#010+ ' begin'#010+ - ' P:=Pos('#039'='#039',Paramstr(Index));'#010+ + ' P:=Pos('#039'='#039',Para','mstr(Index));'#010+ ' If (P=0) then'#010+ ' Error(SErrNeedArgument,[Index,O])'#010+ ' else'#010+ ' begin'#010+ ' BuildModeName:=copy(o,2,P-2);'#010+ ' Delete(O,1,P);'#010+ - ' FPackageVariantSettings.Values[Build','ModeName] := O;'#010+ + #010+ + ' c := RightStr(BuildModeName,1);'#010+ + ' if (c = '#039'*'#039') or (c = '#039'+'#039') the','n'#010+ + ' begin'#010+ + ' // Add a new package-variant'#010+ + ' BuildModeName := copy(BuildModeName, 1, length(BuildModeName'+ + ') -1);'#010+ + ' PV := AddPackageVariant(BuildModeName, (C = '#039'*'#039'), Tr'+ + 'ue);'#010+ + ' SL := TStringList.Create;'#010+ + ' ',' try'#010+ + ' SL.CommaText := O;'#010+ + ' if SL.Count=0 then'#010+ + ' Error(SErrExpectPkgVariant,[Index,ParamStr(Index)]);'#010+ + ' for P := 0 to SL.Count -1 do'#010+ + ' begin'#010+ + ' PV.Add(SL.ValueFromIndex[','P]);'#010+ + ' end;'#010+ + ' FPackageVariantSettings.Values[BuildModeName] := SL.ValueF'+ + 'romIndex[0];'#010+ + ' finally'#010+ + ' SL.Free;'#010+ + ' end;'#010+ + ' end'#010+ + ' else'#010+ + ' begin'#010+ + ' // Set the value of the pa','ckage-variant.'#010+ + ' FPackageVariantSettings.Values[BuildModeName] := O;'#010+ + ' end;'#010+ ' end;'#010+ ' end;'#010+ ' end;'#010+ @@ -5259,11 +5860,11 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ': Boolean;'#010+ ' var'#010+ ' O : String;'#010+ - ' i : integer;'#010+ + ' i : integ','er;'#010+ ' begin'#010+ ' result := false;'#010+ ' CustOptName:='#039#039';'#010+ - ' O:=Paramstr(Index)',';'#010+ + ' O:=Paramstr(Index);'#010+ ' if copy(O,1,2)<>'#039'--'#039' then'#010+ ' Exit;'#010+ ' i := pos('#039'='#039',O);'#010+ @@ -5271,9 +5872,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Exit;'#010+ ' O:=copy(O,3,i-3);'#010+ ' CustOptName:=O;'#010+ - ' Result:=CustomFpmakeCommandlineOptions.IndexOfName(O)>-1;'#010+ - ' if Result then FFPMakeOptionsString := ','FFPMakeOptionsString+'#039+ - ' '#039'+Paramstr(Index);'#010+ + ' Result:=CustomFpmakeComma','ndlineOptions.IndexOfName(O)>-1;'#010+ + ' if Result then FFPMakeOptionsString := FFPMakeOptionsString+'#039' '+ + #039'+Paramstr(Index);'#010+ ' end;'#010+ #010+ #010+ @@ -5282,38 +5883,38 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' var'#010+ ' O : String;'#010+ ' begin'#010+ - ' O:=Paramstr(Index);'#010+ + ' O:','=Paramstr(Index);'#010+ ' Result:=(O='#039'-'#039'+short) or (O=long);'#010+ ' end;'#010+ #010+ - ' Function ','OptionArg(Var Index : Integer; AddToOptionString: boolean'+ - ' = false) : String;'#010+ + ' Function OptionArg(Var Index : Integer; AddToOptionString: boolean ='+ + ' false) : String;'#010+ ' Var'#010+ ' P : Integer;'#010+ ' begin'#010+ - ' if (Length(ParamStr(Index))>1) and (Paramstr(Index)[2]<>'#039'-'#039+ + ' if (Length(ParamStr(Index))>1) and (Paramstr(Index)[','2]<>'#039'-'#039+ ') then'#010+ ' begin'#010+ ' If Index2 then'#010+ + ' else If length(ParamStr(Index))>2 then'#010+ ' begin'#010+ ' P:=Pos('#039'='#039',Paramstr(Index));'#010+ ' If (P=0) then'#010+ - ' Error(SErrNeedArgument,[Index,ParamStr(Index)])'#010+ + ' Error(SErrNeedArgument,[Index,ParamStr(Index)])',#010+ ' else'#010+ ' begin'#010+ ' Result:=Paramstr(Index);'#010+ - ' Delete(Re','sult,1,P);'#010+ + ' Delete(Result,1,P);'#010+ ' end;'#010+ ' end;'#010+ ' end;'#010+ @@ -5322,10 +5923,10 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' var i : integer;'#010+ ' begin'#010+ ' i := pos('#039' '#039',SplitString);'#010+ - ' if i > 0 then'#010+ + ' i','f i > 0 then'#010+ ' begin'#010+ ' result := copy(SplitString,1,i-1);'#010+ - ' ','delete(SplitString,1,i);'#010+ + ' delete(SplitString,1,i);'#010+ ' end'#010+ ' else'#010+ ' begin'#010+ @@ -5334,131 +5935,206 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' end;'#010+ ' end;'#010+ #010+ + ' Function CheckPackageVariantOpt','ionSetValue(Index: Integer): boolea'+ + 'n;'#010+ + ' var'#010+ + ' O : String;'#010+ + ' OptionName: string;'#010+ + ' I,J: integer;'#010+ + ' P: Integer;'#010+ + ' PV: TPackageVariants;'#010+ + ' begin'#010+ + ' result := false;'#010+ + ' O:=Paramstr(Index);'#010+ + ' if copy(O,1,2)<>'#039'--'#039' then'#010+ + ' Exit;'#010+ + ' ',' P:=Pos('#039'='#039',Paramstr(Index));'#010+ + ' if P > 0 then'#010+ + ' begin'#010+ + ' OptionName:=copy(o,3,P-3);'#010+ + ' Delete(O,1,P);'#010+ + ' for I := 0 to FPackageVariants.Count -1 do'#010+ + ' begin'#010+ + ' PV := TObject(FPackageVariants.Items[I]) as TPackageV','ariants'+ + ';'#010+ + ' for J := 0 to PV.Count-1 do'#010+ + ' begin'#010+ + ' if OptionName = '#039'options_'#039'+PV.Name+'#039'_'#039'+PV.It'+ + 'ems[J].Name then'#010+ + ' begin'#010+ + ' result := true;'#010+ + ' while O <> '#039#039' do'#010+ + ' (PV.Items[J] as TPa','ckageVariant).Options.Add(SplitSpac'+ + 'es(O));'#010+ + ' end;'#010+ + ' end;'#010+ + ' end;'#010+ + ' end;'#010+ + ' end;'#010+ + #010+ 'Var'#010+ ' I : Integer;'#010+ ' DefaultsFileName : string;'#010+ ' OptString : string;'#010+ ' CustOptName : string;'#010+ + ' UnitDirSet: Boolean;'#010+ + ' SearchPathSet:',' Boolean;'#010+ 'begin'#010+ ' I:=0;'#010+ - ' ',' FListMode:=False;'#010+ + ' FListMode:=False;'#010+ + ' UnitDirSet:=False;'#010+ + ' SearchPathSet:=False;'#010+ ' FLogLevels:=DefaultMessages;'#010+ ' While (IOptionArg(I)) t'+ + 'hen'#010+ + ' Log(vlWarning,SWarnCombinedPathAndUDir);'#010+ + ' Defaults.LocalUnitDir:=OptionArg(I)'#010+ + ' end'#010+ + ' else if CheckOption(I,'#039'UG'#039','#039'globalunitdir'#039') then'#010+ + ' begin'#010, + ' UnitDirSet:=true;'#010+ + ' // Do not warn against the combination of SearchPath and'#010+ + ' // localunitdir when they are the same. (This is done to be ab'+ + 'le'#010+ + ' // to call both older and newer versions of fpmake)'#010+ + ' if Searc','hPathSet and (Defaults.GlobalUnitDir<>OptionArg(I)) '+ + 'then'#010+ + ' Log(vlWarning,SWarnCombinedPathAndUDir);'#010+ + ' Defaults.GlobalUnitDir:=OptionArg(I)'#010+ + ' end'#010+ + ' else if CheckOption(I,'#039'sp'#039','#039'searchpath'#039') then'#010+ + ' begin'#010+ + ' SearchP','athSet:=true;'#010+ + ' if UnitDirSet then'#010+ + ' Log(vlWarning,SWarnCombinedPathAndUDir);'#010+ + ' Defaults.SearchPath.Add(OptionArg(I, true));'#010+ + ' end'#010+ ' else if CheckOption(I,'#039'o'#039','#039'options'#039', true) then'#010+ ' begin'#010+ - ' OptString := OptionArg(I, true);'#010+ + ' OptString := ','OptionArg(I, true);'#010+ ' while OptString <> '#039#039' do'#010+ - ' Defaults.Options.Add(Sp','litSpaces(OptString));'#010+ + ' Defaults.Options.Add(SplitSpaces(OptString));'#010+ ' end'#010+ ' else if CheckOption(I,'#039'r'#039','#039'compiler'#039') then'#010+ ' Defaults.Compiler:=OptionArg(I)'#010+ - ' else if CheckOption(I,'#039'f'#039','#039'config'#039') then'#010+ + ' else if CheckOption(I,'#039'f'#039','#039'confi','g'#039') then'#010+ ' DefaultsFileName:=OptionArg(I)'#010+ - ' else if CheckOption(I,'#039'ie'#039','#039'installe','xamples'#039') th'+ - 'en'#010+ + ' else if CheckOption(I,'#039'ie'#039','#039'installexamples'#039') then'+ + #010+ ' Defaults.InstallExamples:=true'#010+ - ' else if CheckOption(I,'#039'sp'#039','#039'skipcrossprograms'#039') th'+ - 'en'#010+ + ' else if CheckOption(I,'#039'scp'#039','#039'skipcrossprograms'#039') t'+ + 'hen'#010+ ' Defaults.SkipCrossPrograms:=true'#010+ - ' else if CheckOption(I,'#039'bu'#039','#039'buildunit'#039') then'#010+ + ' e','lse if CheckOption(I,'#039'bu'#039','#039'buildunit'#039') then'#010+ ' Defaults.BuildMode:=bmBuildUnit'#010+ - ' e','lse if CheckOption(I,'#039'io'#039','#039'ignoreinvalidoption'#039','+ - ' true) then'#010+ + ' else if CheckOption(I,'#039'io'#039','#039'ignoreinvalidoption'#039', '+ + 'true) then'#010+ ' Defaults.IgnoreInvalidOptions:=true'#010+ ' else if CheckOption(I,'#039'd'#039','#039'doc-folder'#039') then'#010+ - ' Defaults.FPDocOutputDir:=OptionArg(I)'#010+ - ' else if CheckOption(I,'#039'fsp'#039','#039'fpunitsrcpat','h'#039') the'+ - 'n'#010+ + ' ',' Defaults.FPDocOutputDir:=OptionArg(I)'#010+ + ' else if CheckOption(I,'#039'fsp'#039','#039'fpunitsrcpath'#039') then'#010+ ' Defaults.FPUnitSourcePath:=OptionArg(I)'#010+ ' else if assigned(CustomFpmakeCommandlineOptions) and CheckCustomOp'+ 'tion(I,CustOptName) then'#010+ - ' begin'#010+ + ' ',' begin'#010+ ' if not assigned(CustomFpMakeCommandlineValues) then'#010+ - ' CustomFpMake','CommandlineValues := TStringList.Create;'#010+ + ' CustomFpMakeCommandlineValues := TStringList.Create;'#010+ ' CustomFpMakeCommandlineValues.Values[CustOptName]:=OptionArg(I, '+ 'true)'#010+ ' end'#010+ - ' else if (not CheckBuildOptionSetValue(I)) and (not Defaults.Ignore'+ - 'InvalidOptions) then'#010+ + ' else if (not CheckBuil','dOptionSetValue(I)) and (not CheckPackageV'+ + 'ariantOptionSetValue(I))'#010+ + ' and (not Defaults.IgnoreInvalidOptions) then'#010+ ' begin'#010+ - ' Usag','e(SErrInValidArgument,[I,ParamStr(I)]);'#010+ + ' Usage(SErrInValidArgument,[I,ParamStr(I)]);'#010+ ' end;'#010+ ' end;'#010+ ' If DefaultsFileName<>'#039#039' then'#010+ - ' Defaults.LocalInit(DefaultsFileName);'#010+ + ' Defau','lts.LocalInit(DefaultsFileName);'#010+ ' Defaults.CompilerDefaults;'#010+ 'end;'#010+ #010+ #010+ 'procedure TCustomInstaller.Usage(const FMT: String; Args: array of con'+ - 's','t);'#010+ + 'st);'#010+ #010+ ' Procedure LogCmd(const LC,Msg : String);'#010+ ' begin'#010+ - ' Log(vlInfo,Format('#039' %-12s %s'#039',[LC,MSG]));'#010+ + ' Log(vlInfo,Format('#039' %-12s %s'#039',[LC,MSG]))',';'#010+ ' end;'#010+ #010+ ' Procedure LogOption(const C,LC,Msg : String);'#010+ @@ -5466,11 +6142,11 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Log(vlInfo,Format('#039' -%s --%-16s %s'#039',[C,LC,MSG]));'#010+ ' end;'#010+ #010+ - ' Procedure ','LogArgOption(const C,LC,Msg : String);'#010+ + ' Procedure LogArgOption(const C,LC,Msg : String);'#010+ ' begin'#010+ ' if trim(c)='#039#039' then'#010+ - ' Log(vlInfo,Format('#039' --%-20s %s'#039',[LC+'#039'='#039'+SValu'+ - 'e,MSG]))'#010+ + ' Log(vlInfo,Format('#039' -','-%-20s %s'#039',[LC+'#039'='#039'+SVa'+ + 'lue,MSG]))'#010+ ' else'#010+ ' Log(vlInfo,Format('#039' -%s --%-20s %s'#039',[C,LC+'#039'='#039'+SV'+ 'alue,MSG]));'#010+ @@ -5478,117 +6154,152 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'var'#010+ ' i: Integer;'#010+ - 'begin',#010+ + 'begin'#010+ ' // Force the Usage to be displayed'#010+ ' Include(FLogLevels,vlInfo);'#010+ ' If (FMT<>'#039#039') then'#010+ - ' Log(vlInfo,Format(Fmt,Args));'#010+ + ' Log(vlIn','fo,Format(Fmt,Args));'#010+ ' Log(vlInfo,Format(SHelpUsage,[Paramstr(0)]));'#010+ ' Log(vlInfo,SHelpCommand);'#010+ ' LogCmd('#039'compile'#039',SHelpCompile);'#010+ - ' LogCmd','('#039'build'#039',SHelpBuild);'#010+ + ' LogCmd('#039'build'#039',SHelpBuild);'#010+ ' LogCmd('#039'install'#039',SHelpInstall);'#010+ ' LogCmd('#039'uninstall'#039',SHelpUnInstall);'#010+ - ' LogCmd('#039'clean'#039',SHelpClean);'#010+ + ' LogC','md('#039'clean'#039',SHelpClean);'#010+ ' LogCmd('#039'archive'#039',SHelpArchive);'#010+ ' LogCmd('#039'manifest'#039',SHelpManifest);'#010+ ' LogCmd('#039'zipinstall'#039',SHelpZipInstall);'#010+ - ' LogC','md('#039'pkglist'#039',SHelpPkgList);'#010+ + ' LogCmd('#039'pkglist'#039',SHelpPkgList);'#010+ ' Log(vlInfo,SHelpCmdOptions);'#010+ ' LogOption('#039'h'#039','#039'help'#039',SHelpHelp);'#010+ - ' LogOption('#039'l'#039','#039'list-commands'#039',SHelpList);'#010+ + ' LogO','ption('#039'l'#039','#039'list-commands'#039',SHelpList);'#010+ ' LogOption('#039'n'#039','#039'nofpccfg'#039',SHelpNoFPCCfg);'#010+ ' LogOption('#039'v'#039','#039'verbose'#039',SHelpVerbose);'#010+ - '{$ifdef HAS_UNIT_P','ROCESS}'#010+ - ' LogOption('#039'e'#039', '#039'useenv'#039', sHelpUseEnvironment);'#010+ + ' LogOption('#039'I'#039','#039'interactive'#039',SHelpInteractive);'#010+ + '{$ifdef HAS_UNIT_PROCESS}'#010+ + ' LogOption('#039'e'#039', '#039'useenv'#039', sHelpUseEnvironm','ent);'#010+ '{$endif}'#010+ ' LogOption('#039'ie'#039','#039'installexamples'#039',SHelpInstExamples);'+ #010+ ' LogOption('#039'bu'#039','#039'buildunit'#039',SHelpUseBuildUnit);'#010+ - ' LogOption('#039'sp'#039','#039'skipcrossprograms'#039',SHelpSkipCrossPro'+ - 'gs);'#010+ - ' LogOption','('#039'io'#039','#039'ignoreinvalidoption'#039',SHelpIgnoreIn'+ - 'vOpt);'#010+ - ' LogArgOption('#039'C'#039','#039'cpu'#039',SHelpCPU);'#010+ + ' LogOption('#039'scp'#039','#039'skipcrossprograms'#039',SHelpSkipCrossPr'+ + 'ogs);'#010+ + ' LogOption('#039'io'#039','#039'ignoreinvalidoption'#039',SHelpIgnoreInvO'+ + 'pt);'#010+ + ' ','LogArgOption('#039'C'#039','#039'cpu'#039',SHelpCPU);'#010+ ' LogArgOption('#039'O'#039','#039'os'#039',SHelpOS);'#010+ ' LogArgOption('#039't'#039','#039'target'#039',SHelpTarget);'#010+ ' LogArgOption('#039'P'#039','#039'prefix'#039',SHelpPrefix);'#010+ - ' LogArgOption('#039'B'#039','#039'baseinstalldir'#039',SH','elpBaseInstall'+ + ' LogArgOption('#039'B'#039','#039'baseinstalldir'#039',SHelpBaseInstalldi'+ + 'r);'#010+ + ' LogArgOption('#039'BI'#039','#039'bininstal','ldir'#039',SHelpBaseInstall'+ 'dir);'#010+ + ' LogArgOption('#039'LI'#039','#039'libinstalldir'#039',SHelpBaseInstalldi'+ + 'r);'#010+ ' LogArgOption('#039'UL'#039','#039'localunitdir'#039',SHelpLocalUnitdir);'+ #010+ ' LogArgOption('#039'UG'#039','#039'globalunitdir'#039',SHelpGlobalUnitdir'+ ');'#010+ + ' LogArgOption('#039'sp'#039','#039'searchpath'#039',SHelpSear','chPath);'#010+ ' LogArgOption('#039'U'#039','#039'unitinstalldir'#039',SHelpUnitInstallDi'+ 'r);'#010+ ' LogArgOption('#039'r'#039','#039'compiler'#039',SHelpCompiler);'#010+ - ' Lo','gArgOption('#039'f'#039','#039'config'#039',SHelpConfig);'#010+ + ' LogArgOption('#039'f'#039','#039'config'#039',SHelpConfig);'#010+ ' LogArgOption('#039'o'#039','#039'options'#039',SHelpOptions);'#010+ - ' LogArgOption('#039'd'#039', '#039'doc-folder'#039', sHelpFpdocOutputDir)'+ - ';'#010+ + ' LogArgOption('#039'd'#039', '#039'doc-folder'#039', sHelpFp','docOutputDi'+ + 'r);'#010+ ' LogArgOption('#039'fsp'#039', '#039'fpunitsrcpath'#039', sHelpFPUnitSrcP'+ 'ath);'#010+ - ' LogArgOption('#039'zp'#039', '#039'zipprefix'#039', sHelpZip','Prefix);'#010+ + ' LogArgOption('#039'zp'#039', '#039'zipprefix'#039', sHelpZipPrefix);'#010+ '{$ifndef NO_THREADING}'#010+ ' LogArgOption('#039'T'#039', '#039'threads'#039', sHelpThreads);'#010+ '{$endif NO_THREADING}'#010+ - ' if assigned(CustomFpmakeCommandlineOptions) then for i := 0 to Cust'+ - 'omFpmakeCommandlineOptions.Count-1 do'#010+ - ' LogArgOption('#039' '#039',CustomFpmak','eCommandlineOptions.Names[i]'+ - ',CustomFpmakeCommandlineOptions.ValueFromIndex[i]);'#010+ + ' if assigned(CustomFpm','akeCommandlineOptions) then for i := 0 to Cu'+ + 'stomFpmakeCommandlineOptions.Count-1 do'#010+ + ' LogArgOption('#039' '#039',CustomFpmakeCommandlineOptions.Names[i],C'+ + 'ustomFpmakeCommandlineOptions.ValueFromIndex[i]);'#010+ + ' Log(vlInfo, sHelpPackageVariant1);'#010+ + ' Log(','vlInfo, sHelpPackageVariant2);'#010+ + ' Log(vlInfo, sHelpPackageVariant3);'#010+ + ' Log(vlInfo, sHelpPackageVariant4);'#010+ + ' Log(vlInfo, sHelpPackageVariant5);'#010+ + ' Log(vlInfo, sHelpPackageVariant6);'#010+ ' Log(vlInfo,'#039#039');'#010+ + #010+ ' If (FMT<>'#039#039') then'#010+ ' halt(1)'#010+ ' else'#010+ - ' halt(0);'#010+ + ' ',' halt(0);'#010+ 'end;'#010+ #010+ + 'procedure TCustomInstaller.Info;'#010+ + 'Var Cpu : TCpu;'#010+ + ' OS : TOS;'#010+ + ' '#010+ + 'begin'#010+ + ' Write('#039'CPU_TARGET='#039');'#010+ + ' for cpu:=succ(low(cpu)) to high(tcpu) do // skip NONE'#010+ + ' begin'#010+ + ' write(cputostring(cpu));'#010+ + ' if cpu<>high(tcpu) the','n'#010+ + ' write('#039','#039');'#010+ + ' end;'#010+ + ' writeln;'#010+ + ' Write('#039'OS_TARGET='#039');'#010+ + ' for OS:=succ(low(TOS)) to high(tOS) do // skip NONE'#010+ + ' begin'#010+ + ' write(OStostring(os));'#010+ + ' if os<>high(tos) then'#010+ + ' write('#039','#039');'#010+ + ' end;'#010+ + ' writeln;'#010+ + 'end;'#010+ #010+ - 'procedure TCustomInstaller.Compile(Force: Boolean);'#010+ + 'procedur','e TCustomInstaller.Compile(Force: Boolean);'#010+ 'begin'#010+ - ' FNotifyEventCollection.','CallEvents(neaBeforeCompile, Self);'#010+ + ' FNotifyEventCollection.CallEvents(neaBeforeCompile, Self);'#010+ ' FBuildEngine.ForceCompile:=Force;'#010+ ' FBuildEngine.Compile(Packages);'#010+ - ' FNotifyEventCollection.CallEvents(neaAfterCompile, Self);'#010+ + ' FNotifyEventCollection.CallEvents(neaAfterCompile, Self);',#010+ 'end;'#010+ #010+ #010+ 'procedure TCustomInstaller.Clean(AllTargets: boolean);'#010+ 'begin'#010+ - ' Noti','fyEventCollection.CallEvents(neaBeforeClean, Self);'#010+ + ' NotifyEventCollection.CallEvents(neaBeforeClean, Self);'#010+ ' BuildEngine.Clean(Packages, AllTargets);'#010+ ' NotifyEventCollection.CallEvents(neaAfterClean, Self);'#010+ 'end;'#010+ #010+ #010+ - 'procedure TCustomInstaller.Install;'#010+ + 'proced','ure TCustomInstaller.Install;'#010+ 'begin'#010+ - ' NotifyEventCollection.CallEvents(neaB','eforeInstall, self);'#010+ + ' NotifyEventCollection.CallEvents(neaBeforeInstall, self);'#010+ ' BuildEngine.Install(Packages);'#010+ ' NotifyEventCollection.CallEvents(neaAfterInstall, self);'#010+ 'end;'#010+ #010+ 'procedure TCustomInstaller.ZipInstall;'#010+ 'begin'#010+ - ' NotifyEventCollection.CallEvents(neaBeforeInstall, self);'#010+ - ' BuildEngine.Zi','pInstall(Packages);'#010+ + ' ',' NotifyEventCollection.CallEvents(neaBeforeInstall, self);'#010+ + ' BuildEngine.ZipInstall(Packages);'#010+ ' NotifyEventCollection.CallEvents(neaAfterInstall, self);'#010+ 'end;'#010+ #010+ #010+ 'procedure TCustomInstaller.UnInstall;'#010+ 'begin'#010+ - ' NotifyEventCollection.CallEvents(neaBeforeUnInstall, self);'#010+ + ' NotifyEventCollection.CallEvents(','neaBeforeUnInstall, self);'#010+ ' BuildEngine.UnInstall(Packages);'#010+ - ' NotifyEvent','Collection.CallEvents(neaAfterUnInstall, self);'#010+ + ' NotifyEventCollection.CallEvents(neaAfterUnInstall, self);'#010+ 'end;'#010+ #010+ #010+ 'procedure TCustomInstaller.Archive;'#010+ 'begin'#010+ ' NotifyEventCollection.CallEvents(neaBeforeArchive, self);'#010+ - ' BuildEngine.Archive(Packages);'#010+ - ' NotifyEventCollection.CallEvents(neaAfterArchive',', self);'#010+ + ' BuildE','ngine.Archive(Packages);'#010+ + ' NotifyEventCollection.CallEvents(neaAfterArchive, self);'#010+ 'end;'#010+ #010+ #010+ @@ -5596,23 +6307,36 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'begin'#010+ ' NotifyEventCollection.CallEvents(neaBeforeManifest, self);'#010+ ' BuildEngine.Manifest(Packages, nil);'#010+ - ' NotifyEventCollection.CallEvents(neaAfterManifest, self);'#010+ + ' Noti','fyEventCollection.CallEvents(neaAfterManifest, self);'#010+ 'end;'#010+ #010+ #010+ - 'procedure TCus','tomInstaller.PkgList;'#010+ + 'procedure TCustomInstaller.PkgList;'#010+ 'begin'#010+ ' NotifyEventCollection.CallEvents(neaBeforePkgList, self);'#010+ ' BuildEngine.PkgList(Packages);'#010+ - ' NotifyEventCollection.CallEvents(neaAfterPkgList, self);'#010+ + ' NotifyEventCollection.CallEvents(neaAfterP','kgList, self);'#010+ 'end;'#010+ #010+ + 'procedure TCustomInstaller.AddAutoPackageVariantsToPackage(APackage: T'+ + 'Package);'#010+ + 'var'#010+ + ' i: Integer;'#010+ + ' PV: TPackageVariants;'#010+ + 'begin'#010+ + ' for i := 0 to FPackageVariants.Count-1 do'#010+ + ' begin'#010+ + ' PV := TObject(FPackageVariants.It','ems[i]) as TPackageVariants;'#010+ + ' if PV.AutoAddToPackage then'#010+ + ' APackage.AddPackageVariant(PV);'#010+ + ' end;'#010+ + 'end;'#010+ #010+ 'procedure TCustomInstaller.CheckPackages;'#010+ 'begin'#010+ - ' If ','(Packages.Count=0) then'#010+ + ' If (Packages.Count=0) then'#010+ ' Error(SErrNoPackagesDefined);'#010+ - ' // Check for other obvious errors ?'#010+ + ' // Check for ','other obvious errors ?'#010+ 'end;'#010+ #010+ #010+ @@ -5623,16 +6347,17 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' CheckPackages;'#010+ ' CreateBuildEngine;'#010+ ' Case RunMode of'#010+ - ' ','rmCompile : Compile(False);'#010+ + ' rmCompile : Compile(False);'#010+ ' rmBuild : Compile(True);'#010+ - ' rmInstall : Install;'#010+ + ' rmInst','all : Install;'#010+ ' rmZipInstall : ZipInstall;'#010+ ' rmArchive : Archive;'#010+ ' rmClean : Clean(False);'#010+ ' rmDistClean: Clean(True);'#010+ - ' rmManifest : Manifest',';'#010+ + ' rmManifest : Manifest;'#010+ ' rmPkgList : PkgList;'#010+ ' rmUnInstall : UnInstall;'#010+ + ' rmInfo ',' : Info;'#010+ ' end;'#010+ ' except'#010+ ' On E : Exception do'#010+ @@ -5642,19 +6367,19 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Result:=False;'#010+ ' end;'#010+ ' end;'#010+ - ' // Force returning an',' exitcode to the shell'#010+ + ' // Force returning an exitcode to the shell'#010+ ' if not Result then'#010+ - ' ExitCode:=1;'#010+ + ' ',' ExitCode:=1;'#010+ 'end;'#010+ #010+ #010+ '{*********************************************************************'+ '*******'#010+ ' TFPCInstaller'#010+ - '************************************************','********************'+ - '********}'#010+ + '**********************************************************************'+ + '******}'#010+ #010+ - 'constructor TFPCInstaller.Create(AOwner: TComponent);'#010+ + 'constructor TFPC','Installer.Create(AOwner: TComponent);'#010+ 'begin'#010+ ' if assigned(Defaults) then'#010+ ' Error(SErrAlreadyInitialized);'#010+ @@ -5663,16 +6388,16 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - '{****************','***************************************************'+ + '{***************************************************************','****'+ '*********'#010+ ' TBasicInstaller'#010+ '**********************************************************************'+ '******}'#010+ #010+ - 'constructor TBasicInstaller.Create(AOwner: TCompone','nt);'#010+ + 'constructor TBasicInstaller.Create(AOwner: TComponent);'#010+ 'begin'#010+ ' if assigned(Defaults) then'#010+ - ' Error(SErrAlreadyInitialized);'#010+ + ' Err','or(SErrAlreadyInitialized);'#010+ ' Defaults:=TBasicDefaults.Create;'#010+ ' inherited Create(AOwner);'#010+ 'end;'#010+ @@ -5680,29 +6405,29 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ '{*********************************************************************'+ '*******'#010+ - ' ',' TBuildEngine'#010+ - '**********************************************************************'+ - '******}'#010+ + ' TBuildEngine'#010+ + '******************','**************************************************'+ + '********}'#010+ #010+ 'constructor TBuildEngine.Create(AOwner: TComponent);'#010+ 'begin'#010+ ' inherited Create(AOwner);'#010+ - ' // Maybe this should be the current directo','ry ?'#010+ - ' // Or have it as a command-line option.'#010+ + ' // Maybe this should be the current directory ?'#010+ + ' // Or have it as a command-line option.'#010, ' // Would allow to put all '#039'installers'#039' in one dir and call t'+ 'hem'#010+ ' // With --start-dir=/path/to/sources.'#010+ ' FStartDir:=includeTrailingPathDelimiter(GetCurrentDir);'#010+ - ' FExternalPackages:=TPackage','s.Create(TPackage);'#010+ - ' FNotifyEventCollection := TNotifyEventCollection.create([neaAfterCom'+ - 'pile, neaBeforeCompile, neaAfterInstall, neaBeforeInstall,'#010+ + ' FExternalPackages:=TPackages.Create(TPackage);'#010+ + ' FNotifyEventCollection :=',' TNotifyEventCollection.create([neaAfterC'+ + 'ompile, neaBeforeCompile, neaAfterInstall, neaBeforeInstall,'#010+ ' neaAfterCle'+ - 'an, neaBeforeClean, n','eaAfterArchive, neaBeforeArchive,'#010+ - ' neaAfterMan'+ - 'ifest, neaBeforeManifest, neaAfterPkgList, neaBeforePkgList,'#010+ + 'an, neaBeforeClean, neaAfterArchive, neaBeforeArchive,'#010+ + ' ',' neaAfterM'+ + 'anifest, neaBeforeManifest, neaAfterPkgList, neaBeforePkgList,'#010+ ' neaBeforeUn'+ - 'Insta','ll, neaAfterUnInstall]);'#010+ - '{$ifndef NO_THREADING}'#010+ + 'Install, neaAfterUnInstall]);'#010+ + '{$ifndef NO_THREADING}',#010+ ' InitCriticalSection(FGeneralCriticalSection);'#010+ '{$endif NO_THREADING}'#010+ 'end;'#010+ @@ -5713,8 +6438,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' FreeAndNil(FExternalPackages);'#010+ ' FreeAndNil(FNotifyEventCollection);'#010+ #010+ - '{$if','ndef NO_THREADING}'#010+ - ' DoneCriticalsection(FGeneralCriticalSection);'#010+ + '{$ifndef NO_THREADING}'#010+ + ' DoneCriticalsection(FGener','alCriticalSection);'#010+ '{$endif NO_THREADING}'#010+ #010+ ' inherited Destroy;'#010+ @@ -5723,17 +6448,17 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'procedure TBuildEngine.AddFileToArchive(const APackage: TPackage; cons'+ 't ASourceFileName, ADestFileName: String);'#010+ #010+ - ' functio','n GetArchiveName: string;'#010+ + ' function GetArchiveName: string;'#010+ ' begin'#010+ - ' result := Defaults.ZipPrefix;'#010+ + ' result :=',' Defaults.ZipPrefix;'#010+ ' if Defaults.BuildOS in AllLimit83fsOses then'#010+ ' result := result + APackage.ShortName'#010+ ' else'#010+ ' result := result + APackage.Name;'#010+ - ' result := result + MakeZip','Suffix(Defaults.CPU, Defaults.OS);'#010+ + ' result := result + MakeZipSuffix(Defaults.CPU, Defaults.OS);'#010+ ' end;'#010+ #010+ - '{$ifdef UNIX}'#010+ + '{$if','def UNIX}'#010+ 'var'#010+ ' FileStat: stat;'#010+ '{$endif UNIX}'#010+ @@ -5743,7 +6468,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' if not assigned(FTarWriter) then'#010+ ' begin'#010+ ' {$ifdef HAS_UNIT_ZIPPER}'#010+ - ' FGZFileSt','ream := TGZFileStream.create(GetArchiveName + Archive'+ + ' FGZFileStream := TGZFileStream.create(GetArchiveName + A','rchive'+ 'Extension, gzopenwrite);'#010+ ' try'#010+ ' FTarWriter := TTarWriter.Create(FGZFileStream);'#010+ @@ -5751,48 +6476,48 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' FGZFileStream.Free;'#010+ ' end;'#010+ ' {$else}'#010+ - ' FTarWriter := TTarWriter.Cre','ate(GetArchiveName + ArchiveExtensio'+ - 'n);'#010+ - ' {$endif HAS_UNIT_ZIPPER}'#010+ + ' FTarWriter := TTarWriter.Create(GetArchiveName + ArchiveExtension)'+ + ';'#010+ + ' {$e','ndif HAS_UNIT_ZIPPER}'#010+ ' FTarWriter.Permissions := [tpReadByOwner, tpWriteByOwner, tpReadBy'+ 'Group, tpReadByOther];'#010+ ' FTarWriter.UserName := '#039'root'#039';'#010+ ' FTarWriter.GroupName := '#039'root'#039';'#010+ - ' end',';'#010+ + ' end;'#010+ '{$ifdef unix}'#010+ - ' if (FpStat(ASourceFileName, FileStat) = 0) and (FileStat.st_mode and'+ - ' S_IXUSR = S_IXUSR) then'#010+ + ' if (FpStat(ASourceFileName, F','ileStat) = 0) and (FileStat.st_mode a'+ + 'nd S_IXUSR = S_IXUSR) then'#010+ ' begin'#010+ ' FTarWriter.Permissions := FTarWriter.Permissions + [tpExecuteByGro'+ 'up];'#010+ - ' FTarWriter.Permissions := FTarWriter.Per','missions + [tpExecuteByO'+ - 'wner];'#010+ - ' FTarWriter.Permissions := FTarWriter.Permissions + [tpExecuteByOth'+ + ' FTarWriter.Permissions := FTarWriter.Permissions + [tpExecuteByOwn'+ 'er];'#010+ + ' FTarWriter.P','ermissions := FTarWriter.Permissions + [tpExecuteByO'+ + 'ther];'#010+ ' end'#010+ ' else'#010+ ' begin'#010+ ' FTarWriter.Permissions := FTarWriter.Permissions - [tpExecuteByGro'+ 'up];'#010+ - ' FTarWriter.Permissions := FTar','Writer.Permissions - [tpExecuteByO'+ - 'wner];'#010+ - ' FTarWriter.Permissions := FTarWriter.Permissions - [tpExecuteByOth'+ + ' FTarWriter.Permissions := FTarWriter.Permissions - [tpExecuteByOwn'+ 'er];'#010+ + ' FT','arWriter.Permissions := FTarWriter.Permissions - [tpExecuteByO'+ + 'ther];'#010+ ' end;'#010+ '{$endif unix}'#010+ ' FTarWriter.AddFile(ASourceFileName, ADestFileName);'#010+ ' {$endif HAS_TAR_SUPPORT}'#010+ - '{$else CREATE_TAR_FI','LE}'#010+ + '{$else CREATE_TAR_FILE}'#010+ ' {$ifdef HAS_UNIT_ZIPPER}'#010+ - ' if not assigned(FZipper) then'#010+ + ' if not assigne','d(FZipper) then'#010+ ' begin'#010+ ' FZipper := TZipper.Create;'#010+ ' FZipper.FileName := GetArchiveName + ArchiveExtension;'#010+ ' end;'#010+ #010+ - ' FZipper.Entries.AddFileEntry(ASourceFileName, ADestFileName);',#010+ + ' FZipper.Entries.AddFileEntry(ASourceFileName, ADestFileName);'#010+ ' {$endif HAS_UNIT_ZIPPER}'#010+ - '{$ENDIF CREATE_TAR_FILE}'#010+ + '{$ENDIF CREATE_TAR_','FILE}'#010+ 'end;'#010+ #010+ 'procedure TBuildEngine.FinishArchive(Sender: TObject);'#010+ @@ -5801,9 +6526,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' if assigned(FTarWriter) then'#010+ ' begin'#010+ ' FreeAndNil(FTarWriter);'#010+ - ' {$ifdef HAS_UNIT','_ZIPPER}'#010+ + ' {$ifdef HAS_UNIT_ZIPPER}'#010+ ' FGZFileStream.Free;'#010+ - ' {$endif HAS_UNIT_ZIPPER}'#010+ + ' {$endi','f HAS_UNIT_ZIPPER}'#010+ ' end;'#010+ ' {$endif HAS_TAR_SUPPORT}'#010+ ' {$ifdef HAS_UNIT_ZIPPER}'#010+ @@ -5812,10 +6537,10 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' try'#010+ ' FZipper.ZipAllFiles;'#010+ ' FZipper.Clear;'#010+ - ' final','ly'#010+ + ' finally'#010+ ' FreeAndNil(FZipper);'#010+ ' end;'#010+ - ' end;'#010+ + ' ','end;'#010+ ' {$endif HAS_UNIT_ZIPPER}'#010+ 'end;'#010+ #010+ @@ -5826,10 +6551,10 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'procedure TBuildEngine.Error(const Fmt: String; const A','rgs: array of'+ - ' const);'#010+ + 'procedure TBuildEngine.Error(const Fmt: String; const Args: array of c'+ + 'onst);'#010+ 'begin'#010+ - ' Raise EInstallerError.CreateFmt(Fmt,Args);'#010+ + ' Raise EInstallerE','rror.CreateFmt(Fmt,Args);'#010+ 'end;'#010+ #010+ #010+ @@ -5837,31 +6562,35 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'nv: TStrings = nil; IgnoreError : Boolean = False);'#010+ 'Var'#010+ ' E : Integer;'#010+ - ' cmdLine: string;'#010, + ' cmdLine: string;'#010+ ' ConsoleOutput: TMemoryStream;'#010+ ' s: string;'#010+ - 'begin'#010+ + 'be','gin'#010+ ' Log(vlInfo,SInfoExecutingCommand,[Cmd,Args]);'#010+ ' if ListMode then'#010+ ' Log(vlCommand,'#039'%s %s'#039',[Cmd,Args])'#010+ ' else'#010+ ' begin'#010+ - ' // We should check cmd for spaces, and move all after first s','p'+ - 'ace to args.'#010+ - ' ConsoleOutput := TMemoryStream.Create;'#010+ + ' // We should check cmd for spaces, and move all after first spac'+ + 'e to args.'#010+ + ' ConsoleOutput := TMemoryStr','eam.Create;'#010+ ' try'#010+ + ' if Interactive then'#010+ + ' Log(vlInfo,'#039'Starting "%s" "%s" interactively'#039',[Cmd,A'+ + 'rgs]);'#010+ ' {$ifdef HAS_UNIT_PROCESS}'#010+ - ' E:=ExecuteFPC(Verbose, cmd, args, env, ConsoleOutput);'#010+ - ' {$else}'#010+ + ' E:=ExecuteFPC(Verbose, Interactive, cmd, args, env, ConsoleOut'+ + 'put);'#010+ + ' {$e','lse}'#010+ ' E:=ExecuteProcess(cmd,args);'#010+ ' {$endif}'#010+ - ' ',' If (E<>0) and (not IgnoreError) then'#010+ + ' If (E<>0) and (not IgnoreError) then'#010+ ' begin'#010+ ' if trim(Args)<>'#039#039' then'#010+ ' cmdLine := cmd + '#039' '#039' + trim(args)'#010+ ' else'#010+ - ' cmdline := cmd;'#010+ - ' s := ParsecompilerOutput(ConsoleOutput,Ve','rbose);'#010+ + ' cmdlin','e := cmd;'#010+ + ' s := ParsecompilerOutput(ConsoleOutput,Verbose);'#010+ ' Error(SErrExternalCommandFailed,[cmdLine,E,s]);'#010+ ' end;'#010+ ' finally'#010+ @@ -5871,9 +6600,10 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'Function TBuildEngine.SysDirectoryExists(const ADir:string):Boolean;'#010+ + 'Function TBuildEngine.Sys','DirectoryExists(const ADir:string):Boolean;'+ + #010+ 'begin'#010+ - ' result:=Sys','Utils.DirectoryExists(ADir);'#010+ + ' result:=SysUtils.DirectoryExists(ADir);'#010+ ' if result then'#010+ ' Log(vlDebug,SDbgDirectoryExists,[ADir,SDbgFound])'#010+ ' else'#010+ @@ -5881,17 +6611,18 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'Function TBuildEngine.SysFileExists(const AFileName:string):Boolean;',#010+ + 'Funct','ion TBuildEngine.SysFileExists(const AFileName:string):Boolean;'+ + #010+ 'begin'#010+ ' result:=SysUtils.FileExists(AFileName);'#010+ ' if result then'#010+ ' Log(vlDebug,SDbgFileExists,[AFileName,SDbgFound])'#010+ ' else'#010+ - ' Log(vlDebug,SDbgFileExists,[AFileName,SDbgNotFound]);'#010+ + ' Log(vlDebug,SDbgFileExists,[AFileName,SDbgNotF','ound]);'#010+ 'end;'#010+ #010+ #010+ - 'procedure TBuildEngine.SysCopyFile(Const Src,Des','t : String);'#010+ + 'procedure TBuildEngine.SysCopyFile(Const Src,Dest : String);'#010+ 'Var'#010+ ' D,S : String;'#010+ ' Fin,FOut : TFileStream;'#010+ @@ -5901,17 +6632,17 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' FileStat: stat;'#010+ '{$endif UNIX}'#010+ 'begin'#010+ - ' Log(vlInfo,SInfoCopyingFile,[Src,Dest]);'#010+ - ' FIn:=TFileStream.Create(Src,fmopenRead or fmShareDen','yNone);'#010+ + ' Log(vlInfo,SInfoCopyingFile,[Src',',Dest]);'#010+ + ' FIn:=TFileStream.Create(Src,fmopenRead or fmShareDenyNone);'#010+ ' Try'#010+ ' D:=IncludeTrailingPathDelimiter(Dest);'#010+ ' If DirectoryExists(D) then'#010+ ' S:=D+ExtractFileName(Src)'#010+ ' else'#010+ ' S:=Dest;'#010+ - ' FOut:=TFileStream.Create(S,fmCreate or fmShareDenyNone);'#010+ + ' FOut:=TFileStream.Create(S,fm','Create or fmShareDenyNone);'#010+ ' Try'#010+ - ' Count:=Fout.CopyFrom(','FIn,0);'#010+ + ' Count:=Fout.CopyFrom(FIn,0);'#010+ ' If (Count<>Fin.Size) then'#010+ ' Error(SErrCopyingFile,[Src,S]);'#010+ ' Finally'#010+ @@ -5919,26 +6650,26 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' end;'#010+ ' A:=FileGetDate(FIn.Handle);'#010+ ' If (A=-1) then'#010+ - ' log(vlWarning,SWarnFailedToGetTime,[Src])'#010+ + ' ',' log(vlWarning,SWarnFailedToGetTime,[Src])'#010+ ' else'#010+ - ' i','f FileSetDate(S,A)<>0 then'#010+ + ' if FileSetDate(S,A)<>0 then'#010+ ' Log(vlWarning,SWarnFailedToSetTime,[S]);'#010+ '{$ifdef UNIX}'#010+ ' // Copy the file-access rights on Unix, especially the executable-'+ 'bit'#010+ - ' if FpStat(Src,FileStat) <> 0 then'#010+ - ' Log(vlWarning,SWarnCanNotGetAcce','ssRights,[Src])'#010+ + ' if FpStat','(Src,FileStat) <> 0 then'#010+ + ' Log(vlWarning,SWarnCanNotGetAccessRights,[Src])'#010+ ' else'#010+ ' if FpChmod(s,FileStat.st_mode) <> 0 then'#010+ ' Log(vlWarning,SWarnCanNotSetAccessRights,[S]);'#010+ '{$endif UNIX}'#010+ ' finally'#010+ ' FreeAndNil(Fin);'#010+ - ' end;'#010+ + ' end',';'#010+ 'end;'#010+ #010+ #010+ - 'procedure TBuildEngine.SysMoveFile(Const Src,Dest : St','ring);'#010+ + 'procedure TBuildEngine.SysMoveFile(Const Src,Dest : String);'#010+ 'Var'#010+ ' S : String;'#010+ 'begin'#010+ @@ -5946,10 +6677,10 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' S:=IncludeTrailingPathDelimiter(Dest)+ExtractFileName(Src)'#010+ ' else'#010+ ' S:=Dest;'#010+ - ' If Not RenameFile(Src,S) then'#010+ + ' ',' If Not RenameFile(Src,S) then'#010+ ' begin'#010+ ' Try'#010+ - ' SysC','opyFile(Src,S);'#010+ + ' SysCopyFile(Src,S);'#010+ ' SysDeleteFile(Src);'#010+ ' Except'#010+ ' On E : Exception Do'#010+ @@ -5959,47 +6690,47 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'procedure TBuildEngine.SysDeleteFile(Const AFileName : String);'#010+ + 'procedure TBuildEngine.S','ysDeleteFile(Const AFileName : String);'#010+ 'begin'#010+ - ' if not FileExis','ts(AFileName) then'#010+ + ' if not FileExists(AFileName) then'#010+ ' Log(vldebug,SDbgFileDoesNotExist,[AFileName])'#010+ ' else If Not SysUtils.DeleteFile(AFileName) then'#010+ ' Error(SErrDeletingFile,[AFileName])'#010+ ' else'#010+ - ' Log(vlInfo,SInfoDeletedFile,[AFileName]);'#010+ + ' Log(vlI','nfo,SInfoDeletedFile,[AFileName]);'#010+ 'end;'#010+ #010+ - 'procedure TBuildEngine','.SysDeleteDirectory(Const ADirectoryName: Stri'+ - 'ng);'#010+ + 'procedure TBuildEngine.SysDeleteDirectory(Const ADirectoryName: String'+ + ');'#010+ 'begin'#010+ ' if not DirectoryExists(ADirectoryName) then'#010+ ' Log(vldebug,SDbgDirectoryDoesNotExist,[ADirectoryName])'#010+ - ' else if not IsDirectoryEmpty(ADirectoryName) then'#010+ - ' Log(vldebug,SDbgDirec','toryNotEmpty,[ADirectoryName])'#010+ + ' else if not ','IsDirectoryEmpty(ADirectoryName) then'#010+ + ' Log(vldebug,SDbgDirectoryNotEmpty,[ADirectoryName])'#010+ ' else If Not RemoveDir(ADirectoryName) then'#010+ ' Error(SErrRemovingDirectory,[ADirectoryName])'#010+ ' else'#010+ - ' Log(vlInfo,SInfoRemovedDirectory,[ADirectoryName]);'#010+ + ' Log(vlInfo,SInfoRemovedDirectory,[ADirec','toryName]);'#010+ 'end;'#010+ #010+ #010+ - 'procedure TBuildEngine.SysDeleteTree(Const A','DirectoryName: String);'#010+ + 'procedure TBuildEngine.SysDeleteTree(Const ADirectoryName: String);'#010+ #010+ ' function IntRemoveTree(const ADirectoryName: String) : boolean;'#010+ '{$ifdef MSWINDOWS}'#010+ - ' { pulling in shellapi with all it dependent units and packages makes'+ - ' things too'#010+ - ' complicated so just add the constants here }',#010+ + ' { pulling in shellapi with all it dependent units and packages ma','k'+ + 'es things too'#010+ + ' complicated so just add the constants here }'#010+ ' const'#010+ ' FO_DELETE = $0003;'#010+ ' FOF_SILENT = $0004;'#010+ ' FOF_NOCONFIRMATION = $0010;'#010+ '{$endif MSWINDOWS}'#010+ ' var'#010+ - ' i: integer;'#010+ - '{$ifdef MSWINDOWS}'#010+ + ' retries: integer;'#010+ + '{$ifdef',' MSWINDOWS}'#010+ ' SHFileOpStruct: TSHFileOpStruct;'#010+ - ' DirBuf: array[0.','.MAX_PATH+1] of TCHAR;'#010+ + ' DirBuf: array[0..MAX_PATH+1] of TCHAR;'#010+ '{$else MSWINDOWS}'#010+ ' searchRec: TSearchRec;'#010+ ' SearchResult: longint;'#010+ @@ -6008,95 +6739,104 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ ' begin'#010+ ' result := true;'#010+ - '{$ifdef MSWINDOWS}'#010+ + '{$ifdef MSWIN','DOWS}'#010+ + ' retries:=2;'#010+ ' try'#010+ - ' FillChar(SHFileOpStruct, Sizeof(SHFileOpStruct), ','0);'#010+ + ' FillChar(SHFileOpStruct, Sizeof(SHFileOpStruct), 0);'#010+ ' FillChar(DirBuf, Sizeof(DirBuf), 0);'#010+ ' StrPCopy(DirBuf, ADirectoryName);'#010+ ' with SHFileOpStruct do'#010+ ' begin'#010+ ' pFrom := @DirBuf;'#010+ - ' wFunc := FO_DELETE;'#010+ + ' ',' wFunc := FO_DELETE;'#010+ ' fFlags := FOF_NOCONFIRMATION or FOF_SILENT;'#010+ - ' ','end;'#010+ + ' end;'#010+ ' Result := SHFileOperation(SHFileOpStruct) = 0;'#010+ ' except'#010+ ' Result := False;'#010+ ' end;'#010+ + ' while not result and (retries>0) do'#010+ + ' begin'#010+ + ' ',' log(vlWarning, SWarnRetryRemDirectory, [ADirectoryName]);'#010+ + ' sleep(5000);'#010+ + ' dec(retries);'#010+ + ' result := SHFileOperation(SHFileOpStruct) = 0;;'#010+ + ' end;'#010+ + #010+ '{$else MSWINDOWS}'#010+ - ' SearchResult := FindFirst(IncludeTrailingPathDelimiter(ADirectoryN'+ - 'ame)+AllFilesMask, faAnyFile+faSymLink, searchRec);',#010+ + ' SearchResult := FindFirst(IncludeTrailingPa','thDelimiter(ADirector'+ + 'yName)+AllFilesMask, faAnyFile+faSymLink, searchRec);'#010+ ' try'#010+ ' while SearchResult=0 do'#010+ ' begin'#010+ ' if (searchRec.Name<>'#039'.'#039') and (searchRec.Name<>'#039'.'+ '.'#039') then'#010+ ' begin'#010+ - ' s := IncludeTrailingPathDelimiter(ADirectoryName)+searc'+ - 'hRec.Name;'#010+ - ' if (s','earchRec.Attr and faDirectory)=faDirectory then'#010+ + ' s := Include','TrailingPathDelimiter(ADirectoryName)+sea'+ + 'rchRec.Name;'#010+ + ' if (searchRec.Attr and faDirectory)=faDirectory then'#010+ ' begin'#010+ ' if not IntRemoveTree(s) then'#010+ ' result := false;'#010+ - ' end'#010+ + ' ',' end'#010+ ' else if not DeleteFile(s) then'#010+ - ' ',' result := False'#010+ + ' result := False'#010+ ' else'#010+ ' log(vldebug, SDbgDeletedFile, [s]);'#010+ ' end;'#010+ ' SearchResult := FindNext(searchRec);'#010+ - ' end;'#010+ + ' end',';'#010+ ' finally'#010+ ' FindClose(searchRec);'#010+ ' end;'#010+ #010+ - ' // There were repo','rts of RemoveDir failing due to locking-proble'+ - 'ms. To solve'#010+ + ' // There were reports of RemoveDir failing due to locking-problems'+ + '. To solve'#010+ ' // these the RemoveDir is tried three times, with a delay of 5 sec'+ 'onds. See'#010+ ' // bug 21868'#010+ - ' i := 2;'#010+ + ' retrie','s := 2;'#010+ ' result := RemoveDir(ADirectoryName);'#010+ - '{$endif WINDOWS}'#010+ - #010+ - ' while not',' result and (i>0) do'#010+ + ' while not result and (retries>0) do'#010+ ' begin'#010+ ' log(vlWarning, SWarnRetryRemDirectory, [ADirectoryName]);'#010+ ' sleep(5000);'#010+ - ' dec(i);'#010+ - ' result := RemoveDir(ADirectoryName);'#010+ + ' dec(retries);'#010+ + ' result := RemoveDir(AD','irectoryName);'#010+ ' end;'#010+ #010+ + '{$endif WINDOWS}'#010+ + #010+ ' if result then'#010+ - ' log(vldebug, SDbgRemov','edDirectory, [ADirectoryName]);'#010+ + ' log(vldebug, SDbgRemovedDirectory, [ADirectoryName]);'#010+ ' end;'#010+ #010+ 'begin'#010+ ' if not DirectoryExists(ADirectoryName) then'#010+ - ' Log(vldebug,SDbgDirectoryDoesNotExist,[ADirectoryName])'#010+ + ' Log(vldebug,SDbgDirectoryDoesNotExist,[ADirectoryNam','e])'#010+ ' else If Not IntRemoveTree(ADirectoryName) then'#010+ - ' Error(SErrRemovingDirectory,[ADirec','toryName])'#010+ + ' Error(SErrRemovingDirectory,[ADirectoryName])'#010+ ' else'#010+ ' Log(vlInfo,SInfoRemovedDirectory,[ADirectoryName]);'#010+ 'end;'#010+ #010+ #010+ - 'procedure TBuildEngine.SysArchiveFiles(List: TStrings;Const AFileName:'+ - ' String);'#010+ + 'procedure TBuildEngine.SysArchiveFiles(List: TStrings;Const AFileNa','m'+ + 'e: String);'#010+ 'begin'#010+ ' If Not (Assigned(OnArchivefiles) or Assigned(ArchiveFilesProc)) then'+ #010+ - ' ',' Raise EInstallerError.Create(SErrNoArchiveSupport);'#010+ + ' Raise EInstallerError.Create(SErrNoArchiveSupport);'#010+ ' If Assigned(ArchiveFilesProc) then'#010+ ' ArchiveFilesProc(AFileName,List)'#010+ ' else'#010+ - ' OnArchiveFiles(AFileName,List);'#010+ + ' OnArchive','Files(AFileName,List);'#010+ 'end;'#010+ #010+ #010+ 'procedure TBuildEngine.LogIndent;'#010+ 'begin'#010+ - ' GLogPrefix:=GLogPref','ix+'#039' '#039';'#010+ + ' GLogPrefix:=GLogPrefix+'#039' '#039';'#010+ 'end;'#010+ #010+ #010+ @@ -6106,26 +6846,26 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'procedure TBuildEngine.Log(Level: TVerboseLevel; Msg: String);'#010+ + 'procedure TBuildEngine.Log(Level: TVerboseLevel; Msg: Str','ing);'#010+ 'begin'#010+ ' If Assigned(FOnLog) then'#010+ ' begin'#010+ ' if Level in [vlInfo,vlDebug] then'#010+ - ' ',' FOnLog(Level,GLogPrefix+Msg)'#010+ + ' FOnLog(Level,GLogPrefix+Msg)'#010+ ' else'#010+ ' FOnLog(Level,Msg);'#010+ ' end;'#010+ 'end;'#010+ #010+ #010+ - 'procedure TBuildEngine.Log(Level: TVerboseLevel; Fmt: String;const Arg'+ - 's: array of const);'#010+ + 'procedure TBuildEngine.Log(Level: TVerboseLevel; Fmt: String',';const A'+ + 'rgs: array of const);'#010+ 'begin'#010+ ' Log(Level,Format(Fmt,Args));'#010+ 'end;'#010+ #010+ #010+ - 'procedure TBuildEn','gine.EnterDir(ADir: String);'#010+ + 'procedure TBuildEngine.EnterDir(ADir: String);'#010+ 'Var'#010+ ' D : String;'#010+ 'begin'#010+ @@ -6133,93 +6873,93 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' D:=D+ADir;'#010+ ' Log(vlDebug,SDbgEnterDir,[D]);'#010+ ' If Not SetCurrentDir(D) then'#010+ - ' Error(SErrChangeDirFailed,[D]);'#010+ + ' ',' Error(SErrChangeDirFailed,[D]);'#010+ 'end;'#010+ #010+ #010+ - 'procedure TBuildEngine.CmdCopyFiles(List: TStrings;',' Const DestDir: S'+ - 'tring; APackage : TPackage);'#010+ + 'procedure TBuildEngine.CmdCopyFiles(List: TStrings; Const DestDir: Str'+ + 'ing; APackage : TPackage);'#010+ #010+ 'Var'#010+ ' Args : String;'#010+ ' I : Integer;'#010+ ' DestFileName : String;'#010+ 'begin'#010+ - ' // When the files should be written to an archive, add them'#010+ + ' // When the files should be writ','ten to an archive, add them'#010+ ' if assigned(FOnCopyFile) then'#010+ ' begin'#010+ - ' For I:=0 to List','.Count-1 do'#010+ + ' For I:=0 to List.Count-1 do'#010+ ' if List.Names[i]<>'#039#039' then'#010+ ' begin'#010+ ' if IsRelativePath(list.ValueFromIndex[i]) then'#010+ - ' DestFileName:=DestDir+list.ValueFromIndex[i]'#010+ + ' DestFileName:','=DestDir+list.ValueFromIndex[i]'#010+ ' else'#010+ - ' DestFileName:=list.ValueFromI','ndex[i];'#010+ + ' DestFileName:=list.ValueFromIndex[i];'#010+ ' FOnCopyFile(APackage, AddPathPrefix(APackage, List.Names[i'+ ']), DestFileName);'#010+ ' end'#010+ ' else'#010+ - ' FOnCopyFile(APackage, AddPathPrefix(APackage, List[i]), Dest'+ - 'Dir+ExtractFileName(List[i]));'#010+ + ' FOnCopyFile(A','Package, AddPathPrefix(APackage, List[i]), De'+ + 'stDir+ExtractFileName(List[i]));'#010+ ' Exit;'#010+ - ' ',' end;'#010+ + ' end;'#010+ #010+ ' // Copy the files to their new location on disk'#010+ ' CmdCreateDir(DestDir);'#010+ ' If (Defaults.Copy<>'#039#039') then'#010+ ' begin'#010+ - ' Args:=FileListToString(List, IncludeTrailingPathDelimiter(GPathP'+ - 'refix));'#010+ + ' Args:=FileListToStr','ing(List, IncludeTrailingPathDelimiter(GPat'+ + 'hPrefix));'#010+ ' Args:=Args+'#039' '#039'+DestDir;'#010+ - ' Ex','ecuteCommand(Defaults.Copy,Args);'#010+ + ' ExecuteCommand(Defaults.Copy,Args);'#010+ ' end'#010+ ' else'#010+ ' For I:=0 to List.Count-1 do'#010+ ' if List.Names[i]<>'#039#039' then'#010+ ' begin'#010+ - ' if IsRelativePath(list.ValueFromIndex[i]) then'#010+ - ' DestFileName:=DestDir+list.ValueFromIndex[i]',#010+ + ' if IsRelati','vePath(list.ValueFromIndex[i]) then'#010+ + ' DestFileName:=DestDir+list.ValueFromIndex[i]'#010+ ' else'#010+ ' DestFileName:=list.ValueFromIndex[i];'#010+ ' CmdCreateDir(ExtractFilePath(DestFileName));'#010+ - ' SysCopyFile(AddPathPrefix(APackage, List.Names[i]),DestFileN'+ - 'ame)'#010+ + ' SysCopyFile(AddPa','thPrefix(APackage, List.Names[i]),DestFil'+ + 'eName)'#010+ ' end'#010+ ' else'#010+ - ' SysCopyFile(A','ddPathPrefix(APackage, List[i]), DestDir);'#010+ + ' SysCopyFile(AddPathPrefix(APackage, List[i]), DestDir);'#010+ 'end;'#010+ #010+ #010+ 'procedure TBuildEngine.CmdCreateDir(const DestDir: String);'#010+ 'begin'#010+ ' If (Defaults.MkDir<>'#039#039') then'#010+ - ' ExecuteCommand(Defaults.MkDir,DestDir)'#010+ + ' ',' ExecuteCommand(Defaults.MkDir,DestDir)'#010+ ' else'#010+ ' If not ForceDirectories(DestDir) then'#010+ - ' ',' Error(SErrCreatingDirectory,[DestDir]);'#010+ + ' Error(SErrCreatingDirectory,[DestDir]);'#010+ 'end;'#010+ #010+ #010+ 'procedure TBuildEngine.CmdMoveFiles(List: TStrings; Const DestDir: Str'+ 'ing);'#010+ 'Var'#010+ - ' Args : String;'#010+ + ' Args : String;',#010+ ' I : Integer;'#010+ 'begin'#010+ ' CmdCreateDir(DestDir);'#010+ ' If (Defaults.Move<>'#039#039') then'#010+ ' begin'#010+ - ' ',' Args:=FileListToString(List,'#039#039');'#010+ + ' Args:=FileListToString(List,'#039#039');'#010+ ' Args:=Args+'#039' '#039'+DestDir;'#010+ ' ExecuteCommand(Defaults.Move,Args);'#010+ ' end'#010+ ' else'#010+ - ' For I:=0 to List.Count-1 do'#010+ + ' For I:=0 to List.Count-','1 do'#010+ ' SysMoveFile(List[i],DestDir);'#010+ 'end;'#010+ #010+ #010+ - 'procedure TBuildEngine.CmdDeleteFiles(List: ','TStrings);'#010+ + 'procedure TBuildEngine.CmdDeleteFiles(List: TStrings);'#010+ 'Var'#010+ ' Args : String;'#010+ ' I : Integer;'#010+ @@ -6227,11 +6967,11 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' If (Defaults.Remove<>'#039#039') then'#010+ ' begin'#010+ ' Args:=FileListToString(List,'#039#039');'#010+ - ' ExecuteCommand(Defaults.Remove,Args);'#010+ + ' ExecuteC','ommand(Defaults.Remove,Args);'#010+ ' end'#010+ ' else'#010+ ' For I:=0 to List.Count-1 do'#010+ - ' SysDelete','File(List[i]);'#010+ + ' SysDeleteFile(List[i]);'#010+ 'end;'#010+ #010+ 'procedure TBuildEngine.CmdDeleteDestFiles(List: TStrings; Const DestDi'+ @@ -6239,18 +6979,18 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'Var'#010+ ' I : Integer;'#010+ - ' DeleteFileName : String;'#010+ + ' DeleteFileName : String',';'#010+ 'begin'#010+ ' // Delete files from their location on disk'#010+ ' For I:=0 to List.Count-1 do'#010+ - ' begi','n'#010+ + ' begin'#010+ ' if List.Names[i]<>'#039#039' then'#010+ ' begin'#010+ ' if IsRelativePath(list.ValueFromIndex[i]) then'#010+ - ' DeleteFileName:=DestDir+list.ValueFromIndex[i]'#010+ + ' DeleteFileName:=DestDir+list.Va','lueFromIndex[i]'#010+ ' else'#010+ ' DeleteFileName:=list.ValueFromIndex[i];'#010+ - ' e','nd'#010+ + ' end'#010+ ' else'#010+ ' DeleteFileName:=DestDir+ExtractFileName(list[i]);'#010+ ' SysDeleteFile(DeleteFileName);'#010+ @@ -6258,20 +6998,20 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'procedure TBuildEngine.CmdArchiveFiles(List: TStrings; Const ArchiveFi'+ - 'le: String);'#010+ + 'procedure TBuildEngine.','CmdArchiveFiles(List: TStrings; Const Archive'+ + 'File: String);'#010+ 'Var'#010+ ' S,C,O : String;'#010+ 'begin'#010+ - ' If',' (Defaults.Archive='#039#039') then'#010+ + ' If (Defaults.Archive='#039#039') then'#010+ ' SysArchiveFiles(List,ArchiveFile)'#010+ ' else'#010+ ' begin'#010+ - ' S:=FileListToString(List,IncludeTrailingPathDelimiter(GPathPrefi'+ - 'x));'#010+ + ' S:=FileListToString(List,IncludeTrailingPathDelimiter(GPath','Pre'+ + 'fix));'#010+ ' SplitCommand(Defaults.Archive,C,O);'#010+ ' If (O='#039#039') then'#010+ - ' O:=ArchiveF','ile+'#039' '#039'+S'#010+ + ' O:=ArchiveFile+'#039' '#039'+S'#010+ ' else'#010+ ' O:=GlobalDictionary.Substitute(O,['#039'ARCHIVE'#039',ArchiveFil'+ 'e,'#039'FILESORDIRS'#039']);'#010+ @@ -6279,21 +7019,21 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' end;'#010+ 'end;'#010+ #010+ - 'procedure TBuildEngine.CmdRenameFile(SourceName, DestName: String);'#010+ + 'proc','edure TBuildEngine.CmdRenameFile(SourceName, DestName: String);'#010+ 'var'#010+ ' Args: string;'#010+ 'begin'#010+ - ' ','If (Defaults.Move<>'#039#039') then'#010+ + ' If (Defaults.Move<>'#039#039') then'#010+ ' begin'#010+ ' Args:=SourceName;'#010+ ' Args:=Args+'#039' '#039'+DestName;'#010+ ' ExecuteCommand(Defaults.Move,Args);'#010+ ' end'#010+ - ' else'#010+ + ' els','e'#010+ ' SysMoveFile(SourceName,DestName);'#010+ 'end;'#010+ #010+ - 'procedure TBuildEngine.CmdRemoveDirs(List: TSt','rings);'#010+ + 'procedure TBuildEngine.CmdRemoveDirs(List: TStrings);'#010+ 'Var'#010+ ' Args : String;'#010+ ' I : Integer;'#010+ @@ -6301,11 +7041,11 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' If (Defaults.RemoveDir<>'#039#039') then'#010+ ' begin'#010+ ' Args:=FileListToString(List,'#039#039');'#010+ - ' ExecuteCommand(Defaults.RemoveDir,Args);'#010+ + ' ExecuteC','ommand(Defaults.RemoveDir,Args);'#010+ ' end'#010+ ' else'#010+ ' For I:=0 to List.Count-1 do'#010+ - ' SysDel','eteDirectory(List[i]);'#010+ + ' SysDeleteDirectory(List[i]);'#010+ 'end;'#010+ #010+ 'procedure TBuildEngine.CmdRemoveTrees(List: TStrings);'#010+ @@ -6313,104 +7053,104 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Args : String;'#010+ ' I : Integer;'#010+ 'begin'#010+ - ' If (Defaults.RemoveTree<>'#039#039') then'#010+ + ' If (Defaults.RemoveT','ree<>'#039#039') then'#010+ ' begin'#010+ ' Args:=FileListToString(List,'#039#039');'#010+ - ' ExecuteCommand(Defaults','.RemoveTree,Args);'#010+ + ' ExecuteCommand(Defaults.RemoveTree,Args);'#010+ ' end'#010+ ' else'#010+ ' For I:=0 to List.Count-1 do'#010+ ' SysDeleteTree(List[i]);'#010+ 'end;'#010+ #010+ - 'Function TBuildEngine.FileNewer(const Src,Dest : String) : Boolean;'#010+ + 'Function TBuildEngine.FileNewer(const Src,Dest',' : String) : Boolean;'#010+ #010+ 'Var'#010+ ' DS,DD : Longint;'#010+ ' D1,D2 : TDateTime;'#010+ #010+ 'begin'#010+ - ' DS:=FileAge(Src)',';'#010+ + ' DS:=FileAge(Src);'#010+ ' { Return false if file not found or not accessible }'#010+ ' if DS=-1 then'#010+ ' begin'#010+ ' Log(vlWarning,SWarnCanNotGetFileAge,[Src]);'#010+ - ' Result:=false;'#010+ + ' Result:=f','alse;'#010+ ' exit;'#010+ ' end;'#010+ ' DD:=FileAge(Dest);'#010+ ' D1:=FileDateToDateTime(DS);'#010+ - ' D2:=FileDate','ToDateTime(DD);'#010+ + ' D2:=FileDateToDateTime(DD);'#010+ ' Log(vlDebug,SDbgComparingFileTimes,[Src,DateTimeToStr(D1),Dest,DateT'+ 'imeToStr(D2)]);'#010+ ' Result:=D1>D2;'#010+ ' If Result then'#010+ - ' Log(vlInfo,SInfoSourceNewerDest,[Src,DateTimeToStr(D1),Dest,DateTi'+ - 'meToStr(D2)]);'#010+ + ' Log(vlIn','fo,SInfoSourceNewerDest,[Src,DateTimeToStr(D1),Dest,Date'+ + 'TimeToStr(D2)]);'#010+ 'end;'#010+ #010+ #010+ - 'procedure TB','uildEngine.ExecuteCommands(Commands: TCommands; At: TCom'+ - 'mandAt; APackage: TPackage);'#010+ + 'procedure TBuildEngine.ExecuteCommands(Commands: TCommands; At: TComma'+ + 'ndAt; APackage: TPackage);'#010+ 'Var'#010+ ' C : TCommand;'#010+ ' I : Integer;'#010+ ' Cmd,O : String;'#010+ - ' E : Boolean;'#010+ + ' E : Bool','ean;'#010+ ' ADictionary: TDictionary;'#010+ ' SourceFile, DestFile: string;'#010+ 'begin'#010+ - ' For I:=0 to Command','s.Count-1 do'#010+ + ' For I:=0 to Commands.Count-1 do'#010+ ' begin'#010+ ' C:=Commands.CommandItems[i];'#010+ ' if (C.At=At) then'#010+ ' begin'#010+ ' E:=True;'#010+ #010+ - ' if assigned(APackage) then'#010+ + ' if assigned(APackage) ','then'#010+ ' ADictionary := APackage.Dictionary'#010+ ' else'#010+ - ' ADictionary :','= GlobalDictionary;'#010+ + ' ADictionary := GlobalDictionary;'#010+ ' SourceFile := ADictionary.ReplaceStrings(C.SourceFile);'#010+ - ' DestFile := ADictionary.ReplaceStrings(C.DestFile);'#010+ + ' DestFile := ADictionary.ReplaceStrings(C.DestFile);'#010, ' if IsRelativePath(SourceFile) then'#010+ - ' SourceFile := AddPathPrefix(APackag','e,SourceFile);'#010+ + ' SourceFile := AddPathPrefix(APackage,SourceFile);'#010+ ' if IsRelativePath(DestFile) then'#010+ ' DestFile := AddPathPrefix(APackage,DestFile);'#010+ #010+ ' Cmd:=C.Command;'#010+ - ' If (ExtractFilePath(Cmd)='#039#039') then'#010+ - ' Cmd:=ExeSearch(Cmd,SysUtils.GetEnvironmen','tvariable('#039'P'+ - 'ATH'#039'));'#010+ + ' ',' If (ExtractFilePath(Cmd)='#039#039') then'#010+ + ' Cmd:=ExeSearch(Cmd,SysUtils.GetEnvironmentvariable('#039'PA'+ + 'TH'#039'));'#010+ #010+ ' If (SourceFile<>'#039#039') and (DestFile<>'#039#039') then'#010+ ' begin'#010+ ' if not FileExists(DestFile) then'#010+ - ' Log(vlInfo,SInfoDestDoesNotExist,[DestFile])'#010+ + ' ',' Log(vlInfo,SInfoDestDoesNotExist,[DestFile])'#010+ ' else'#010+ - ' beg','in'#010+ + ' begin'#010+ ' E:=FileNewer(SourceFile, DestFile);'#010+ ' if E and (cmd = '#039#039') then'#010+ ' begin'#010+ - ' log(vlWarning,SWarnExtCommandNotFound,[C.Command,Des'+ - 'tFile,SourceFile]);'#010+ - ' E := False;'#010, + ' log(vlWarn','ing,SWarnExtCommandNotFound,[C.Command,D'+ + 'estFile,SourceFile]);'#010+ + ' E := False;'#010+ ' end;'#010+ ' end;'#010+ ' end;'#010+ ' If E then'#010+ ' begin'#010+ ' if Cmd = '#039#039' then'#010+ - ' error(SErrExtCommandNotFound,[C.Command]);'#010+ + ' error(','SErrExtCommandNotFound,[C.Command]);'#010+ #010+ ' If Assigned(C.BeforeCommand) then'#010+ - ' ',' C.BeforeCommand(C);'#010+ + ' C.BeforeCommand(C);'#010+ ' O:=ADictionary.Substitute(C.CmdLineOptions,['#039'SOURCE'#039+ ',SourceFile,'#039'DEST'#039',DestFile]);'#010+ #010+ - ' Log(vlCommand,SInfoExecutingCommand,[Cmd,O]);'#010+ + ' Log(vlCommand,','SInfoExecutingCommand,[Cmd,O]);'#010+ ' ExecuteCommand(Cmd,O,nil,C.IgnoreResult);'#010+ - ' ',' If Assigned(C.AfterCommand) then'#010+ + ' If Assigned(C.AfterCommand) then'#010+ ' C.AfterCommand(C);'#010+ ' end;'#010+ ' end;'#010+ @@ -6418,8 +7158,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'procedure TBuildEngine.LogSearchPath(APackage: TPackage; const ASearch'+ - 'PathName: string; Path: TConditionalStrings; ACPU: T','CPU; AOS: TOS);'#010+ + 'procedure TBuildEngine.LogSear','chPath(APackage: TPackage; const ASear'+ + 'chPathName: string; Path: TConditionalStrings; ACPU: TCPU; AOS: TOS);'#010+ 'var'#010+ ' S : String;'#010+ ' I : Integer;'#010+ @@ -6428,38 +7168,38 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' S:='#039#039';'#010+ ' for i:=0 to Path.Count-1 do'#010+ ' begin'#010+ - ' C:=Path[I];'#010+ + ' C:=Path[I];'#010, ' if (ACPU in C.CPUs) and (AOS in C.OSes) then'#010+ ' begin'#010+ ' if S<>'#039#039' then'#010+ - ' ',' S:=S+PathSeparator;'#010+ + ' S:=S+PathSeparator;'#010+ ' S:=S+APackage.Dictionary.ReplaceStrings(C.Value)'#010+ ' end;'#010+ ' end;'#010+ ' if S<>'#039#039' then'#010+ - ' Log(vlDebug,SDbgSearchPath,[ASearchPathName,S]);'#010+ + ' Log(vlDebug,SDbgSe','archPath,[ASearchPathName,S]);'#010+ 'end;'#010+ #010+ #010+ - 'Function TBuildEngine.FindFileInPath(APackage: TPackag','e; Path:TCondi'+ - 'tionalStrings; AFileName:String; var FoundPath:String;ACPU:TCPU;AOS:TO'+ - 'S):Boolean;'#010+ + 'Function TBuildEngine.FindFileInPath(APackage: TPackage; Path:TConditi'+ + 'onalStrings; AFileName:String; var FoundPath:String;ACPU:TCPU;AOS:TOS)'+ + ':Boolean;'#010+ 'var'#010+ ' I : Integer;'#010+ ' C : TConditionalString;'#010+ 'begin'#010+ - ' Result:=false;'#010+ + ' ',' Result:=false;'#010+ ' for i:=0 to Path.Count-1 do'#010+ ' begin'#010+ ' C:=Path[I];'#010+ - ' if (ACPU in ','C.CPUs) and (AOS in C.OSes) then'#010+ + ' if (ACPU in C.CPUs) and (AOS in C.OSes) then'#010+ ' begin'#010+ ' FoundPath:=IncludeTrailingPathDelimiter(APackage.Dictionary.'+ 'ReplaceStrings(C.Value));'#010+ - ' if FileExists(AddPathPrefix(APackage,FoundPath+AFileName)) t'+ - 'hen'#010+ + ' ',' if FileExists(AddPathPrefix(APackage,FoundPath+AFileName))'+ + ' then'#010+ ' begin'#010+ - ' ',' result:=true;'#010+ + ' result:=true;'#010+ ' exit;'#010+ ' end;'#010+ ' end;'#010+ @@ -6467,212 +7207,213 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' FoundPath:='#039#039';'#010+ 'end;'#010+ #010+ - 'procedure TBuildEngine.GetDirectoriesFromFilelist(const AFileList, ADi'+ - 'rectoryList: TStringList);'#010+ + 'procedure TBuildEngine.GetDirectoriesFromFi','lelist(const AFileList, A'+ + 'DirectoryList: TStringList);'#010+ 'var'#010+ ' i: integer;'#010+ ' s: string;'#010+ 'begin'#010+ - ' ',' ADirectoryList.Sorted:=true;'#010+ + ' ADirectoryList.Sorted:=true;'#010+ ' ADirectoryList.Duplicates:=dupIgnore;'#010+ ' for i := 0 to AFileList.Count-1 do'#010+ ' begin'#010+ - ' s := ExtractFileDir(AFileList.Strings[i]);'#010+ + ' s := ExtractFileDir(AFile','List.Strings[i]);'#010+ ' if s <> '#039#039' then'#010+ ' ADirectoryList.Add(s);'#010+ ' end;'#010+ 'end;'#010+ #010+ - 'proced','ure TBuildEngine.AddPackageMacrosToDictionary(const APackage: '+ - 'TPackage; ADictionary: TDictionary);'#010+ + 'procedure TBuildEngine.AddPackageMacrosToDictionary(const APackage: TP'+ + 'ackage; ADictionary: TDictionary);'#010+ 'begin'#010+ - ' APackage.Dictionary.AddVariable('#039'UNITSOUTPUTDIR'#039',AddPathPref'+ - 'ix(APackage,APackage.GetUnitsOutputDir(Defaults.CPU,Defaults.OS)));'#010+ - ' APa','ckage.Dictionary.AddVariable('#039'BINOUTPUTDIR'#039',AddPathPref'+ - 'ix(APackage,APackage.GetBinOutputDir(Defaults.CPU,Defaults.OS)));'#010+ - ' APackage.Dictionary.AddVariable('#039'PACKAGEVERSION'#039',APackage.Ve'+ - 'rsion);'#010+ - ' APackage.Dictionary.AddVariable('#039'PACKAGEDIRECTO','RY'#039',APackag'+ - 'e.Directory);'#010+ + ' APackage.Dictionary.AddVariable('#039'UNITSOUT','PUTDIR'#039',AddPathPr'+ + 'efix(APackage,APackage.GetUnitsOutputDir(Defaults.CPU,Defaults.OS)));'#010+ + ' APackage.Dictionary.AddVariable('#039'BINOUTPUTDIR'#039',AddPathPrefix'+ + '(APackage,APackage.GetBinOutputDir(Defaults.CPU,Defaults.OS)));'#010+ + ' APackage.Dictionary.AddVa','riable('#039'PACKAGEVERSION'#039',APackage.'+ + 'Version);'#010+ + ' APackage.Dictionary.AddVariable('#039'PACKAGEDIRECTORY'#039',APackage.'+ + 'Directory);'#010+ ' APackage.Dictionary.AddVariable('#039'PackageName'#039',APackage.Name)'+ ';'#010+ 'end;'#010+ #010+ - 'Procedure TBuildEngine.ResolveFileNames(APackage : TPackage; ACPU:TCPU'+ - ';AOS:TOS;DoChangeDir:boolean=true; WarnIfNotFound:boolean=true);'#010+ + 'Procedure TBuildEngine.ResolveFileNames(APackage : TP','ackage; ACPU:TC'+ + 'PU;AOS:TOS;DoChangeDir:boolean=true; WarnIfNotFound:boolean=true);'#010+ #010+ - ' procedu','re FindMainSource(T:TTarget);'#010+ + ' procedure FindMainSource(T:TTarget);'#010+ ' var'#010+ ' SD,SF : String;'#010+ ' begin'#010+ ' LogSearchPath(APackage,'#039'package source'#039',APackage.SourcePat'+ 'h,ACPU,AOS);'#010+ - ' SD:=APackage.Dictionary.ReplaceStrings(T.Directory);'#010+ - ' SF:=APackage.Dictionary.ReplaceStrings(','T.SourceFileName);'#010+ + ' SD:=','APackage.Dictionary.ReplaceStrings(T.Directory);'#010+ + ' SF:=APackage.Dictionary.ReplaceStrings(T.SourceFileName);'#010+ ' if SD='#039#039' then'#010+ ' FindFileInPath(APackage,APackage.SourcePath,SF,SD,ACPU,AOS);'#010+ ' if SD<>'#039#039' then'#010+ - ' SD:=IncludeTrailingPathDelimiter(SD);'#010+ + ' SD:=IncludeTrailing','PathDelimiter(SD);'#010+ ' T.FTargetSourceFileName:=SD+SF;'#010+ - ' if FileExists(AddPathPrefix(APack','age,T.TargetSourceFileName)) th'+ - 'en'#010+ + ' if FileExists(AddPathPrefix(APackage,T.TargetSourceFileName)) then'+ + #010+ ' Log(vlDebug,SDbgResolvedSourceFile,[T.SourceFileName,T.TargetSou'+ 'rceFileName])'#010+ ' else'#010+ ' begin'#010+ - ' if WarnIfNotFound then'#010+ - ' Log(vlWarning,SWarnSourceFileNotFound,[T.SourceFileName,APac', + ' i','f WarnIfNotFound then'#010+ + ' Log(vlWarning,SWarnSourceFileNotFound,[T.SourceFileName,APac'+ 'kage.Name,MakeTargetString(ACPU,AOS)]);'#010+ ' APackage.FAllFilesResolved:=false;'#010+ ' T.FTargetSourceFileName:='#039#039';'#010+ ' end;'#010+ ' end;'#010+ #010+ - ' procedure FindIncludeSources(T:TTarget);'#010+ + ' procedu','re FindIncludeSources(T:TTarget);'#010+ ' var'#010+ ' SD,SF : String;'#010+ ' D : TDependency;'#010+ - ' j : in','teger;'#010+ + ' j : integer;'#010+ ' begin'#010+ ' LogSearchPath(APackage,'#039'target include'#039',T.IncludePath,ACPU'+ ',AOS);'#010+ ' LogSearchPath(APackage,'#039'package include'#039',APackage.IncludeP'+ - 'ath,ACPU,AOS);'#010+ + 'at','h,ACPU,AOS);'#010+ ' for j:=0 to T.Dependencies.Count-1 do'#010+ ' begin'#010+ - ' D:=T.Dependencies','[j];'#010+ + ' D:=T.Dependencies[j];'#010+ ' if (D.DependencyType=depInclude) then'#010+ ' begin'#010+ ' if D.TargetFileName<>'#039#039' then'#010+ - ' Log(vlDebug,SDbgSourceAlreadyResolved,[D.Value])'#010+ + ' Log(vlDebug,SDbgSourceAlre','adyResolved,[D.Value])'#010+ ' else if (ACPU in D.CPUs) and (AOS in D.OSes) then'#010+ - ' ',' begin'#010+ + ' begin'#010+ ' if ExtractFilePath(D.Value)='#039#039' then'#010+ ' begin'#010+ - ' SF:=APAckage.Dictionary.ReplaceStrings(D.Value);'#010+ + ' SF:=APAckage.Dictionary.ReplaceStrings(','D.Value);'+ + #010+ ' SD:='#039#039';'#010+ - ' // first check the target specific',' path'#010+ + ' // first check the target specific path'#010+ ' if not FindFileInPath(APackage, T.IncludePath,SF,S'+ 'D,ACPU,AOS) then'#010+ - ' FindFileInPath(APackage, APackage.IncludePath,SF'+ - ',SD,ACPU,AOS);'#010+ + ' FindFileInPath(APackage, APackage','.IncludePath,'+ + 'SF,SD,ACPU,AOS);'#010+ ' if SD<>'#039#039' then'#010+ - ' SD:','=IncludeTrailingPathDelimiter(SD);'#010+ + ' SD:=IncludeTrailingPathDelimiter(SD);'#010+ ' D.TargetFileName:=SD+SF;'#010+ ' end'#010+ ' else'#010+ - ' D.TargetFileName:=D.Value;'#010+ + ' D.Targ','etFileName:=D.Value;'#010+ ' if FileExists(AddPathPrefix(APackage,D.TargetFileName)'+ - ')',' then'#010+ + ') then'#010+ ' Log(vlDebug,SDbgResolvedIncludeFile,[D.Value,D.Targe'+ 'tFileName])'#010+ ' else'#010+ ' begin'#010+ - ' if WarnIfNotFound then'#010+ - ' Log(vlWarning,SWarnIncludeFileNotFound,[D.','Valu'+ - 'e, APackage.Name, MakeTargetString(ACPU,AOS)]);'#010+ + ' ',' if WarnIfNotFound then'#010+ + ' Log(vlWarning,SWarnIncludeFileNotFound,[D.Value,'+ + ' APackage.Name, MakeTargetString(ACPU,AOS)]);'#010+ ' APackage.FAllFilesResolved:=false;'#010+ - ' D.TargetFileName:='#039#039';'#010+ + ' D.TargetFileName:='#039#039';',#010+ ' end;'#010+ ' end;'#010+ ' end;'#010+ ' end;'#010+ ' end;'#010+ #010+ - ' procedure Fin','dExampleSource(T:TTarget);'#010+ + ' procedure FindExampleSource(T:TTarget);'#010+ ' var'#010+ ' SD,SF : String;'#010+ ' begin'#010+ ' LogSearchPath(APackage,'#039'package example'#039',APackage.ExampleP'+ 'ath,ACPU,AOS);'#010+ - ' SD:=APackage.Dictionary.ReplaceStrings(T.Directory);'#010+ - ' SF:=APackage.Dictionary.ReplaceStrings(T','.SourceFileName);'#010+ + ' SD:=A','Package.Dictionary.ReplaceStrings(T.Directory);'#010+ + ' SF:=APackage.Dictionary.ReplaceStrings(T.SourceFileName);'#010+ ' if SD='#039#039' then'#010+ ' FindFileInPath(APackage, APackage.ExamplePath,SF,SD,ACPU,AOS);'#010+ ' if SD<>'#039#039' then'#010+ - ' SD:=IncludeTrailingPathDelimiter(SD);'#010+ + ' SD:=IncludeTrailin','gPathDelimiter(SD);'#010+ ' T.FTargetSourceFileName:=SD+SF;'#010+ - ' if FileExists(AddPathPrefix(APac','kage,T.TargetSourceFileName)) th'+ - 'en'#010+ + ' if FileExists(AddPathPrefix(APackage,T.TargetSourceFileName)) then'+ + #010+ ' Log(vlDebug,SDbgResolvedSourceFile,[T.SourceFileName,T.TargetSou'+ 'rceFileName])'#010+ ' else'#010+ ' begin'#010+ - ' if WarnIfNotFound then'#010+ - ' Log(vlWarning,SWarnSourceFileNotFound,[T.SourceFileName, AP', - 'ackage.Name, MakeTargetString(ACPU,AOS)]);'#010+ + ' ','if WarnIfNotFound then'#010+ + ' Log(vlWarning,SWarnSourceFileNotFound,[T.SourceFileName, APa'+ + 'ckage.Name, MakeTargetString(ACPU,AOS)]);'#010+ ' T.FTargetSourceFileName:='#039#039';'#010+ ' APackage.FAllFilesResolved:=false;'#010+ ' end;'#010+ ' end;'#010+ #010+ 'var'#010+ - ' T : TTarget;'#010+ + ' ','T : TTarget;'#010+ ' i : Integer;'#010+ 'begin'#010+ - ' if not((ACPU in APackage.CPUs) and (AOS in APackage.OSes',')) then'#010+ + ' if not((ACPU in APackage.CPUs) and (AOS in APackage.OSes)) then'#010+ ' exit;'#010+ ' if APackage.FAllFilesResolved then'#010+ ' Exit;'#010+ ' APackage.FAllFilesResolved:=true;'#010+ ' try'#010+ - ' if DoChangeDir and (APackage.Directory<>'#039#039') then'#010+ + ' if DoChangeDir and (APackage.Director','y<>'#039#039') then'#010+ ' GPathPrefix := APackage.Directory;'#010+ - ' APackage.Dictionary.AddVariable('#039'CP','U'#039',CPUToString(ACPU))'+ - ';'#010+ + ' APackage.Dictionary.AddVariable('#039'CPU'#039',CPUToString(ACPU));'#010+ ' APackage.Dictionary.AddVariable('#039'OS'#039',OSToString(AOS));'#010+ ' For I:=0 to APackage.Targets.Count-1 do'#010+ ' begin'#010+ - ' T:=APackage.FTargets.TargetItems[I];'#010+ + ' T:','=APackage.FTargets.TargetItems[I];'#010+ ' if (ACPU in T.CPUs) and (AOS in T.OSes) then'#010+ - ' ',' begin'#010+ + ' begin'#010+ ' // Debug information'#010+ ' Log(vlDebug,SDbgResolvingSourcesOfTarget,[T.Name,MakeTarge'+ 'tString(ACPU,AOS)]);'#010+ - ' LogIndent;'#010+ + ' ','LogIndent;'#010+ #010+ ' case T.TargetType of'#010+ ' ttProgram,'#010+ - ' ttUnit,'#010, + ' ttSharedLibrary,'#010+ + ' ttUnit,'#010+ ' ttImplicitUnit :'#010+ ' begin'#010+ ' if T.FTargetSourceFileName<>'#039#039' then'#010+ - ' Log(vlDebug,SDbgSourceAlreadyResolved,[T.Name])'#010+ + ' ',' Log(vlDebug,SDbgSourceAlreadyResolved,[T.Name])'#010+ ' else'#010+ ' FindMainSource(T);'#010+ - ' ',' if T.Dependencies.Count>0 then'#010+ + ' if T.Dependencies.Count>0 then'#010+ ' FindIncludeSources(T);'#010+ ' end;'#010+ - ' ttExampleUnit,'#010+ + ' ',' ttExampleUnit,'#010+ ' ttExampleProgram :'#010+ ' begin'#010+ - ' if T.FTargetSourceFileName<>',#039#039' then'#010+ + ' if T.FTargetSourceFileName<>'#039#039' then'#010+ ' Log(vlDebug,SDbgSourceAlreadyResolved,[T.Name])'#010+ ' else'#010+ - ' FindExampleSource(T);'#010+ + ' ',' FindExampleSource(T);'#010+ ' end;'#010+ ' end;'#010+ #010+ ' LogUnIndent;'#010+ ' end;'#010+ ' end;'#010+ - ' finally',#010+ + ' finally'#010+ ' If DoChangeDir and (APackage.Directory<>'#039#039') then'#010+ ' GPathPrefix := '#039#039';'#010+ ' end;'#010+ 'end;'#010+ #010+ - 'procedure TBuildEngine.ClearResolvedFileNames(APackage: TPackage);'#010+ + 'procedure TBuildEngine.Cl','earResolvedFileNames(APackage: TPackage);'#010+ #010+ ' procedure ClearResolvedFileNamesForDependencies(ADependencies: TDepe'+ - 'ndencies);',#010+ + 'ndencies);'#010+ ' var'#010+ ' I: Integer;'#010+ ' D: TDependency;'#010+ ' begin'#010+ ' For I:=0 to ADependencies.Count-1 do'#010+ ' begin'#010+ - ' D := ADependencies[I];'#010+ + ' D := ','ADependencies[I];'#010+ ' D.TargetFileName:='#039#039';'#010+ ' end;'#010+ ' end;'#010+ @@ -6681,101 +7422,46 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' T : TTarget;'#010+ ' I : Integer;'#010+ 'begin'#010+ - ' APackage.FAllF','ilesResolved:=false;'#010+ + ' APackage.FAllFilesResolved:=false;'#010+ ' ClearResolvedFileNamesForDependencies(APackage.Dependencies);'#010+ - ' For I:=0 to APackage.Targets.Count-1 do'#010+ + ' For I:=0 to APackage.Targets.C','ount-1 do'#010+ ' begin'#010+ ' T:=APackage.FTargets.TargetItems[I];'#010+ ' T.FTargetSourceFileName:='#039#039';'#010+ - ' ClearResolvedFileNa','mesForDependencies(T.Dependencies);'#010+ + ' ClearResolvedFileNamesForDependencies(T.Dependencies);'#010+ ' end;'#010+ 'end;'#010+ #010+ #010+ 'procedure TBuildEngine.ResolvePackagePaths(APackage:TPackage);'#010+ #010+ - ' procedure ResolveUnitConfigFilenameForBasePath(ABasePath: string);'#010+ - ' var'#010+ - ' IsPackageSourceLocation: boolean;'#010+ - ' ASubDir',': string;'#010+ - ' AnUnitConfigFilename: string;'#010+ - ' PackageBaseDir: string;'#010+ - ' begin'#010+ - ' if APackage.State=tsNotFound then'#010+ - ' // When the state is tsNotFound, the package is not part of this'+ - ' fpmake, and only the package-name is known.'#010+ - ' /','/ In this case search for the package-name.'#010+ - ' // This is not right for packages where the package-name and dir'+ - 'ectory name of the source-files are'#010+ - ' // not the same. We don'#039't have a better option, though.'#010+ - ' ASubDir:=APackage.Name',#010+ - ' else'#010+ - ' ASubDir:=APackage.Directory;'#010+ - #010+ - ' IsPackageSourceLocation:=FileExists(IncludeTrailingPathDelimiter(I'+ - 'ncludeTrailingPathDelimiter(ABasePath)+ASubDir)+FPMakePPFile);'#010+ - ' if IsPackageSourceLocation then'#010+ - ' begin'#010+ - ' Packa','geBaseDir:=IncludeTrailingPathDelimiter(IncludeTrailing'+ - 'PathDelimiter(ABasePath)+ASubDir);'#010+ - ' AnUnitConfigFileName:=PackageBaseDir+APackage.GetUnitConfigOut'+ - 'putFilename(Defaults.CPU,Defaults.OS);'#010+ - ' PackageBaseDir:=IncludeTrailingPa','thDelimiter(PackageBaseDir+'+ - 'APackage.GetUnitsOutputDir(defaults.CPU, Defaults.OS));'#010+ - ' end'#010+ - ' else'#010+ - ' begin'#010+ - ' PackageBaseDir:=IncludeTrailingPathDelimiter(IncludeTrailingPa'+ - 'thDelimiter(ABasePath));'#010+ - ' AnUnitConfigFileName:=I','ncludeTrailingPathDelimiter(GetUnitCo'+ - 'nfigFilesInstallDir(ABasePath))+APackage.Name+FpmkExt;'#010+ - ' PackageBaseDir:=IncludeTrailingPathDelimiter(IncludeTrailingPa'+ - 'thDelimiter(ABasePath)+APackage.GetUnitsOutputDir(Defaults.CPU, Defaul'+ - 'ts.OS))+','APackage.Name;'#010+ - ' end;'#010+ - #010+ - ' if (PackageBaseDir<>'#039#039') and SysDirectoryExists(PackageBaseDi'+ - 'r) then'#010+ - ' begin'#010+ - ' APackage.UnitDir:=PackageBaseDir;'#010+ - ' if IsPackageSourceLocation then'#010+ - ' // Set the state to tsNoCompile and n','ot tsCompiled. Becaus'+ - 'e packages'#010+ - ' // in the tsCompiled state trigger a rebuild of packages tha'+ - 't depend'#010+ - ' // on it.'#010+ - ' APackage.FTargetState:=tsNoCompile'#010+ - ' else if not (APackage.FTargetState in [tsCompiled, tsNoC','ompi'+ - 'le]) then'#010+ - ' APackage.FTargetState:=tsInstalled;'#010+ - ' AnUnitConfigFilename:=APackage.Dictionary.ReplaceStrings(AnUni'+ - 'tConfigFilename);'#010+ - ' if FileExists(AnUnitConfigFilename) then'#010+ - ' APackage.UnitConfigFileName:=AnUn','itConfigFilename;'#010+ - ' end;'#010+ - ' end;'#010+ - #010+ + 'v','ar'#010+ + ' i: Integer;'#010+ + ' Continue: Boolean;'#010+ 'begin'#010+ ' if APackage.UnitDir='#039#039' then'#010+ ' begin'#010+ - ' // Retrieve Full directory name where to find the units.'#010+ - ' // The search order is:'#010+ - ' // - Package in this fpmake.pp'#010+ - ' // - LocalUnitDir'#010+ - ' ',' // - GlobalUnitDir'#010+ - ' if (APackage.State in [tsCompiled, tsNoCompile, tsInstalled]) th'+ - 'en'#010+ - ' ResolveUnitConfigFilenameForBasePath(FStartDir);'#010+ - ' if (APackage.UnitDir='#039#039') and'#010+ - ' (Defaults.LocalUnitDir<>'#039#039') then'#010+ - ' ','ResolveUnitConfigFilenameForBasePath(Defaults.LocalUnitDir);'+ + ' Log(vldebug, SDbgSearchExtDepPath, [APackage.Name]);'#010+ + ' GetPluginManager.BeforeResolvePackagePath(Self, APackage, Contin'+ + 'ue);'#010+ + ' if Continue then',#010+ + ' begin'#010+ + ' for I := 0 to Defaults.SearchPath.Count-1 do'#010+ + ' begin'#010+ + ' if Defaults.SearchPath[i]<>'#039#039' then'#010+ + ' GetPluginManager.ResolvePackagePath(Self, APackage, Defa'+ + 'ults.SearchPath[i], Continue);'#010+ + ' ',' if not Continue then'#010+ + ' Break'#010+ + ' end;'#010+ #010+ - ' if (APackage.UnitDir='#039#039') and'#010+ - ' (Defaults.GlobalUnitDir<>'#039#039') then'#010+ - ' ResolveUnitConfigFilenameForBasePath(Defaults.GlobalUnitDir);'#010+ + ' if Continue then'#010+ + ' GetPluginManager.AfterResolvePackagePath(Self, APackage, Con'+ + 'tinue);'#010+ + ' end;'#010+ #010+ - ' if (APackage.UnitDir='#039#039')',' then'#010+ - ' APackage.UnitDir:=DirNotFound;'#010+ + ' if APackage.UnitDir = '#039#039' then'#010+ + ' APackage.UnitDir :','= DirNotFound'#010+ ' end;'#010+ 'end;'#010+ #010+ @@ -6784,8 +7470,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'begin'#010+ ' ResolvePackagePaths(APackage);'#010+ ' // Special error marker to prevent searches in case of error'#010+ - ' if APackage.Uni','tDir=DirNotFound then'#010+ - ' Result:='#039#039#010+ + ' if APackage.UnitDir=DirNotFound then'#010+ + ' Resul','t:='#039#039#010+ ' else'#010+ ' Result:=APackage.UnitDir;'#010+ 'end;'#010+ @@ -6796,15 +7482,15 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'Var'#010+ ' I : Integer;'#010+ ' D : TDependency;'#010+ - ' SD : String;',#010+ + ' SD : String;'#010+ 'begin'#010+ - ' For I:=0 to ATarget.Dependencies.Count-1 do'#010+ + ' For I:=0 to ATarget.De','pendencies.Count-1 do'#010+ ' begin'#010+ ' D:=ATarget.Dependencies[i];'#010+ ' if (D.DependencyType=DependencyType) and'#010+ ' (Defaults.CPU in D.CPUs) and (Defaults.OS in D.OSes) then'#010+ ' begin'#010+ - ' SD:=E','xcludeTrailingPathDelimiter(ExtractFilePath(D.TargetF'+ + ' SD:=ExcludeTrailingPathDelimiter(Ext','ractFilePath(D.TargetF'+ 'ileName));'#010+ ' if SD<>'#039#039' then'#010+ ' L.Add(SD);'#010+ @@ -6817,24 +7503,24 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'ckage);'#010+ 'Var'#010+ ' I : Integer;'#010+ - ' ','P : TPackage;'#010+ - ' D : TDependency;'#010+ + ' P : TPackage;'#010+ + ' D : TDependency',';'#010+ ' S : String;'#010+ 'begin'#010+ ' For I:=0 to APackage.Dependencies.Count-1 do'#010+ ' begin'#010+ ' D:=APackage.Dependencies[i];'#010+ ' if (D.DependencyType=depPackage) and'#010+ - ' (Defaults.CPU in D.CPUs) and (Defaults.OS i','n D.OSes) then'#010+ + ' (Defaults.CPU in D.CPUs) and (Defaults.OS in D.OSes) then'#010+ ' begin'#010+ - ' P:=TPackage(D.Target);'#010+ + ' ',' P:=TPackage(D.Target);'#010+ ' If Assigned(P) then'#010+ ' begin'#010+ ' // Already processed?'#010+ ' S:=GetUnitDir(P);'#010+ ' if L.IndexOf(S)=-1 then'#010+ ' begin'#010+ - ' ',' // Add this package and then dependencies'#010+ + ' // Add this pac','kage and then dependencies'#010+ ' L.Add(S);'#010+ ' AddDependencyUnitPaths(L,P);'#010+ ' end;'#010+ @@ -6843,27 +7529,78 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' end;'#010+ 'end;'#010+ #010+ - 'function TBuildEngine.AddPathPrefix(APack','age: TPackage; APath: strin'+ - 'g): string;'#010+ + '{$ifdef NO_THREADING}'#010+ + 'var'#010+ + '{$else NO_THREADING}'#010+ + 'threadvar'#010+ + '{$endif NO_THRE','ADING}'#010+ + ' GHandledRecursiveDependencies: TStrings;'#010+ + #010+ + 'procedure TBuildEngine.AddDependencyTransmittedOptions(Args: TStrings;'+ + ' APackage: TPackage);'#010+ + 'Var'#010+ + ' I, J : Integer;'#010+ + ' P : TPackage;'#010+ + ' D : TDependency;'#010+ + ' S : String;'#010+ + ' IsRootLevel: Boolean;'#010+ + 'be','gin'#010+ + ' if not Assigned(GHandledRecursiveDependencies) then'#010+ + ' begin'#010+ + ' GHandledRecursiveDependencies := TStringList.Create;'#010+ + ' IsRootLevel := True;'#010+ + ' end'#010+ + ' else'#010+ + ' IsRootLevel := False;'#010+ + #010+ + ' try'#010+ + ' For I:=0 to APackage.Dependencies.','Count-1 do'#010+ + ' begin'#010+ + ' D:=APackage.Dependencies[i];'#010+ + ' if (D.DependencyType=depPackage) and'#010+ + ' (Defaults.CPU in D.CPUs) and (Defaults.OS in D.OSes) then'#010+ + ' begin'#010+ + ' P:=TPackage(D.Target);'#010+ + ' If ','Assigned(P) then'#010+ + ' begin'#010+ + ' // Already processed?'#010+ + ' if GHandledRecursiveDependencies.IndexOf(P.Name)=-1 th'+ + 'en'#010+ + ' begin'#010+ + ' GHandledRecursiveDependencies.Add(P.Name);'#010+ + ' ',' AddDependencyTransmittedOptions(Args,P);'#010+ + ' Args.AddStrings(P.TransmitOptions);'#010+ + ' end;'#010+ + ' end;'#010+ + ' end;'#010+ + ' end;'#010+ + ' finally'#010+ + ' if IsRootLevel then'#010+ + ' FreeAndNil(GHandledR','ecursiveDependencies);'#010+ + ' end;'#010+ + 'end;'#010+ + #010+ + 'function TBuildEngine.AddPathPrefix(APackage: TPackage; APath: string)'+ + ': string;'#010+ 'begin'#010+ ' if IsRelativePath(APath) and (GPathPrefix<>'#039#039') then'#010+ - ' result := IncludeTrailingPathDelimiter(GPathPrefix) + APath'#010+ + ' result := IncludeTrailingPathDelimiter(GPathPrefix) + APath'#010, ' else'#010+ ' result := APath;'#010+ 'end;'#010+ #010+ #010+ - 'Function TBuildEngine.GetCompilerCommand(A','Package : TPackage; ATarge'+ - 't : TTarget; Env: TStrings) : String;'#010+ + 'Function TBuildEngine.GetCompilerCommand(APackage : TPackage; ATarget '+ + ': TTarget; Env: TStrings) : String;'#010+ 'Var'#010+ ' L : TUnsortedDuplicatesStringList;'#010+ ' Args : TStringList;'#010+ ' s : string;'#010+ ' ErrS: string;'#010+ - ' i : Integer;'#010+ + ' i : ','Integer;'#010+ 'begin'#010+ ' if ATarget.TargetSourceFileName = '#039#039' then'#010+ - ' Error(SErrCoul','dNotCompile,[ATarget.Name, APackage.Name]);'#010+ + ' Error(SErrCouldNotCompile,[ATarget.Name, APackage.Name]);'#010+ #010+ ' Args:=TStringList.Create;'#010+ ' Args.Duplicates:=dupIgnore;'#010+ @@ -6871,99 +7608,102 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Result := '#039#039';'#010+ #010+ ' //compiler configuration'#010+ - ' if Defaults.NoFPCCfg then'#010+ + ' if Defaults.N','oFPCCfg then'#010+ ' Args.Add('#039'-n'#039');'#010+ #010+ ' // Target OS'#010+ - ' Args.Add('#039'-T'#039'+OSToString(D','efaults.OS));'#010+ + ' Args.Add('#039'-T'#039'+OSToString(Defaults.OS));'#010+ #010+ ' // Target CPU.'#010+ ' // This setting is only applicable when '#039'fpc'#039' is used as com'+ 'piler-executable.'#010+ ' if ExtractFileName(GetCompiler) = '#039'fpc'#039' then'#010+ - ' Args.Add('#039'-P'#039'+CPUToString(Defaults.CPU));'#010+ + ' ','Args.Add('#039'-P'#039'+CPUToString(Defaults.CPU));'#010+ #010+ ' // Compile mode'#010+ - ' If ATarget.Mod','e<>cmFPC then'#010+ + ' If ATarget.Mode<>cmFPC then'#010+ ' Args.Add('#039'-M'#039'+ModeToString(ATarget.Mode))'#010+ ' else If Defaults.Mode<>cmFPC then'#010+ ' Args.Add('#039'-M'#039'+ModeToString(Defaults.Mode));'#010+ - ' // Output file paths'#010+ + ' // Output file pa','ths'#010+ ' If ATarget.TargetType in ProgramTargets then'#010+ - ' Args.Add('#039'-FE'#039'+AddPath','Prefix(APackage,APackage.GetBinOut'+ - 'putDir(Defaults.CPU,Defaults.OS)));'#010+ - ' Args.Add('#039'-FU'#039'+AddPathPrefix(APackage,APackage.GetUnitsOutpu'+ + ' Args.Add('#039'-FE'#039'+AddPathPrefix(APackage,APackage.GetBinOutpu'+ 'tDir(Defaults.CPU,Defaults.OS)));'#010+ + ' Args.Add('#039'-FU'#039'+AddPathPrefix(APackage,APackage.GetUnitsOutpu'+ + 'tDir(Defaults.CPU,Defaults.OS))',');'#010+ ' // Object Path'#010+ ' L:=TUnsortedDuplicatesStringList.Create;'#010+ - ' L.Duplicates',':=dupIgnore;'#010+ + ' L.Duplicates:=dupIgnore;'#010+ ' AddConditionalStrings(APackage, L,APackage.ObjectPath,Defaults.CPU,D'+ 'efaults.OS);'#010+ - ' AddConditionalStrings(APackage, L,ATarget.ObjectPath,Defaults.CPU,De'+ - 'faults.OS);'#010+ + ' AddConditionalStrings(APackage, L,ATarget.ObjectPath,Defaults.CPU',','+ + 'Defaults.OS);'#010+ ' for i:=0 to L.Count-1 do'#010+ - ' Args.Add('#039'-Fo'#039'+AddPathPrefix(AP','ackage,L[i]));'#010+ + ' Args.Add('#039'-Fo'#039'+AddPathPrefix(APackage,L[i]));'#010+ ' FreeAndNil(L);'#010+ ' // Unit Dirs'#010+ ' L:=TUnsortedDuplicatesStringList.Create;'#010+ ' L.Duplicates:=dupIgnore;'#010+ ' AddDependencyUnitPaths(L,APackage);'#010+ - ' AddDependencyPaths(L,depUnit,ATarget);'#010+ - ' AddConditionalStrings(APackage, L,APackage','.UnitPath,Defaults.CPU,D'+ - 'efaults.OS);'#010+ + ' AddDep','endencyPaths(L,depUnit,ATarget);'#010+ + ' AddConditionalStrings(APackage, L,APackage.UnitPath,Defaults.CPU,Def'+ + 'aults.OS);'#010+ ' AddConditionalStrings(APackage, L,ATarget.UnitPath,Defaults.CPU,Defa'+ 'ults.OS);'#010+ ' for i:=0 to L.Count-1 do'#010+ - ' Args.Add('#039'-Fu'#039'+AddPathPrefix(APackage,L[i]));'#010+ + ' Args.Add('#039'-Fu'#039'+','AddPathPrefix(APackage,L[i]));'#010+ ' FreeAndNil(L);'#010+ ' // Include Path'#010+ - ' L:=TUnsor','tedDuplicatesStringList.Create;'#010+ + ' L:=TUnsortedDuplicatesStringList.Create;'#010+ ' L.Duplicates:=dupIgnore;'#010+ ' AddDependencyPaths(L,depInclude,ATarget);'#010+ - ' AddConditionalStrings(APackage, L,APackage.IncludePath,Defaults.CPU,'+ - 'Defaults.OS);'#010+ - ' AddConditionalStrings(APackage, L,ATarget.IncludePa','th,Defaults.CPU'+ - ',Defaults.OS);'#010+ + ' AddConditionalStrings(APackage, L,APackage.IncludePath,Def','aults.CP'+ + 'U,Defaults.OS);'#010+ + ' AddConditionalStrings(APackage, L,ATarget.IncludePath,Defaults.CPU,D'+ + 'efaults.OS);'#010+ ' for i:=0 to L.Count-1 do'#010+ ' Args.Add('#039'-Fi'#039'+AddPathPrefix(APackage,L[i]));'#010+ ' FreeAndNil(L);'#010+ #010+ ' // libc-linker path'#010+ - ' if APackage.NeedLibC then'#010+ + ' if APackage.Ne','edLibC then'#010+ ' begin'#010+ ' if FCachedlibcPath='#039#039' then'#010+ ' begin'#010+ - ' s:=Get','DefaultLibGCCDir(Defaults.CPU, Defaults.OS,ErrS);'#010+ + ' s:=GetDefaultLibGCCDir(Defaults.CPU, Defaults.OS,ErrS);'#010+ ' if s='#039#039' then'#010+ ' Log(vlWarning, SWarngcclibpath +'#039' '#039'+ErrS)'#010+ ' else'#010+ ' begin'#010+ - '{$ifndef NO_THREADING}'#010+ + '{$ifndef NO_THREADI','NG}'#010+ ' EnterCriticalsection(FGeneralCriticalSection);'#010+ ' try'#010+ - '{$endi','f NO_THREADING}'#010+ + '{$endif NO_THREADING}'#010+ ' FCachedlibcPath:=s;'#010+ '{$ifndef NO_THREADING}'#010+ ' finally'#010+ ' LeaveCriticalsection(FGeneralCriticalSection);'#010+ ' end;'#010+ - '{$endif NO_THREADING}'#010+ + '{$endif ','NO_THREADING}'#010+ ' end;'#010+ ' end;'#010+ #010+ ' Args.Add('#039'-Fl'#039'+FCachedlibcPath);'#010+ - ' ',' end;'#010+ + ' end;'#010+ + #010+ + ' // Custom options which are added by dependencies'#010+ + ' AddDependencyTransmittedOptions(Args, APackage);'#010+ #010+ ' // Custom Options'#010+ - ' If (Defaults.HaveOptions) then'#010+ + ' If (Defaults.HaveOptions) th','en'#010+ ' Args.AddStrings(Defaults.Options);'#010+ #010+ ' APackage.ApplyPackageVariantToCompilerOptions(Args);'#010+ #010+ ' If (APackage.HaveOptions) then'#010+ ' Args.AddStrings(APackage.Options);'#010+ - ' If (ATar','get.HaveOptions) then'#010+ - ' Args.AddStrings(ATarget.Options);'#010+ + ' If (ATarget.HaveOptions) then'#010+ + ' Args.AddStrings(ATarget.Options);',#010+ #010+ ' {$ifdef HAS_UNIT_PROCESS}'#010+ ' // Force the compiler-output to be easy parseable'#010+ @@ -6973,25 +7713,25 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ ' // Convert to string'#010+ ' Result:='#039#039';'#010+ - ' for ','i:=0 to Args.Count-1 do'#010+ - ' Result:=Result+'#039' '#039'+maybequoted(APackage.Dictionary.Replace'+ - 'Strings(Args[i]));'#010+ + ' for i:=0 to Args.Count-1 do'#010+ + ' Result:=Result+'#039' '#039'+maybequoted(','APackage.Dictionary.Repla'+ + 'ceStrings(Args[i]));'#010+ ' Delete(result,1,1);'#010+ #010+ ' if Defaults.UseEnvironment and assigned(Env) then'#010+ ' begin'#010+ ' env.Values['#039'FPCEXTCMD'#039'] := Result;'#010+ - ' res','ult := '#039'!FPCEXTCMD'#039';'#010+ - ' // Make sure that this process'#039' environment variables are pa'+ - 'ssed to the'#010+ + ' result := '#039'!FPCEXTCMD'#039';'#010+ + ' // Make sure that this process'#039' ','environment variables are '+ + 'passed to the'#010+ ' // compiler'#039's environment'#010+ ' for i := 0 to GetEnvironmentVariableCount-1 do'#010+ ' env.Add(GetEnvironmentString(i));'#010+ ' end;'#010+ #010+ - ' //',' Add Filename to compile'#010+ - ' result := result + '#039' '#039' + AddPathPrefix(APackage,ATarget.Targ'+ - 'etSourceFileName);'#010+ + ' // Add Filename to compile'#010+ + ' result := result + '#039' '#039' + AddPath','Prefix(APackage,ATarget.Ta'+ + 'rgetSourceFileName);'#010+ #010+ ' Args.Free;'#010+ 'end;'#010+ @@ -7002,46 +7742,46 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' S : String;'#010+ 'begin'#010+ ' // Cache in FCompiler for speed.'#010+ - ' If (FCom','piler='#039#039') then'#010+ + ' If (FCompiler='#039#039') then'#010+ ' begin'#010+ - ' FCompiler:=Defaults.Compiler;'#010+ + ' FCompiler:=Defaults.Compiler;'#010, ' If (ExtractFilePath(FCompiler)='#039#039') then'#010+ ' begin'#010+ ' S:=ExeSearch(FCompiler,SysUtils.GetEnvironmentVariable('#039'PATH'+ #039'));'#010+ ' If (S<>'#039#039') then'#010+ ' FCompiler:=S;'#010+ - ' end',';'#010+ + ' end;'#010+ ' end;'#010+ ' Result:=FCompiler;'#010+ 'end;'#010+ #010+ #010+ - 'procedure TBuildEngine.CreateOutputDir(APackage: TPackage);'#010+ + 'procedure TBuildEngi','ne.CreateOutputDir(APackage: TPackage);'#010+ 'Var'#010+ ' D : String;'#010+ ' i: integer;'#010+ 'begin'#010+ ' //create a units directory'#010+ ' D:=AddPathPrefix(APackage,APackage.GetUnitsOutputDir(Defaults.CPU,De'+ - 'faul','ts.OS));'#010+ + 'faults.OS));'#010+ ' If not SysDirectoryExists(D) then'#010+ ' begin'#010+ - ' Log(vlInfo,SInfoCreatingOutputDir,[D]);'#010+ + ' ',' Log(vlInfo,SInfoCreatingOutputDir,[D]);'#010+ ' CmdCreateDir(D);'#010+ ' end;'#010+ #010+ ' //also create a bin directory for programtargets'#010+ ' For i := 0 to Pred(APackage.Targets.Count) do'#010+ - ' beg','in'#010+ - ' if APackage.Targets.TargetItems[i].TargetType in (ProgramTargets'+ - '-[ttExampleProgram]) then'#010+ + ' begin'#010+ + ' if APackage.Targets.TargetItems[i].TargetType in (','ProgramTarge'+ + 'ts-[ttExampleProgram]) then'#010+ ' begin'#010+ ' D:=AddPathPrefix(APackage,APackage.GetBinOutputDir(Defaults.'+ 'CPU,Defaults.OS));'#010+ - ' If not SysDirectoryExists(D)',' then'#010+ + ' If not SysDirectoryExists(D) then'#010+ ' begin'#010+ - ' Log(vlInfo,SInfoCreatingOutputDir,[D]);'#010+ + ' Log(vlInfo,SInfoCreat','ingOutputDir,[D]);'#010+ ' CmdCreateDir(D);'#010+ ' end;'#010+ ' //do not continue loop, directory is made anyway'#010+ @@ -7051,26 +7791,26 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'Function ','TBuildEngine.DependencyOK(ADependency : TDependency) : Bool'+ - 'ean;'#010+ + 'Function TBuildEngine.DependencyOK(ADependency : TDependency) : Bool','e'+ + 'an;'#010+ 'begin'#010+ ' Result:=(Defaults.CPU in ADependency.CPUs) and (Defaults.OS in ADepe'+ 'ndency.OSes);'#010+ 'end;'#010+ #010+ 'function TBuildEngine.TargetOK(ATarget: TTarget; ACPU: TCPU; AOS: TOS)'+ - ': Boolean;',#010+ + ': Boolean;'#010+ 'begin'#010+ ' if Defaults.SkipCrossPrograms and'#010+ - ' (ATarget.TargetType in ProgramTargets) and'#010+ + ' (ATarget.Ta','rgetType in ProgramTargets) and'#010+ ' IsDifferentFromBuild(ACPU, AOS) then'#010+ ' result := False'#010+ ' else'#010+ ' Result:=(ACPU in ATarget.CPUs) and (AOS in ATarget.OSes);'#010+ 'end;'#010+ #010+ - 'function TBu','ildEngine.TargetInstallOK(ATarget: TTarget; ACPU: TCPU; '+ - 'AOS: TOS): Boolean;'#010+ + 'function TBuildEngine.TargetInstallOK(ATarget: TTarget; ACPU: TCPU; AO'+ + 'S',': TOS): Boolean;'#010+ 'begin'#010+ ' result := TargetOK(ATarget, ACPU, AOS) and ATarget.Install;'#010+ 'end;'#010+ @@ -7078,8 +7818,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'Function TBuildEngine.PackageOK(APackage : TPackage) : Boolean;'#010+ 'begin'#010+ - ' Result:=(Defaults','.CPU in APackage.CPUs) and (Defaults.OS in APacka'+ - 'ge.OSes);'#010+ + ' Result:=(Defaults.CPU in APackage.CPUs) and (Defaults.OS in APackage'+ + '.OSes);'#010, 'end;'#010+ #010+ #010+ @@ -7087,22 +7827,22 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'begin'#010+ ' ExecuteCommands(APackage.Commands,caBeforeCompile);'#010+ ' If Assigned(APackage.BeforeCompile) then'#010+ - ' APackag','e.BeforeCompile(APackage);'#010+ - ' If Assigned(APackage.BeforeCompileProc) then'#010+ + ' APackage.BeforeCompile(APackage);'#010+ + ' If Assigned(APackage.BeforeCom','pileProc) then'#010+ ' APackage.BeforeCompileProc(APackage);'#010+ ' // It could be that files that weren'#039't found before are availabl'+ 'e now.'#010+ - ' ResolveFileNames(APackage,Defaults.CPU,Defaults.O','S,false,true);'#010+ + ' ResolveFileNames(APackage,Defaults.CPU,Defaults.OS,false,true);'#010+ 'end;'#010+ #010+ #010+ - 'procedure TBuildEngine.DoAfterCompile(APackage: TPackage);'#010+ + 'procedure TBuildEngine.DoAfterCompile','(APackage: TPackage);'#010+ 'begin'#010+ ' If Assigned(APackage.AfterCompile) then'#010+ ' APackage.AfterCompile(APackage);'#010+ ' If Assigned(APackage.AfterCompileProc) then'#010+ - ' APackage.AfterCompilePro','c(APackage);'#010+ - ' ExecuteCommands(APackage.Commands,caAfterCompile);'#010+ + ' APackage.AfterCompileProc(APackage);'#010+ + ' ExecuteCommands(APackage.Commands,caAfterCom','pile);'#010+ 'end;'#010+ #010+ #010+ @@ -7113,11 +7853,11 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' D : TDependency;'#010+ ' T : TTarget;'#010+ ' OD,OFN,TFN : String;'#010+ - ' CompileR','eason: String;'#010+ + ' CompileReason: String;'#010+ 'begin'#010+ ' Result:=False;'#010+ #010+ - ' // Forced recompile?'#010+ + ' // Forced recompil','e?'#010+ ' if FForceCompile then'#010+ ' begin'#010+ ' Result:=true;'#010+ @@ -7125,39 +7865,39 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' end;'#010+ #010+ ' // For now examples are not compiled at all'#010+ - ' if ATarget.TargetType in [ttEx','ampleUnit, ttExampleProgram] then'#010+ + ' if ATarget.TargetType in [ttExampleUnit, ttExampleProgram] then'#010+ ' Exit;'#010+ #010+ - ' // Files which should not be compiled on this target can not trigger'+ - ' a compile.'#010+ + ' // Files whi','ch should not be compiled on this target can not trigg'+ + 'er a compile.'#010+ ' if not TargetOK(ATarget, Defaults.CPU, Defaults.OS) then'#010+ ' Exit;'#010+ #010+ ' // Check output file'#010+ - ' if not result then',#010+ + ' if not result then'#010+ ' begin'#010+ - ' if ATarget.TargetType in ProgramTargets then'#010+ + ' if ATarget.TargetType in ProgramTargets th','en'#010+ ' OD:=APackage.GetBinOutputDir(Defaults.CPU,Defaults.OS)'#010+ ' else'#010+ ' OD:=APackage.GetUnitsOutputDir(Defaults.CPU,Defaults.OS);'#010+ ' If (OD<>'#039#039') then'#010+ - ' OD:=Inc','ludeTrailingPathDelimiter(OD);'#010+ - ' OFN:=AddPathPrefix(APackage, OD+ATarget.GetOutPutFileName(Defaul'+ - 'ts.OS));'#010+ + ' OD:=IncludeTrailingPathDelimiter(OD);'#010+ + ' OFN:=AddPathPrefix(APa','ckage, OD+ATarget.GetOutPutFileName(Defa'+ + 'ults.OS));'#010+ ' Result:=Not FileExists(OFN);'#010+ ' if Result then'#010+ ' begin'#010+ ' CompileReason:=SDbgOutputDoesNotExist;'#010+ - ' Log(v','lDebug,SDbgOutputNotYetAvailable,[OFN]);'#010+ + ' Log(vlDebug,SDbgOutputNotYetAvailable,[OFN]);'#010+ ' end;'#010+ - ' end;'#010+ + ' e','nd;'#010+ #010+ ' // Check main source, only if the TargetSourceFileName is found'#010+ ' If not Result and (ATarget.TargetSourceFileName<>'#039#039') then'#010+ ' begin'#010+ - ' TFN := AddPathPrefix(APackage,ATar','get.TargetSourceFileName);'#010+ + ' TFN := AddPathPrefix(APackage,ATarget.TargetSourceFileName);'#010+ ' if FileExists(TFN) then'#010+ - ' Result:=FileNewer(TFN,OFN);'#010+ + ' ',' Result:=FileNewer(TFN,OFN);'#010+ ' if Result then'#010+ ' CompileReason:=SDbgNewerSource;'#010+ ' end;'#010+ @@ -7165,60 +7905,60 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' // Check unit and include dependencies'#010+ ' If not Result then'#010+ ' begin'#010+ - ' ',' ResolveDependencies(ATarget.Dependencies,ATarget.Collection as'+ + ' ResolveDependencies(ATarget.Dependencies,ATarget.Collecti','on as'+ ' TTargets);'#010+ ' I:=0;'#010+ ' for i:=0 to ATarget.Dependencies.Count-1 do'#010+ ' begin'#010+ ' D:=ATarget.Dependencies[i];'#010+ - ' if (Defaults.CPU in D.CPUs) and (Default','s.OS in D.OSes) th'+ - 'en'#010+ + ' if (Defaults.CPU in D.CPUs) and (Defaults.OS in D.OSes) then'+ + #010+ ' begin'#010+ - ' case D.DependencyType of'#010+ + ' case D','.DependencyType of'#010+ ' depUnit :'#010+ ' begin'#010+ ' T:=TTarget(D.Target);'#010+ ' If (T=Nil) then'#010+ - ' Error(SErrDe','pUnknownTarget,[D.Value, ATarget.N'+ - 'ame, APackage.Name]);'#010+ - ' // If a dependent package is compiled we always ne'+ - 'ed to recompile'#010+ + ' Error(SErrDepUnknownTarget,[D.Value, ATarget.Nam'+ + 'e, APackage.Name]);'#010+ + ' ',' // If a dependent package is compiled we always '+ + 'need to recompile'#010+ ' Log(vldebug, SDbgDependencyOnUnit, [ATarget.Name,T'+ '.Name]);'#010+ - ' ',' Result:=(T.State=tsCompiled);'#010+ - ' if Result then'#010+ + ' Result:=(T.State=tsCompiled);'#010+ + ' if Resul','t then'#010+ ' begin'#010+ ' Log(vldebug, SDbgDependencyUnitRecompiled, [T.Na'+ 'me]);'#010+ - ' CompileReason:=Format(SDbgDependencyRecompiled,[', + ' CompileReason:=Format(SDbgDependencyRecompiled,['+ 'T.Name]);'#010+ ' end;'#010+ - ' end;'#010+ + ' end;',#010+ ' depInclude :'#010+ ' begin'#010+ ' if D.TargetFileName<>'#039#039' then'#010+ ' begin'#010+ - ' TFN:=AddPathPrefix(APackag','e,D.TargetFileName'+ - ');'#010+ - ' Result:=FileNewer(TFN,OFN);'#010+ + ' TFN:=AddPathPrefix(APackage,D.TargetFileName);'+ + #010+ + ' Result:=FileNe','wer(TFN,OFN);'#010+ ' if result then'#010+ ' CompileReason:=Format(SDbgNewerInclude,[D.Ta'+ 'rgetFileName]);'#010+ ' end;'#010+ - ' ',' end;'#010+ + ' end;'#010+ ' depPackage :'#010+ - ' begin'#010+ + ' begi','n'#010+ ' log(vlWarning,SWarnTargetDependsOnPackage,[ATarget'+ '.Name, APackage.Name, d.Value]);'#010+ ' end;'#010+ ' end;'#010+ ' if result then'#010+ - ' ',' break;'#010+ + ' break;'#010+ ' end;'#010+ ' end;'#010+ ' end;'#010+ #010+ - ' if result then'#010+ + ' ',' if result then'#010+ ' Log(vlDebug,SDbgMustCompile,[ATarget.Name, CompileReason]);'#010+ 'end;'#010+ #010+ @@ -7226,40 +7966,40 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'procedure TBuildEngine.Compile(APackage: TPackage; ATarget: TTarget);'#010+ 'Var'#010+ ' S : String;'#010+ - ' Env ',': TStrings;'#010+ + ' Env : TStrings;'#010+ 'begin'#010+ - ' Log(vlInfo,SInfoCompilingTarget,[ATarget.Name]);'#010+ + ' Log(vlInfo,SInfoCompilingTarget,[ATarge','t.Name]);'#010+ ' LogIndent;'#010+ ' ExecuteCommands(ATarget.Commands,caBeforeCompile);'#010+ ' If Assigned(ATarget.BeforeCompile) then'#010+ ' ATarget.BeforeCompile(ATarget);'#010+ #010+ - ' if (APackage.BuildMode=b','mBuildUnit) and not (ATarget.TargetType in'+ - ' [ttProgram,ttExampleProgram]) then'#010+ + ' if (APackage.BuildMode=bmBuildUnit) and not (ATarget.TargetType in ['+ + 'ttProgram,ttSha','redLibrary,ttExampleProgram]) then'#010+ ' begin'#010+ ' APackage.FBUTarget.Dependencies.AddUnit(ATarget.Name).FTargetFil'+ 'eName:=ATarget.TargetSourceFileName;'#010+ ' end'#010+ ' else'#010+ ' begin'#010+ - ' if Defaults.Us','eEnvironment then'#010+ + ' if Defaults.UseEnvironment then'#010+ ' begin'#010+ - ' Env := TStringList.Create;'#010+ + ' E','nv := TStringList.Create;'#010+ ' try'#010+ ' S:=GetCompilerCommand(APackage,ATarget,Env);'#010+ ' ExecuteCommand(GetCompiler,S,Env);'#010+ ' finally'#010+ ' Env.Free;'#010+ - ' end',';'#010+ + ' end;'#010+ ' end'#010+ ' else'#010+ ' begin'#010+ - ' S:=GetCompilerCommand(APackage,ATarget,Env);'#010+ + ' ',' S:=GetCompilerCommand(APackage,ATarget,Env);'#010+ ' ExecuteCommand(GetCompiler,S,nil);'#010+ ' end;'#010+ ' If Assigned(ATarget.AfterCompile) then'#010+ ' ATarget.AfterCompile(ATarget);'#010+ - ' ',' ExecuteCommands(ATarget.Commands,caAfterCompile);'#010+ + ' ExecuteCommands(ATarget.Commands,caAfterC','ompile);'#010+ ' end;'#010+ ' LogUnIndent;'#010+ 'end;'#010+ @@ -7272,40 +8012,40 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' T : TTarget;'#010+ ' D : TDependency;'#010+ 'begin'#010+ - ' Log(vlDebug, Fo','rmat(SDbgCompilingDependenciesOfTarget, [ATarget.Na'+ + ' Log(vlDebug, Format(SDbgCompilingDependenciesOfTarget, [AT','arget.Na'+ 'me]));'#010+ ' LogIndent;'#010+ ' For I:=0 to ATarget.Dependencies.Count-1 do'#010+ ' begin'#010+ ' D:=ATarget.Dependencies[i];'#010+ ' if (D.DependencyType=depPackage) then'#010+ - ' log(vlWarning,SWarnTargetDe','pendsOnPackage,[ATarget.Name, APa'+ - 'ckage.Name, d.Value])'#010+ + ' log(vlWarning,SWarnTargetDependsOnPackage,[ATarget.Name, APack'+ + 'age.Name',', d.Value])'#010+ ' else if (D.DependencyType=depUnit) and'#010+ ' (Defaults.CPU in D.CPUs) and (Defaults.OS in D.OSes) then'#010+ ' begin'#010+ ' T:=TTarget(D.Target);'#010+ - ' if Assigned(T) an','d (T<>ATarget) then'#010+ + ' if Assigned(T) and (T<>ATarget) then'#010+ ' begin'#010+ - ' if TargetOK(T, Defaults.CPU, Defaults.OS) then'#010+ + ' ',' if TargetOK(T, Defaults.CPU, Defaults.OS) then'#010+ ' begin'#010+ ' // We don'#039't need to compile implicit units, they'+ ' are only'#010+ - ' // used for dependency ch','ecking'#010+ - ' if (T.TargetType<>ttImplicitUnit) then'#010+ + ' // used for dependency checking'#010+ + ' if (T.TargetType<>','ttImplicitUnit) then'#010+ ' begin'#010+ ' case T.State of'#010+ ' tsNeutral :'#010+ ' MaybeCompile(APackage,T);'#010+ - ' ','tsConsidering :'#010+ - ' Log(vlWarning,SWarnCircularTargetDependency,'+ - '[ATarget.Name,T.Name]);'#010+ + ' tsConsidering :'#010+ + ' L','og(vlWarning,SWarnCircularTargetDependenc'+ + 'y,[ATarget.Name,T.Name]);'#010+ ' end;'#010+ ' end;'#010+ ' end'#010+ ' else'#010+ - ' Log(vlWarning, Format(S','WarnDepUnitNotFound, [T.Name,'+ - ' MakeTargetString(Defaults.CPU,Defaults.OS)]));'#010+ + ' Log(vlWarning, Format(SWarnDepUnitNotFound, [T.Name, M'+ + 'akeTargetStr','ing(Defaults.CPU,Defaults.OS)]));'#010+ ' end'#010+ ' else'#010+ ' Error(SErrDepUnknownTarget,[D.Value, ATarget.Name, APackag'+ @@ -7316,23 +8056,23 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'procedur','e TBuildEngine.MaybeCompile(APackage: TPackage; ATarget: TTa'+ + 'procedure TBuildEngine.MaybeCompile(APackage: TPack','age; ATarget: TTa'+ 'rget);'#010+ 'begin'#010+ ' if ATarget.State<>tsNeutral then'#010+ ' Error(SErrInvalidState,[ATarget.Name]);'#010+ ' Log(vlDebug, Format(SDbgConsideringTarget, [ATarget.Name]));'#010+ ' LogIndent;'#010+ - ' ATarget.FT','argetState:=tsConsidering;'#010+ - ' ResolveDependencies(ATarget.Dependencies,ATarget.Collection as TTarg'+ - 'ets);'#010+ + ' ATarget.FTargetState:=tsConsidering;'#010+ + ' ResolveDepende','ncies(ATarget.Dependencies,ATarget.Collection as TTa'+ + 'rgets);'#010+ ' CompileDependencies(APackage, ATarget);'#010+ ' if NeedsCompile(APackage, ATarget) then'#010+ ' begin'#010+ ' Compile(APackage,ATarget);'#010+ - ' ATar','get.FTargetState:=tsCompiled;'#010+ + ' ATarget.FTargetState:=tsCompiled;'#010+ ' end'#010+ - ' else'#010+ + ' els','e'#010+ ' ATarget.FTargetState:=tsNoCompile;'#010+ ' LogUnIndent;'#010+ 'end;'#010+ @@ -7343,11 +8083,11 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' I : Integer;'#010+ ' P : TPackage;'#010+ ' D : TDependency;'#010+ - ' CompileReason',': string;'#010+ + ' CompileReason: string;'#010+ 'begin'#010+ ' Result:=False;'#010+ #010+ - ' // Forced recompile?'#010+ + ' // Forc','ed recompile?'#010+ ' if FForceCompile then'#010+ ' begin'#010+ ' Result:=true;'#010+ @@ -7357,23 +8097,23 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' // Recompile because of Package Dependencies?'#010+ ' if not Result then'#010+ ' begin'#010+ - ' ',' I:=0;'#010+ - ' For I:=0 to APackage.Dependencies.Count-1 do'#010+ + ' I:=0;'#010+ + ' For I:=0 to APackage.Depend','encies.Count-1 do'#010+ ' begin'#010+ ' D:=APackage.Dependencies[i];'#010+ ' if (D.DependencyType=depPackage) and'#010+ ' (Defaults.CPU in D.CPUs) and (Defaults.OS in D.OSes) the'+ 'n'#010+ - ' ',' begin'#010+ - ' P:=TPackage(D.Target);'#010+ + ' begin'#010+ + ' P:=TPackage(D','.Target);'#010+ ' if Assigned(P) then'#010+ ' begin'#010+ ' Result:=(P.State=tsCompiled);'#010+ ' if Result then'#010+ ' begin'#010+ - ' ',' break;'#010+ - ' CompileReason:=Format(SDbgPackageDepRecompiled,[P'+ - '.Name]);'#010+ + ' break;'#010+ + ' CompileReason',':=Format(SDbgPackageDepRecompiled,'+ + '[P.Name]);'#010+ ' end;'#010+ ' end;'#010+ ' end;'#010+ @@ -7381,19 +8121,19 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' end;'#010+ #010+ ' // Recompile a Target of this package?'#010+ - ' If Not Result then'#010, + ' If Not Result then'#010+ ' begin'#010+ - ' GPathPrefix := APackage.Directory;'#010+ + ' GPathPrefix := APackage.Dir','ectory;'#010+ ' try'#010+ ' for i:=0 to APackage.Targets.Count-1 do'#010+ ' begin'#010+ ' Result:=NeedsCompile(APackage,APackage.Targets.TargetItems'+ '[i]);'#010+ ' if Result then'#010+ - ' ',' begin'#010+ + ' begin'#010+ ' break;'#010+ - ' CompileReason:=Format(SDbgTargetHasToBeCompiled,[APackag'+ - 'e.Targets.TargetItems[i].Name]);'#010+ + ' ','CompileReason:=Format(SDbgTargetHasToBeCompiled,[APack'+ + 'age.Targets.TargetItems[i].Name]);'#010+ ' end;'#010+ ' end;'#010+ ' Finally'#010+ @@ -7401,8 +8141,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' end;'#010+ ' end;'#010+ #010+ - ' if result ','then'#010+ - ' Log(vlDebug,SDbgMustCompile,[APackage.Name, CompileReason]);'#010+ + ' if result then'#010+ + ' Log(vlDebug,SDbgMustCompile,[APack','age.Name, CompileReason]);'#010+ 'end;'#010+ #010+ #010+ @@ -7413,30 +8153,30 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' F : String;'#010+ ' I : Integer;'#010+ 'begin'#010+ - ' /','/ Already checked?'#010+ - ' I:=ExternalPackages.IndexOfName(APackageName);'#010+ + ' // Already checked?'#010+ + ' I:=ExternalPackages.In','dexOfName(APackageName);'#010+ ' if I<>-1 then'#010+ ' begin'#010+ ' result:=ExternalPackages.PackageItems[I];'#010+ ' exit;'#010+ ' end;'#010+ ' // Create new external package'#010+ - ' Result:=ExternalPackages.AddPackage(APacka','geName);'#010+ - ' Result.FTargetState:=tsNotFound;'#010+ + ' Result:=ExternalPackages.AddPackage(APackageName);'#010+ + ' Result.FTargetState:=tsNotFound;',#010+ ' // Load unit config'#010+ ' S:=GetUnitDir(Result);'#010+ ' if S<>'#039#039' then'#010+ ' begin'#010+ ' Log(vldebug, SDbgExternalDependency, [APackageName,S]);'#010+ ' // Load unit config if it exists'#010+ - ' F:=result.UnitCo','nfigFileName;'#010+ + ' F:=result.UnitConfigFileName;'#010+ ' if (F<>'#039#039') then'#010+ - ' begin'#010+ + ' ',' begin'#010+ ' Log(vlDebug, Format(SDbgLoading, [F]));'#010+ ' Result.LoadUnitConfigFromFile(F);'#010+ ' result.SetDefaultPackageVariant;'#010+ - ' result.UnitDir:=result.UnitDir+Result.GetPa','ckageUnitInstal'+ - 'lDir(Defaults.CPU, Defaults.OS);'#010+ + ' result.UnitDir:=ConcatPaths([result.UnitDir,Result.GetPackag'+ + 'eUnitInstallDir(Defaults.C','PU, Defaults.OS)]);'#010+ ' end;'#010+ ' // Check recursive implicit dependencies'#010+ ' CompileDependencies(Result);'#010+ @@ -7446,7 +8186,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'pr','ocedure TBuildEngine.CompileDependencies(APackage: TPackage);'#010+ + 'procedure TBuildEngine.Compile','Dependencies(APackage: TPackage);'#010+ 'Var'#010+ ' I : Integer;'#010+ ' P : TPackage;'#010+ @@ -7455,42 +8195,44 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' For I:=0 to APackage.Dependencies.Count-1 do'#010+ ' begin'#010+ ' D:=APackage.Dependencies[i];'#010+ - ' if (D.DependencyType','=depPackage) and'#010+ - ' (Defaults.CPU in D.CPUs) and (Defaults.OS in D.OSes) then'#010+ + ' if (D.DependencyType=depPackage) and'#010+ + ' (D','efaults.CPU in D.CPUs) and (Defaults.OS in D.OSes) then'#010+ ' begin'#010+ ' P:=TPackage(D.Target);'#010+ ' If Assigned(P) then'#010+ ' begin'#010+ - ' if (Defaults.CPU in P.CPUs) and (Defaults.OS in',' P.OSes'+ - ') then'#010+ - ' begin'#010+ + ' if (Defaults.CPU in P.CPUs) and (Defaults.OS in P.OSes) '+ + 'then'#010+ + ' ',' begin'#010+ ' case P.State of'#010+ ' tsNeutral :'#010+ ' MaybeCompile(P);'#010+ ' tsConsidering :'#010+ - ' Log(vlWarning,SWarnCircularPackageDepende','ncy,['+ - 'APackage.Name,P.Name]);'#010+ + ' Log(vlWarning,SWarnCircularPackageDependency,[AP'+ + 'ackage.Name,P.Name]);',#010+ ' end;'#010+ ' end'#010+ ' else'#010+ ' Log(vlWarning,SWarnDependOnOtherPlatformPackage,[APack'+ 'age.Name, D.Value, MakeTargetString(Defaults.CPU, Defaults.OS)]);'#010+ - ' e','nd'#010+ + ' end'#010+ ' else'#010+ - ' begin'#010+ + ' ',' begin'#010+ ' D.Target:=CheckExternalPackage(D.Value, true);'#010+ ' P:=TPackage(D.Target);'#010+ ' end;'#010+ - ' if (D.RequireChecksum<>$ffffffff) and'#010+ - ' (P.InstalledChecksum<>$fffff','fff) and'#010+ + ' if (D.RequireChecksum<>$ffffffff) and (D.RequireChecksum<>0)'+ + ' and'#010+ + ' (P.InstalledChecksum<>$ffffff','ff) and'#010+ ' (P.InstalledChecksum<>D.RequireChecksum) then'#010+ - ' Log(vlDebug,SDbgPackageChecksumChanged,[P.Name]);'#010+ + ' Log(vlWarning,SDbgPackageChecksumChanged,[APackage.Name, P'+ + '.Name]);'#010+ ' APackage.InheritPackageVariantsFromDependency(P);'#010+ ' end;'#010+ ' end;'#010+ 'end;'#010+ #010+ - 'function TBuildEngine.','CheckDependencies(APackage: TPackage; ErrorOnF'+ + 'functi','on TBuildEngine.CheckDependencies(APackage: TPackage; ErrorOnF'+ 'ailure: boolean): TCheckDependencyResult;'#010+ 'Var'#010+ ' I : Integer;'#010+ @@ -7499,40 +8241,41 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'begin'#010+ ' result := cdAvailable;'#010+ ' For I:=0 to APackage.Dependencies.Count-1 do'#010+ - ' begin'#010+ - ' D:=A','Package.Dependencies[i];'#010+ + ' ','begin'#010+ + ' D:=APackage.Dependencies[i];'#010+ ' if (D.DependencyType=depPackage) and'#010+ ' (Defaults.CPU in D.CPUs) and (Defaults.OS in D.OSes) then'#010+ ' begin'#010+ ' P:=TPackage(D.Target);'#010+ ' If Assigned(P) then'#010+ - ' begin'#010+ - ' ',' if (Defaults.CPU in P.CPUs) and (Defaults.OS in P.OSes'+ - ') then'#010+ + ' ','begin'#010+ + ' if (Defaults.CPU in P.CPUs) and (Defaults.OS in P.OSes) '+ + 'then'#010+ ' begin'#010+ ' case P.State of'#010+ ' tsNeutral :'#010+ ' result := cdNotYetAvailable;'#010+ - ' tsConsidering :'#010, + ' ','tsConsidering :'#010+ ' Log(vlWarning,SWarnCircularPackageDependency,[AP'+ 'ackage.Name,P.Name]);'#010+ ' end;'#010+ ' end'#010+ ' else'#010+ - ' Log(vlWarning,SWarnDependOnOtherPlatformPackage,[APack'+ - 'age.Name, D.Valu','e, MakeTargetString(Defaults.CPU, Defaults.OS)]);'#010+ + ' Log(vlWarning,SWarnDependOnOtherPlatformPackage,[APack', + 'age.Name, D.Value, MakeTargetString(Defaults.CPU, Defaults.OS)]);'#010+ ' end'#010+ ' else'#010+ ' begin'#010+ ' D.Target:=CheckExternalPackage(D.Value, ErrorOnFailure);'+ #010+ ' P:=TPackage(D.Target);'#010+ - ' end;'#010+ - ' if (D.','RequireChecksum<>$ffffffff) and'#010+ + ' end;'#010, + ' if (D.RequireChecksum<>$ffffffff) and'#010+ ' (P.InstalledChecksum<>$ffffffff) and'#010+ ' (P.InstalledChecksum<>D.RequireChecksum) then'#010+ - ' Log(vlDebug,SDbgPackageChecksumChanged,[P.Name]);'#010+ - ' APackage.InheritPackageVari','antsFromDependency(P);'#010+ + ' Log(vldebug,SDbgPackageChecksumChanged,[APackage.Name, P.N'+ + 'ame]);'#010+ + ' ',' APackage.InheritPackageVariantsFromDependency(P);'#010+ ' end;'#010+ ' end;'#010+ 'end;'#010+ @@ -7545,8 +8288,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Cmd: string;'#010+ ' cmdOpts: string;'#010+ ' sFPDocFormat: string;'#010+ - ' IFPDocFormat: TFPDocFormat;'#010+ - ' d: integer;'#010, + ' IFPDocForma','t: TFPDocFormat;'#010+ + ' d: integer;'#010+ ' UC: string;'#010+ ' dep: TDependency;'#010+ ' RegenerateUnitconfigFile: boolean;'#010+ @@ -7558,58 +8301,79 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' T: TTarget;'#010+ ' L: TStrings;'#010+ ' F: Text;'#010+ + ' CompilationFailed',': Boolean;'#010+ #010+ ' begin'#010+ - ' if (APackage.FBUTarget.Dependencies.Cou','nt>0) then'#010+ + ' if (APackage.FBUTarget.Dependencies.Count>0) then'#010+ ' begin'#010+ ' Log(vldebug, Format(SDbgGenerateBuildUnit, [APackage.FBUTarget'+ '.Name]));'#010+ ' system.Assign(F,AddPathPrefix(APackage,APackage.FBUTarget.FTar'+ - 'getSourceFileName));'#010+ + 'getS','ourceFileName));'#010+ ' Rewrite(F);'#010+ - ' writeln(F,'#039'unit '#039' ','+ APackage.FBUTarget.Name +'#039';'#039+ + ' writeln(F,'#039'unit '#039' + APackage.FBUTarget.Name +'#039';'#039+ ');'#010+ ' writeln(F,'#039'interface'#039');'#010+ ' writeln(F,'#039'uses'#039');'#010+ ' for i := 0 to APackage.FBUTarget.Dependencies.Count-1 do'#010+ ' begin'#010+ - ' if i<>0 then'#010+ + ' ',' if i<>0 then'#010+ ' write(F,'#039','#039');'#010+ - ' wr','iteln(F,APackage.FBUTarget.Dependencies.Dependencies[i'+ - '].Value);'#010+ + ' writeln(F,APackage.FBUTarget.Dependencies.Dependencies[i].'+ + 'Value);'#010+ ' end;'#010+ ' writeln(F,'#039';'#039');'#010+ ' writeln(F,'#039'implementation'#039');'#010+ ' writeln(F,'#039'end.'#039');'#010+ #010+ - ' system.close(F);'#010+ + ' s','ystem.close(F);'#010+ #010+ ' APackage.FBuildMode:=bmOneByOne;'#010+ - ' ',' try'#010+ - ' Compile(APackage,APackage.FBUTarget);'#010+ - ' finally'#010+ - ' // Delete temporary build-unit files'#010+ - ' L := TStringList.Create;'#010+ + ' Compilationfailed:=false;'#010+ + ' try'#010+ ' try'#010+ - ' APackage.FBUTarget.GetCleanFiles(L,IncludeTrailingPathDeli'+ - 'mit','er(AddPathPrefix(APackage,APackage.GetUnitsOutputDir(Defaults.CPU'+ - ',Defaults.OS))),'#039#039',Defaults.CPU,Defaults.OS);'#010+ - ' L.Add(AddPathPrefix(APackage,APackage.FBUTarget.SourceFile'+ - 'Name));'#010+ - ' CmdDeleteFiles(L);'#010+ - ' finally'#010+ - ' ',' L.Free;'#010+ + ' Compile(APackage,APackage.FBUTarget);'#010+ + ' except'#010+ + ' on E: Exception do'#010+ + ' begin'#010+ + ' ',' Log(vlError,E.Message);'#010+ + ' Compilationfailed:=true;'#010+ + ' end;'#010+ + ' end;'#010+ + ' finally'#010+ + ' if CompilationFailed then'#010+ + ' begin'#010+ + ' Log(vlDebug,Format(SDbgBuildUnitFailure,[APac','kage.FBUT'+ + 'arget.FTargetSourceFileName]));'#010+ + ' // Raise failure exception again.'#010+ + ' Error(SErrBuildUnitCompilation,[APackage.FBUTarget.FTarg'+ + 'etSourceFileName]);'#010+ + ' end'#010+ + ' else'#010+ + ' begin'#010+ + ' ','// Delete temporary build-unit files'#010+ + ' L := TStringList.Create;'#010+ + ' try'#010+ + ' APackage.FBUTarget.GetCleanFiles(L,IncludeTrailingPathDe'+ + 'limiter(AddPathPrefix(APackage,APackage.GetUnitsOutputDir(Defaults.CPU'+ + ',Defaults.','OS))),'#039#039',Defaults.CPU,Defaults.OS);'#010+ + ' L.Add(AddPathPrefix(APackage,APackage.FBUTarget.SourceFi'+ + 'leName));'#010+ + ' CmdDeleteFiles(L);'#010+ + ' finally'#010+ + ' L.Free;'#010+ + ' end;'#010+ ' end;'#010+ ' end;'#010+ - ' end;'#010+ + ' ',' end;'#010+ #010+ ' For I:=0 to APackage.Targets.Count-1 do'#010+ ' begin'#010+ ' T:=APackage.Targets.TargetItems[i];'#010+ ' if (T.TargetType = ttUnit) and (TargetOK(T, Defaults.CPU, Defa'+ - 'ults.OS)) th','en'#010+ + 'ults.OS)) then'#010+ ' begin'#010+ - ' If Assigned(T.AfterCompile) then'#010+ + ' If Assigned(T.After','Compile) then'#010+ ' T.AfterCompile(T);'#010+ ' ExecuteCommands(T.Commands,caAfterCompile);'#010+ ' end'#010+ @@ -7618,22 +8382,22 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ ' procedure ProcessCompileTarget;'#010+ ' begin'#010+ - ' if Targe','tOK(T, Defaults.CPU, Defaults.OS) then'#010+ - ' begin'#010+ + ' if TargetOK(T, Defaults.CPU, Defaults.OS) then'#010+ + ' begin',#010+ ' if T.State=tsNeutral then'#010+ ' MaybeCompile(APackage,T);'#010+ ' // If a target is compiled, re-generate the UnitConfigFile'#010+ ' if T.FTargetState<>tsNoCompile then'#010+ - ' ',' RegenerateUnitconfigFile:= True;'#010+ + ' RegenerateUnitconfigFile:= True;'#010+ ' end'#010+ - ' else'#010+ + ' e','lse'#010+ ' begin'#010+ ' if not(Defaults.CPU in T.CPUs) then'#010+ ' Log(vldebug, Format(SDbgSkippingTargetWrongCPU, [T.Name, CPU'+ 'sToString(T.CPUs)]));'#010+ - ' if not(Defaults.OS in T.OSes) ','then'#010+ - ' Log(vldebug, Format(SDbgSkippingTargetWrongOS, [T.Name, OSes'+ - 'ToString(T.OSes)]));'#010+ + ' if not(Defaults.OS in T.OSes) then'#010+ + ' Log(vldebug, Format(SDbgSkippingTar','getWrongOS, [T.Name, OS'+ + 'esToString(T.OSes)]));'#010+ ' end;'#010+ ' end;'#010+ #010+ @@ -7643,91 +8407,93 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' log(vlWarning,SWarnStartCompilingPackage,[APackage.Name, Defaults.Ta'+ 'rget]);'#010+ #010+ - ' case Defaults.BuildM','ode of'#010+ + ' case Defaults.BuildMode of'#010+ ' bmOneByOne: begin'#010+ - ' if (bmOneByOne in APackage.SupportBuildModes) then'#010+ + ' i','f (bmOneByOne in APackage.SupportBuildModes) the'+ + 'n'#010+ ' APackage.FBuildMode:=bmOneByOne'#010+ ' else if bmBuildUnit in APackage.SupportBuildModes t'+ 'hen'#010+ - ' ',' begin'#010+ - ' log(vlInfo,SInfoFallbackBuildmodeBU);'#010+ + ' begin'#010+ + ' log(vlInfo,SI','nfoFallbackBuildmodeBU);'#010+ ' APackage.FBuildMode:=bmBuildUnit;'#010+ ' end'#010+ ' else'#010+ - ' raise exception.create(SErrUnsupported','Buildmode'+ - ');'#010+ + ' raise exception.create(SErrUnsupportedBuildmode);'+ + #010+ ' end;'#010+ - ' bmBuildUnit: begin'#010+ + ' bmBuildUnit:',' begin'#010+ ' // When bmBuildUnit is supported by the package use'+ ' a buildunit.'#010+ ' // Unless there is only one target and bmOneByOne i'+ 's also supported'#010+ - ' ',' if (bmBuildUnit in APackage.SupportBuildModes) an'+ + ' if (bmBuildUnit in APackage.SupportBuildMod','es) an'+ 'd'#010+ ' not ((APackage.Targets.Count=1) and (bmOneByOne '+ 'in APackage.SupportBuildModes)) then'#010+ ' APackage.FBuildMode:=bmBuildUnit'#010+ - ' el','se if bmOneByOne in APackage.SupportBuildModes '+ - 'then'#010+ + ' else if bmOneByOne in APackage.SupportBuildModes th'+ + 'e','n'#010+ ' begin'#010+ ' log(vlInfo,SInfoFallbackBuildmode);'#010+ ' APackage.FBuildMode:=bmOneByOne'#010+ ' end'#010+ - ' els','e'#010+ - ' raise exception.create(SErrUnsupportedBuildmode);'+ - #010+ + ' else'#010+ + ' raise exception.create(SErr','UnsupportedBuildmode'+ + ');'#010+ ' end;'#010+ ' end;'#010+ #010+ ' GPathPrefix:=APackage.Directory;'#010+ ' Try'#010+ ' CreateOutputDir(APackage);'#010+ - ' AddPackageMacrosToDictionary(APackage, APackage.Dictionary);'#010, + ' AddPackageMacrosToDictionary(APackage, APackage.Dictionary);'#010+ ' DoBeforeCompile(APackage);'#010+ - ' RegenerateUnitconfigFile:=False;'#010+ + ' RegenerateUnitc','onfigFile:=False;'#010+ ' if APackage.BuildMode=bmBuildUnit then'#010+ ' begin'#010+ ' APackage.FBUTargets := TTargets.Create(TTarget);'#010+ ' if (Defaults.BuildOS in AllLimit83fsOses) or'#010+ - ' ',' (Defaults.OS in AllLimit83fsOses) then'#010+ - ' BUName := '#039'BUnit.pp'#039#010+ + ' (Defaults.OS in AllLimit83fsOses) then'#010+ + ' ',' BUName := '#039'BUnit.pp'#039#010+ ' else'#010+ ' BUName := '#039'BuildUnit_'#039'+StringReplace(APackage.Name,'#039+ '-'#039','#039'_'#039',[rfReplaceAll])+'#039'.pp'#039';'#010+ - ' APackage.FBUTarget := APackage.FBUTargets.AddUnit(BUN','ame);'#010+ - ' APackage.FBUTarget.FTargetSourceFileName := APackage.FBUTarget'+ - '.SourceFileName;'#010+ + ' APackage.FBUTarget := APackage.FBUTargets.AddUnit(BUName);'#010+ + ' APackage.FBUTarget.FTargetSourceFile','Name := APackage.FBUTarg'+ + 'et.SourceFileName;'#010+ ' end;'#010+ ' For I:=0 to APackage.Targets.Count-1 do'#010+ ' begin'#010+ ' T:=APackage.Targets.TargetItems[i];'#010+ ' case T.TargetType of'#010+ - ' ',' ttUnit:'#010+ + ' ttUnit:'#010+ ' begin'#010+ - ' ProcessCompileTarget;'#010+ + ' ProcessCompil','eTarget;'#010+ ' end;'#010+ + ' ttSharedLibrary,'#010+ ' ttProgram:'#010+ ' begin // do nothing, are compiled later'#010+ ' end;'#010+ ' ttFPDoc:'#010+ ' begin'#010+ - ' for d := 0 to T.Dependencies.Count - ','1 do'#010+ + ' for d := 0 to T.Dependencies.Count - 1 do'#010+ ' begin'#010+ - ' dep := TDependency(T.Dependencies[d]);'#010+ + ' ',' dep := TDependency(T.Dependencies[d]);'#010+ #010+ ' //add unit dependencies'#010+ ' if dep.DependencyType = depUnit then'#010+ ' cmdOpts := cmdOpts + '#039' --input='#039' + AddPathPref'+ - 'ix(APackage,','dep.Value);'#010+ - ' end;'#010+ + 'ix(APackage,dep.Value);'#010+ + ' e','nd;'#010+ #010+ ' //check if a documentation target is given'#010+ ' cmdOpts := cmdOpts + '#039' --input='#039' + AddPathPrefix(A'+ 'Package,T.Directory + T.Name + T.Extension) + '#039' --descr='#039'+ T.X'+ 'ML;'#010+ ' end'#010+ - ' else'#010, - ' log(vldebug, SDbgTargetIsNotAUnitOrProgram,[T.Name]);'#010+ + ' else'#010+ + ' log(vldebug, SD','bgTargetIsNotAUnitOrProgram,[T.Name]);'#010+ ' end;'#010+ ' end;'#010+ #010+ @@ -7737,9 +8503,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' FreeAndNil(APackage.FBUTarget);'#010+ #010+ ' For I:=0 to APackage.Targets.Count-1 do'#010+ - ' ',' begin'#010+ - ' T:=APackage.Targets.TargetItems[i];'#010+ - ' if T.TargetType=ttProgram then'#010+ + ' begin'#010+ + ' T:=APac','kage.Targets.TargetItems[i];'#010+ + ' if T.TargetType in [ttProgram,ttSharedLibrary] then'#010+ ' begin'#010+ ' ProcessCompileTarget;'#010+ ' end;'#010+ @@ -7747,13 +8513,13 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ ' if RegenerateUnitconfigFile then'#010+ ' begin'#010+ - ' UC:=AddPathPr','efix(APackage, APackage.GetUnitConfigOutputFile'+ + ' UC:=AddPathPrefix','(APackage, APackage.GetUnitConfigOutputFile'+ 'name(Defaults.CPU,Defaults.OS));'#010+ ' Log(vlInfo, Format(SDbgGenerating, [UC]));'#010+ ' APackage.SaveUnitConfigToFile(UC,Defaults.CPU,Defaults.OS);'#010+ ' end;'#010+ #010+ - ' //compile documentation, ','because options were found'#010+ + ' //compile documentation, beca','use options were found'#010+ ' if cmdOpts <> '#039#039' then'#010+ ' begin'#010+ ' //append package name'#010+ @@ -7761,28 +8527,28 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ ' for IFPDocFormat:=Low(TFPDocFormat) to High(TFPDocFormat) do'#010+ ' begin'#010+ - ' if ','IFPDocFormat in APackage.FPDocFormat then'#010+ + ' if IFPD','ocFormat in APackage.FPDocFormat then'#010+ ' begin'#010+ ' //prepend output format'#010+ ' case IFPDocFormat of'#010+ ' ffHtml: sFPDocFormat := '#039'--format=html --output='#039+ ' + AddPathPrefix(APackage,Defaults.FPDocOutputDir);'#010+ - ' ',' ffHtm: sFPDocFormat := '#039'--format=htm --output='+ + ' ',' ffHtm: sFPDocFormat := '#039'--format=htm --output='+ #039' + AddPathPrefix(APackage,Defaults.FPDocOutputDir);'#010+ ' ffXHtml: sFPDocFormat := '#039'--format=xhtml --output='+ #039' + AddPathPrefix(APackage,Defaults.FPDocOutputDir);'#010+ - ' ',' ffLaTex: sFPDocFormat := '#039'--format=latex --outpu'+ + ' ',' ffLaTex: sFPDocFormat := '#039'--format=latex --outpu'+ 't='#039' + AddPathPrefix(APackage,Defaults.FPDocOutputDir) + APackage.N'+ 'ame + '#039'.tex'#039';'#010+ ' ffXMLStruct: sFPDocFormat := '#039'--format=xml-struct --ou'+ - 'tput='#039' + AddPathPrefix(APackage,Def','aults.FPDocOutputDir);'#010+ + 'tput='#039' + AddPathPrefix(APackage,Default','s.FPDocOutputDir);'#010+ ' ffChm: sFPDocFormat := '#039'--format=chm --output='#039+ ' + AddPathPrefix(APackage,Defaults.FPDocOutputDir) + APackage.Name + '#039+ '.chm'#039';'#010+ ' end;'#010+ #010+ ' //execute fpdoc'#010+ - ' Cmd:=ExeSearch('#039'fpdoc'#039',','SysUtils.GetEnvironmentvari'+ + ' Cmd:=ExeSearch('#039'fpdoc'#039',SysU','tils.GetEnvironmentvari'+ 'able('#039'PATH'#039'));'#010+ ' if Cmd = '#039#039' then Cmd := '#039'fpdoc'#039';'#010+ ' ExecuteProcess(Cmd, sFPDocFormat + cmdOpts);'#010+ @@ -7793,8 +8559,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' DoAfterCompile(APackage);'#010+ ' Finally'#010+ ' GPathPrefix:='#039#039';'#010+ - ' end',';'#010+ - ' inc(FProgressCount);'#010+ + ' end;'#010+ + ' ','inc(FProgressCount);'#010+ ' if FProgressMax>0 then'#010+ ' log(vlWarning,SWarnCompilingPackagecompleteProgress,[(FProgressCou'+ 'nt)/FProgressMax * 100, APackage.Name])'#010+ @@ -7802,7 +8568,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' log(vlWarning,SWarnCompilingPackagecomplete,[APackage.Name]);'#010+ 'end;'#010+ #010+ - 'p','rocedure TBuildEngine.MaybeCompile(APackage: TPackage);'#010+ + 'proce','dure TBuildEngine.MaybeCompile(APackage: TPackage);'#010+ 'begin'#010+ ' if ReadyToCompile(APackage) then'#010+ ' begin'#010+ @@ -7811,7 +8577,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' end;'#010+ 'end;'#010+ #010+ - 'function TBuildEngine.ReadyToCompile(APackage: TPack','age) : Boolean;'#010+ + 'function TBuildEngine.ReadyToCompile(APackage: TPackage)',' : Boolean;'#010+ 'begin'#010+ ' result := False;'#010+ ' if APackage.State in [tsCompiled, tsNoCompile] then'#010+ @@ -7820,12 +8586,12 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Exit;'#010+ ' end;'#010+ ' if APackage.State<>tsNeutral then'#010+ - ' Error(SErr','InvalidState,[APackage.Name]);'#010+ + ' Error(SErrInva','lidState,[APackage.Name]);'#010+ ' Log(vlDebug,SDbgConsideringPackage,[APackage.Name]);'#010+ ' LogIndent;'#010+ ' if Defaults.ThreadsAmount=-1 then'#010+ ' APackage.FTargetState:=tsConsidering;'#010+ - ' ResolveDependencies(APackage.Dependencies,(APackage.Collectio','n as '+ + ' ResolveDependencies(APackage.Dependencies,(APackage.Collection as',' '+ 'TPackages));'#010+ ' // When multiple threads are used, delay the compilation of the pack'+ 'age when'#010+ @@ -7833,7 +8599,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'e all'#010+ ' // dependencies.'#010+ ' if Defaults.ThreadsAmount=-1 then'#010+ - ' CompileD','ependencies(APackage)'#010+ + ' CompileDepen','dencies(APackage)'#010+ ' else if CheckDependencies(APackage, true)=cdNotYetAvailable then'#010+ ' begin'#010+ ' log(vlInfo,'#039'Delaying package '#039'+apackage.name);'#010+ @@ -7842,7 +8608,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' end;'#010+ ' APackage.SetDefaultPackageVariant;'#010+ #010+ - ' Reso','lveFileNames(APackage,Defaults.CPU,Defaults.OS,True,False);'#010+ + ' ResolveF','ileNames(APackage,Defaults.CPU,Defaults.OS,True,False);'#010+ ' If NeedsCompile(APackage) then'#010+ ' result := True'#010+ ' else'#010+ @@ -7854,7 +8620,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'Function TB','uildEngine.InstallPackageFiles(APAckage : TPackage; tt : '+ + 'Function TBuild','Engine.InstallPackageFiles(APAckage : TPackage; tt : '+ 'TTargetTypes; Const Dest : String; Const InstallMode: TInstallMode):Bo'+ 'olean;'#010+ 'Var'#010+ @@ -7863,14 +8629,14 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Result:=False;'#010+ ' List:=TStringList.Create;'#010+ ' Try'#010+ - ' APackage.GetInstall','Files(List,tt,Defaults.CPU, Defaults.OS);'#010+ + ' APackage.GetInstallFile','s(List,tt,Defaults.CPU, Defaults.OS);'#010+ ' if (List.Count>0) then'#010+ ' begin'#010+ ' Result:=True;'#010+ ' case InstallMode of'#010+ ' imInstall: CmdCopyFiles(List,Dest,APackage);'#010+ - ' imUnInstall: CmdDeleteDestFiles(List,Dest)',';'#010+ - ' end;'#010+ + ' imUnInstall: CmdDeleteDestFiles(List,Dest);'#010+ + ' ',' end;'#010+ ' end;'#010+ ' Finally'#010+ ' List.Free;'#010+ @@ -7883,7 +8649,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' result := FixPath(ABaseDir)+Defaults.UnitConfigFilesInstallDir;'#010+ 'end;'#010+ #010+ - 'procedure TBuildEngi','ne.InstallUnitConfigFile(APAckage: TPackage; con'+ + 'procedure TBuildEngine.I','nstallUnitConfigFile(APAckage: TPackage; con'+ 'st Dest: String);'#010+ 'Var'#010+ ' List : TStringList;'#010+ @@ -7891,8 +8657,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' ConfigFileContent: TStrings;'#010+ ' Index: integer;'#010+ 'begin'#010+ - ' ConfigFileName:=APackage.GetUnitConfigOutputFilename(Defaults.CPU',','+ - 'Defaults.OS);'#010+ + ' ConfigFileName:=APackage.GetUnitConfigOutputFilename(Defaults.CPU,De'+ + 'f','aults.OS);'#010+ ' List:=TStringList.Create;'#010+ ' Try'#010+ ' if Defaults.FPUnitSourcePath<>'#039#039' then'#010+ @@ -7900,22 +8666,22 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' ConfigFileContent := TStringList.Create;'#010+ ' try'#010+ ' ConfigFileContent.LoadFromFile(AddPathPrefix(APAckage, Confi'+ - 'gFileN','ame));'#010+ + 'gFileName)',');'#010+ ' if Defaults.FPUnitSourcePath='#039'0'#039' then'#010+ ' begin'#010+ ' Index := ConfigFileContent.IndexOfName(KeySourcePath);'#010+ ' if Index > -1 then'#010+ ' ConfigFileContent.Delete(Index)'#010+ ' end'#010+ - ' ',' else'#010+ + ' ',' else'#010+ ' ConfigFileContent.Values[KeySourcePath] := Defaults.FPUnit'+ 'SourcePath;'#010+ ' ConfigFileContent.SaveToFile(AddPathPrefix(APAckage, ConfigF'+ 'ileName));'#010+ ' finally'#010+ ' ConfigFileContent.Free;'#010+ - ' end;'#010, - ' end;'#010+ + ' end;'#010+ + ' ',' end;'#010+ ' List.Values[ConfigFileName] := APAckage.Name + FpmkExt;'#010+ ' CmdCopyFiles(List,Dest,APackage);'#010+ ' Finally'#010+ @@ -7924,7 +8690,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ 'function TBuildEngine.InstallPackageSourceFiles(APAckage : TPackage; s'+ - 'tt : TSourceTypes; ttt ',': TTargetTypes; Const Dest : String; Const In'+ + 'tt : TSourceTypes; ttt : TT','argetTypes; Const Dest : String; Const In'+ 'stallMode: TInstallMode): Boolean;'#010+ 'Var'#010+ ' List : TStringList;'#010+ @@ -7933,8 +8699,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' List:=TStringList.Create;'#010+ ' Try'#010+ ' APackage.GetInstallSourceFiles(List,stt,ttt);'#010+ - ' if (List.Count>0) then'#010, - ' begin'#010+ + ' if (List.Count>0) then'#010+ + ' ',' begin'#010+ ' Result:=True;'#010+ ' case InstallMode of'#010+ ' imInstall: CmdCopyFiles(List,Dest,APackage);'#010+ @@ -7947,12 +8713,12 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'proc','edure TBuildEngine.DoBeforeInstall(APackage: TPackage);'#010+ + 'procedur','e TBuildEngine.DoBeforeInstall(APackage: TPackage);'#010+ 'begin'#010+ ' ExecuteCommands(APackage.Commands,caBeforeInstall);'#010+ ' If Assigned(APackage.BeforeInstall) then'#010+ ' APackage.BeforeInstall(APackage);'#010+ - ' If Assigned(APackage.BeforeInstallProc) t','hen'#010+ + ' If Assigned(APackage.BeforeInstallProc) then'#010, ' APackage.BeforeInstallProc(APackage);'#010+ 'end;'#010+ #010+ @@ -7961,8 +8727,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'begin'#010+ ' If Assigned(APackage.AfterInstall) then'#010+ ' APackage.AfterInstall(APackage);'#010+ - ' If Assigned(APackage.AfterInstallProc) th','en'#010+ - ' APackage.AfterInstallProc(APackage);'#010+ + ' If Assigned(APackage.AfterInstallProc) then'#010+ + ' ',' APackage.AfterInstallProc(APackage);'#010+ ' ExecuteCommands(APackage.Commands,caAfterInstall);'#010+ 'end;'#010+ #010+ @@ -7973,14 +8739,14 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' UC,D : String;'#010+ ' B : Boolean;'#010+ 'begin'#010+ - ' If (Apackage.St','ate<>tsCompiled) then'#010+ + ' If (Apackage.State<','>tsCompiled) then'#010+ ' MaybeCompile(APackage);'#010+ ' Log(vlCommand,SInfoInstallingPackage,[APackage.Name]);'#010+ ' if AnArchiveFiles then'#010+ ' FinishArchive(APackage);'#010+ ' try'#010+ ' If (APackage.Directory<>'#039#039') then'#010+ - ' GPathPrefix := APackage.Direct','ory;'#010+ + ' GPathPrefix := APackage.Directory;',#010+ ' if AnArchiveFiles then'#010+ ' begin'#010+ ' FOnCopyFile:=@AddFileToArchive;'#010+ @@ -7989,11 +8755,11 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' DoBeforeInstall(APackage);'#010+ ' // units'#010+ ' B:=false;'#010+ - ' AddPackageMacrosToDictionary(APackage, APack','age.Dictionary);'#010+ + ' AddPackageMacrosToDictionary(APackage, APackage.','Dictionary);'#010+ ' GlobalDictionary.AddVariable('#039'unitinstalldir'#039', FixPath(APa'+ 'ckage.Dictionary.ReplaceStrings(Defaults.UnitInstallDir), False));'#010+ ' GlobalDictionary.AddVariable('#039'packageunitinstalldir'#039',APack'+ - 'age.GetPackageUnitInstallDir(Def','aults.CPU,Defaults.OS));'#010+ + 'age.GetPackageUnitInstallDir(Default','s.CPU,Defaults.OS));'#010+ #010+ ' D:=FixPath(Defaults.Prefix,true);'#010+ ' // This is to install the TPackage.Installfiles, which are not rel'+ @@ -8001,48 +8767,52 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' // target'#010+ ' if InstallPackageFiles(APackage,[],D, imInstall) then'#010+ ' B:=true;'#010+ - ' D:=','FixPath(APackage.Dictionary.ReplaceStrings(Defaults.UnitInsta'+ - 'llDir), True)+APackage.GetPackageUnitInstallDir(Defaults.CPU,Defaults.'+ - 'OS);'#010+ + ' D:=FixP','ath(APackage.Dictionary.ReplaceStrings(Defaults.UnitInsta'+ + 'llDir), True)+ExcludeLeadingPathDelimiter(APackage.GetPackageUnitInsta'+ + 'llDir(Defaults.CPU,Defaults.OS));'#010+ ' if InstallPackageFiles(APackage,[ttUnit, ttImplicitUnit],D, imInst'+ - 'all) then'#010+ + 'all) then',#010+ ' B:=true;'#010+ - ' // By',' default do not install the examples. Maybe add an option f'+ - 'or this later'#010+ + ' // By default do not install the examples. Maybe add an option for'+ + ' this later'#010+ ' //if InstallPackageFiles(APAckage,ttExampleUnit,D) then'#010+ ' // B:=true;'#010+ - ' // Unit (dependency) configuration if there were units installed'#010+ - ' D:=FixPath(APacka','ge.Dictionary.ReplaceStrings(GetUnitConfigFiles'+ - 'InstallDir(Defaults.BaseInstallDir)), True);'#010+ + ' // Unit (dependency) configuration if there were units instal','led'+ + #010+ + ' D:=FixPath(APackage.Dictionary.ReplaceStrings(GetUnitConfigFilesIn'+ + 'stallDir(Defaults.BaseInstallDir)), True);'#010+ ' if B then'#010+ ' InstallUnitConfigFile(APackage,D);'#010+ ' // Programs'#010+ - ' D:=IncludeTrailingPathDelimiter(Defaults.BinInstallDir);'#010+ - ' InstallPacka','geFiles(APAckage,[ttProgram],D, imInstall);'#010+ - ' //InstallPackageFiles(APAckage,ttExampleProgram,D);'#010+ + ' D:=IncludeTrailingPathDelimiter(Defaults.BinInst','allDir);'#010+ + ' InstallPackageFiles(APAckage,[ttProgram],D, imInstall);'#010+ + ' // Shared libraries'#010+ + ' D:=IncludeTrailingPathDelimiter(Defaults.LibInstallDir);'#010+ + ' InstallPackageFiles(APAckage,[ttSharedLibrary],D, imInstall);'#010+ + ' //InstallPackage','Files(APAckage,ttExampleProgram,D);'#010+ ' // Documentation'#010+ ' D:=FixPath(APackage.Dictionary.ReplaceStrings(Defaults.DocInstallD'+ 'ir), True);'#010+ - ' InstallPackageSourceFiles(APackag','e,[stDoc],[],D, imInstall);'#010+ + ' InstallPackageSourceFiles(APackage,[stDoc],[],D, imInstall);'#010+ ' // Examples'#010+ - ' if Defaults.InstallExamples then'#010+ + ' if Defaults.Inst','allExamples then'#010+ ' begin'#010+ ' D:=FixPath(APackage.Dictionary.ReplaceStrings(Defaults.Example'+ 'sInstallDir), True);'#010+ - ' InstallPackageSourceFiles(APackage,[stExample],[','ttExamplePro'+ - 'gram,ttExampleUnit],D, imInstall);'#010+ + ' InstallPackageSourceFiles(APackage,[stExample],[ttExampleProgr'+ + 'am,ttExampleUnit],D, imInstall);'#010+ ' end;'#010+ - ' // Done.'#010+ + ' //',' Done.'#010+ ' APackage.FTargetState:=tsInstalled;'#010+ ' DoAfterInstall(APackage);'#010+ ' if AnArchiveFiles then'#010+ ' begin'#010+ ' FOnCopyFile:=nil;'#010+ ' FOnFinishCopy:=nil;'#010+ - ' end;',#010+ + ' end;'#010+ ' Finally'#010+ ' If (APackage.Directory<>'#039#039') then'#010+ - ' GPathPrefix := '#039#039';'#010+ + ' GPathPrefi','x := '#039#039';'#010+ ' end;'#010+ 'end;'#010+ #010+ @@ -8053,158 +8823,162 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'begin'#010+ ' CheckDependencies(APackage, False);'#010+ ' ResolvePackagePaths(APackage);'#010+ - ' AP','ackage.SetDefaultPackageVariant;'#010+ - ' If (Apackage.State<>tsInstalled) then'#010+ + ' APackage.SetDefaultPackageVariant;'#010+ + ' If (Apackage.State<>tsInstall','ed) then'#010+ ' begin'#010+ ' Error(SErrorPkgNotInstalled,[APackage.Name]);'#010+ ' exit;'#010+ ' end;'#010+ ' Log(vlCommand,SInfoUnInstallingPackage,[APackage.Name]);'#010+ #010+ - ' //DoBeforeUnInstall(APacka','ge);'#010+ + ' //DoBeforeUnInstall(APackage);'#010+ #010+ ' // units'#010+ - ' AddPackageMacrosToDictionary(APackage, APackage.Dictionary);'#010+ + ' AddPackageMacrosToDictionary(APackage, APacka','ge.Dictionary);'#010+ ' GlobalDictionary.AddVariable('#039'unitinstalldir'#039', FixPath(APack'+ 'age.Dictionary.ReplaceStrings(Defaults.UnitInstallDir), False));'#010+ - ' GlobalDictionary.AddVariable('#039'p','ackageunitinstalldir'#039',APack'+ - 'age.GetPackageUnitInstallDir(Defaults.CPU,Defaults.OS));'#010+ + ' GlobalDictionary.AddVariable('#039'packageunitinstalldir'#039',APackag'+ + 'e.GetPackageUnitInstallDir(Defaults','.CPU,Defaults.OS));'#010+ #010+ ' D:=FixPath(Defaults.Prefix,true);'#010+ ' // This is to uninstall the TPackage.Installfiles, which are not rel'+ 'ated to any'#010+ ' // target'#010+ - ' InstallPackageFiles(APa','ckage,[],D,imUnInstall);'#010+ - ' D:=FixPath(APackage.Dictionary.ReplaceStrings(Defaults.UnitInstallDi'+ - 'r), True)+APackage.GetPackageUnitInstallDir(Defaults.CPU,Defaults.OS);'+ - #010+ + ' InstallPackageFiles(APackage,[],D,imUnInstall);'#010+ + ' D:=FixPath(APackage.Dictionary.Replac','eStrings(Defaults.UnitInstall'+ + 'Dir), True)+APackage.GetPackageUnitInstallDir(Defaults.CPU,Defaults.OS'+ + ');'#010+ ' InstallPackageFiles(APackage,[ttUnit, ttImplicitUnit],D, imUnInstall'+ ');'#010+ - ' ',' SysDeleteDirectory(D);'#010+ + ' SysDeleteDirectory(D);'#010+ #010+ ' // Unit (dependency) configuration'#010+ - ' D:=FixPath(APackage.Dictionary.ReplaceStrings(GetUnitConfigFilesInst'+ - 'allDir(Defaults.BaseInstallDir)), True);'#010+ + ' ','D:=FixPath(APackage.Dictionary.ReplaceStrings(GetUnitConfigFilesIn'+ + 'stallDir(Defaults.BaseInstallDir)), True);'#010+ ' SysDeleteFile(D+APackage.Name+FpmkExt);'#010+ #010+ ' // Programs'#010+ - ' D:=Inclu','deTrailingPathDelimiter(Defaults.BinInstallDir);'#010+ - ' InstallPackageFiles(APAckage,[ttProgram],D, imUnInstall);'#010+ + ' D:=IncludeTrailingPathDelimiter(Defaults.BinInstallDir);'#010+ + ' InstallPackag','eFiles(APAckage,[ttProgram],D, imUnInstall);'#010+ ' SysDeleteDirectory(D);'#010+ - ' // Documentation'#010+ + ' // Libraries'#010+ + ' D:=IncludeTrailingPathDelimiter(Defaults.LibInstallDir);'#010+ + ' InstallPackageFiles(APAckage,[ttSharedLibrary],D, imUnInstall);'#010+ + ' SysDeleteDirectory(D);'#010+ + ' // ','Documentation'#010+ ' D:=FixPath(APackage.Dictionary.ReplaceStrings(Defaults.DocInstallDir'+ '), True);'#010+ - ' Insta','llPackageSourceFiles(APackage,[stDoc],[],D, imUnInstall);'#010+ + ' InstallPackageSourceFiles(APackage,[stDoc],[],D, imUnInstall);'#010+ ' SysDeleteDirectory(D);'#010+ ' // Examples'#010+ ' if Defaults.InstallExamples then'#010+ - ' begin'#010+ + ' beg','in'#010+ ' D:=FixPath(APackage.Dictionary.ReplaceStrings(Defaults.ExamplesI'+ 'nstallDir), True);'#010+ - ' Ins','tallPackageSourceFiles(APackage,[stExample],[ttExampleProgr'+ - 'am,ttExampleUnit],D, imUnInstall);'#010+ + ' InstallPackageSourceFiles(APackage,[stExample],[ttExampleProgram'+ + ',ttExampleUnit],D, imUnInstall);'#010+ ' SysDeleteDirectory(D);'#010+ ' end;'#010+ - ' // Done.'#010+ + ' // Do','ne.'#010+ ' APackage.FTargetState:=tsNeutral;'#010+ #010+ ' //DoAfterUnInstall(APackage);'#010+ 'end;'#010+ #010+ #010+ - 'procedure TBuildEngin','e.DoBeforeArchive(APackage: TPackage);'#010+ + 'procedure TBuildEngine.DoBeforeArchive(APackage: TPackage);'#010+ 'begin'#010+ ' ExecuteCommands(APackage.Commands,caBeforeArchive);'#010+ - ' If Assigned(APackage.BeforeArchive) then'#010+ + ' If Assigned(APackage.BeforeArchive) th','en'#010+ ' APackage.BeforeArchive(APackage);'#010+ ' If Assigned(APackage.BeforeArchiveProc) then'#010+ - ' APackage.','BeforeArchiveProc(APackage);'#010+ + ' APackage.BeforeArchiveProc(APackage);'#010+ 'end;'#010+ #010+ #010+ 'procedure TBuildEngine.DoAfterArchive(APackage: TPackage);'#010+ 'begin'#010+ - ' If Assigned(APackage.AfterArchive) then'#010+ + ' If Assigned(APackage.AfterArchive) t','hen'#010+ ' APackage.AfterArchive(APackage);'#010+ ' If Assigned(APackage.AfterArchiveProc) then'#010+ - ' APackage.A','fterArchiveProc(APackage);'#010+ + ' APackage.AfterArchiveProc(APackage);'#010+ ' ExecuteCommands(APackage.Commands,caAfterArchive);'#010+ 'end;'#010+ #010+ #010+ - 'procedure TBuildEngine.Archive(APackage: TPackage);'#010+ + 'procedure TBuildEngine.Archive(APackage: TPackage);'#010, 'Var'#010+ ' L : TStringList;'#010+ ' A : String;'#010+ ' i: integer;'#010+ ' ICPU : TCPU;'#010+ ' IOS : TOS;'#010+ - '{$ifdef HAS_UNIT_ZIPP','ER}'#010+ + '{$ifdef HAS_UNIT_ZIPPER}'#010+ ' ZipFile: TZipper;'#010+ '{$endif HAS_UNIT_ZIPPER}'#010+ 'begin'#010+ ' A:=Defaults.ZipPrefix + APackage.FileName + MakeZipSuffix(cpuNone, o'+ - 'sNone) + ZipExt;'#010+ + 'sNone) + ZipEx','t;'#010+ ' Log(vlInfo,SInfoArchivingPackage,[APackage.Name,A]);'#010+ ' try'#010+ - ' If (APackage.Directory<>'#039#039') then'#010, + ' If (APackage.Directory<>'#039#039') then'#010+ ' GPathPrefix := APackage.Directory;'#010+ ' DoBeforeArchive(Apackage);'#010+ ' AddPackageMacrosToDictionary(APackage, APackage.Dictionary);'#010+ - ' L:=TStringList.Create;'#010+ + ' ',' L:=TStringList.Create;'#010+ ' L.Sorted:=true;'#010+ ' L.Duplicates:=dupIgnore;'#010+ ' Try'#010+ - ' // Add fpmake','.pp & manifest.xml always'#010+ + ' // Add fpmake.pp & manifest.xml always'#010+ ' L.Add(FPMakePPFile);'#010+ ' L.Add(ManifestFile);'#010+ ' //get all files from all targets'#010+ - ' for ICPU:=Low(TCPU) to high(TCPU) do'#010+ + ' for ICPU:=Low(','TCPU) to high(TCPU) do'#010+ ' for IOS:=Low(TOS) to high(TOS) do'#010+ - ' if OSCPUSupported[IOS,ICPU','] then'#010+ + ' if OSCPUSupported[IOS,ICPU] then'#010+ ' begin'#010+ ' // Make sure that the package is resolved for each targe'+ 't'#010+ - ' ClearResolvedFileNames(APackage);'#010+ + ' ClearResolvedFileNames(APack','age);'#010+ ' ResolveFileNames(APackage,ICPU,IOS,false);'#010+ - ' APackage.GetArchiveFiles','(L, ICPU, IOS);'#010+ + ' APackage.GetArchiveFiles(L, ICPU, IOS);'#010+ ' end;'#010+ ' //from sources'#010+ ' APackage.GetArchiveSourceFiles(L);'#010+ #010+ ' //show all files'#010+ - ' for i := 0 to L.Count-1 do'#010+ + ' for i := 0 to ','L.Count-1 do'#010+ ' Log(vlDebug, Format(SDbgArchivingFile, [L[i]]));'#010+ #010+ '{$ifdef HAS_UNIT_ZIPPER}'#010+ - ' ',' if not Assigned(ArchiveFilesProc) then'#010+ + ' if not Assigned(ArchiveFilesProc) then'#010+ ' begin'#010+ ' ZipFile := TZipper.Create;'#010+ ' try'#010+ ' ZipFile.FileName:=A;'#010+ - ' A := APackage.Dictionary.ReplaceStrings(Defaults.FPrefix);'+ - #010+ + ' ',' A := APackage.Dictionary.ReplaceStrings(Defaults.FPrefix'+ + ');'#010+ ' if A <> '#039#039' then'#010+ - ' ',' A:=IncludeTrailingPathDelimiter(A);'#010+ + ' A:=IncludeTrailingPathDelimiter(A);'#010+ ' for i := 0 to L.Count-1 do'#010+ ' begin'#010+ - ' ZipFile.Entries.AddFileEntry(AddPathPrefix(APackage, L'+ - '[i]), A+L[i]);'#010+ + ' ZipFile.Entries.A','ddFileEntry(AddPathPrefix(APackage,'+ + ' L[i]), A+L[i]);'#010+ ' end;'#010+ - ' ZipFile.ZipAllFile','s;'#010+ + ' ZipFile.ZipAllFiles;'#010+ ' finally'#010+ ' ZipFile.Free;'#010+ ' end;'#010+ ' end'#010+ ' else'#010+ '{$endif HAS_UNIT_ZIPPER}'#010+ - ' CmdArchiveFiles(L,A);'#010+ + ' CmdArchiveFiles(L,A);',#010+ ' Finally'#010+ ' L.Free;'#010+ ' end;'#010+ ' DoAfterArchive(Apackage);'#010+ ' Finally'#010+ - ' If (APackage.Director','y<>'#039#039') then'#010+ + ' If (APackage.Directory<>'#039#039') then'#010+ ' GPathPrefix := '#039#039';'#010+ ' end;'#010+ 'end;'#010+ @@ -8212,78 +8986,78 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'procedure TBuildEngine.DoBeforeClean(APackage: TPackage);'#010+ 'begin'#010+ - ' ExecuteCommands(APackage.Commands,caBeforeClean);'#010+ + ' ExecuteCommands(APacka','ge.Commands,caBeforeClean);'#010+ ' If Assigned(APackage.BeforeClean) then'#010+ - ' APackage.BeforeClean(APackag','e);'#010+ + ' APackage.BeforeClean(APackage);'#010+ ' If Assigned(APackage.BeforeCleanProc) then'#010+ ' APackage.BeforeCleanProc(APackage);'#010+ 'end;'#010+ #010+ #010+ - 'procedure TBuildEngine.DoAfterClean(APackage: TPackage);'#010+ + 'procedure TBuildEngine.DoAfterClean(APackag','e: TPackage);'#010+ 'begin'#010+ ' If Assigned(APackage.AfterClean) then'#010+ ' APackage.AfterClean(APackage);'#010+ - ' If A','ssigned(APackage.AfterInstallProc) then'#010+ + ' If Assigned(APackage.AfterInstallProc) then'#010+ ' APackage.AfterCleanProc(APackage);'#010+ ' ExecuteCommands(APackage.Commands,caAfterClean);'#010+ 'end;'#010+ #010+ #010+ - 'procedure TBuildEngine.Clean(APackage: TPackage; AllTargets: boolean);'+ - #010+ + 'pr','ocedure TBuildEngine.Clean(APackage: TPackage; AllTargets: boolean'+ + ');'#010+ 'var'#010+ ' ACPU: TCpu;'#010+ ' AOS: TOS;'#010+ - ' ','DirectoryList : TStringList;'#010+ + ' DirectoryList : TStringList;'#010+ 'begin'#010+ ' Log(vlInfo,SInfoCleaningPackage,[APackage.Name]);'#010+ ' try'#010+ ' If (APackage.Directory<>'#039#039') then'#010+ - ' EnterDir(APackage.Directory);'#010+ + ' Ent','erDir(APackage.Directory);'#010+ ' // Check for inherited options (packagevariants) from other packag'+ 'es'#010+ - ' ',' ResolveDependencies(APackage.Dependencies, (APackage.Collection '+ - 'as TPackages));'#010+ + ' ResolveDependencies(APackage.Dependencies, (APackage.Collection as'+ + ' TPackages));'#010+ ' CheckDependencies(APackage, False);'#010+ - ' APackage.SetDefaultPackageVariant;'#010+ + ' APackage.Set','DefaultPackageVariant;'#010+ ' DoBeforeClean(Apackage);'#010+ - ' AddPackageMacrosToDictionary(APackage, APacka','ge.Dictionary);'#010+ + ' AddPackageMacrosToDictionary(APackage, APackage.Dictionary);'#010+ ' if AllTargets then'#010+ ' begin'#010+ ' // Remove the unit-and bin-directories completely. This is saf'+ - 'er in case of files'#010+ + 'er in case of file','s'#010+ ' // being renamed and such. See also bug 19655'#010+ - ' DirectoryList := TStringList.Create;'#010, + ' DirectoryList := TStringList.Create;'#010+ ' try'#010+ ' for ACPU:=low(TCpu) to high(TCpu) do if ACPU<>cpuNone then'#010+ - ' for AOS:=low(TOS) to high(TOS) do if AOS<>osNone then'#010+ + ' for AOS:=low(TOS) to high(TOS) do if AOS<>osNo','ne then'#010+ ' begin'#010+ ' if OSCPUSupported[AOS,ACPU] then'#010+ - ' begin'#010, + ' begin'#010+ ' // First perform a normal clean, to be sure that a'+ 'll files'#010+ - ' // which are not in the units- or bin-dir are clea'+ - 'ned. (like'#010+ + ' // which are not in the units- or bin-di','r are cl'+ + 'eaned. (like'#010+ ' // the .fpm file)'#010+ - ' Clean(APackage, ACPU, ','AOS);'#010+ + ' Clean(APackage, ACPU, AOS);'#010+ ' DirectoryList.Add(ExtractFileDir(APackage.GetUnits'+ 'OutputDir(ACPU,AOS)));'#010+ - ' DirectoryList.Add(ExtractFileDir(APackage.GetBinOu'+ - 'tputDir(ACPU,AOS)));'#010+ + ' DirectoryList.Add(Ex','tractFileDir(APackage.GetBin'+ + 'OutputDir(ACPU,AOS)));'#010+ ' end;'#010+ ' end;'#010+ - ' ',' CmdRemoveTrees(DirectoryList);'#010+ + ' CmdRemoveTrees(DirectoryList);'#010+ ' finally'#010+ ' DirectoryList.Free;'#010+ ' end;'#010+ ' end'#010+ ' else'#010+ - ' Clean(APackage, Defaults.CPU, Defaults.OS);'#010+ + ' Clean(APackage, Defaul','ts.CPU, Defaults.OS);'#010+ ' DoAfterClean(Apackage);'#010+ ' Finally'#010+ ' If (APackage.Directory<>'#039#039') then'#010+ - ' ',' EnterDir('#039#039');'#010+ + ' EnterDir('#039#039');'#010+ ' end;'#010+ 'end;'#010+ #010+ @@ -8291,44 +9065,43 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ';'#010+ 'Var'#010+ ' List : TStringList;'#010+ - ' DirectoryList : TStringList;'#010+ + ' DirectoryL','ist : TStringList;'#010+ 'begin'#010+ ' List:=TStringList.Create;'#010+ ' try'#010+ - ' List.Add(APackage.GetUnitConfigOutputF','ilename(ACPU,AOS));'#010+ + ' List.Add(APackage.GetUnitConfigOutputFilename(ACPU,AOS));'#010+ ' APackage.GetCleanFiles(List,ACPU,AOS);'#010+ ' if (List.Count>0) then'#010+ ' begin'#010+ ' CmdDeleteFiles(List);'#010+ - ' DirectoryList := TStringList.Create;'#010+ + ' Dir','ectoryList := TStringList.Create;'#010+ ' try'#010+ ' GetDirectoriesFromFilelist(List,DirectoryList);'#010+ - ' ',' CmdRemoveDirs(DirectoryList);'#010+ + ' CmdRemoveDirs(DirectoryList);'#010+ #010+ ' DirectoryList.Clear;'#010+ ' if DirectoryExists(APackage.GetBinOutputDir(ACPU,AOS)) then'#010+ - ' DirectoryList.Add(APackage.GetBinOutputDir(ACPU,AOS));'#010+ - ' if DirectoryExists(APackage.GetU','nitsOutputDir(ACPU,AOS)) the'+ - 'n'#010+ + ' ',' DirectoryList.Add(APackage.GetBinOutputDir(ACPU,AOS));'#010+ + ' if DirectoryExists(APackage.GetUnitsOutputDir(ACPU,AOS)) then'#010+ ' DirectoryList.Add(APackage.GetUnitsOutputDir(ACPU,AOS));'#010+ ' CmdRemoveDirs(DirectoryList);'#010+ #010+ - ' DirectoryList.Clear;'#010+ + ' ',' DirectoryList.Clear;'#010+ ' if DirectoryExists(ExtractFileDir(APackage.GetBinOutputDir(ACP'+ - 'U,AOS','))) then'#010+ + 'U,AOS))) then'#010+ ' DirectoryList.Add(ExtractFileDir(APackage.GetBinOutputDir(AC'+ 'PU,AOS)));'#010+ - ' if DirectoryExists(ExtractFileDir(APackage.GetUnitsOutputDir(A'+ - 'CPU,AOS))) then'#010+ - ' DirectoryList.Add(ExtractFileDir(APackage.GetUnitsOutp','utDi'+ - 'r(ACPU,AOS)));'#010+ + ' if DirectoryExists(ExtractFileDir(APackag','e.GetUnitsOutputDir'+ + '(ACPU,AOS))) then'#010+ + ' DirectoryList.Add(ExtractFileDir(APackage.GetUnitsOutputDir('+ + 'ACPU,AOS)));'#010+ ' CmdRemoveDirs(DirectoryList);'#010+ ' finally'#010+ ' DirectoryList.Free;'#010+ ' end;'#010+ ' end;'#010+ ' Finally'#010+ - ' List.Free;'#010+ + ' List','.Free;'#010+ ' end;'#010+ 'end;'#010+ #010+ @@ -8336,26 +9109,26 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'Procedure TBuildEngine.PkgList(PkgList: TStrings; APackage : TPackage)'+ ';'#010+ 'begin'#010+ - ' ','Log(vlInfo, Format(SInfoPkgListPackage,[APackage.Name]));'#010+ + ' Log(vlInfo, Format(SInfoPkgListPackage,[APackage.Name]));'#010+ ' APackage.ListPackage(PkgList);'#010+ 'end;'#010+ #010+ #010+ - 'procedure TBuildEngine.Compile(Packages: TPackages);'#010+ + 'procedure TBuildEngine.Compile(Packages: ','TPackages);'#010+ #010+ ' function IsReadyToCompile(APackage:TPackage): boolean;'#010+ ' begin'#010+ ' result := False;'#010+ - ' ',' if not APackage.FProcessing and (APackage.State=tsNeutral) then'#010+ + ' if not APackage.FProcessing and (APackage.State=tsNeutral) then'#010+ ' begin'#010+ ' if PackageOK(APackage) then'#010+ - ' result := ReadyToCompile(APackage)'#010+ + ' result := Ready','ToCompile(APackage)'#010+ ' else'#010+ ' begin'#010+ ' inc(FProgressCount);'#010+ - ' log(vlW','arning,SWarnSkipPackageTargetProgress,[(FProgress'+ - 'Count)/FProgressMax * 100, APackage.Name, Defaults.Target]);'#010+ - ' APackage.FTargetState:=tsNoCompile;'#010+ + ' log(vlWarning,SWarnSkipPackageTargetProgress,[(FProgressCo'+ + 'unt)/FProgressMax * 100, APackage.Name, Defaults.Target]);'#010+ + ' APackage.FTargetS','tate:=tsNoCompile;'#010+ ' end;'#010+ ' end;'#010+ ' end;'#010+ @@ -8363,33 +9136,35 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'Var'#010+ ' I : integer;'#010+ '{$ifndef NO_THREADING}'#010+ - ' Thr ',': Integer;'#010+ + ' Thr : Integer;'#010+ ' Finished : boolean;'#010+ ' ErrorState: boolean;'#010+ ' ErrorMessage: string;'#010+ ' NotifyThreadWaiting : PRTLEvent;'#010+ - ' Threads : array of TCompileWorkerThread;'#010+ + ' Threads : array of TCo','mpileWorkerThread;'#010+ '{$endif NO_THREADING}'#010+ ' P : TPackage;'#010+ #010+ '{$ifndef NO_THREADING}'#010+ - ' procedure ProcessT','hreadResult(ATHread: TCompileWorkerThread);'#010+ + ' procedure ProcessThreadResult(ATHread: TCompileWorkerThread);'#010+ ' var'#010+ ' StartI: integer;'#010+ ' CompilePackage: TPackage;'#010+ ' PackageAvailable: boolean;'#010+ - ' begin'#010+ + ' begin',#010+ ' if AThread.Done then'#010+ ' begin'#010+ + ' { synchronise with the WriteBarrier in the thread }'#010+ + ' ReadBarrier;'#010+ ' if assigned(AThread.APackage) then'#010+ ' begin'#010+ - ' ',' // The thread has completed compiling the package'#010+ + ' // The thread has completed compiling the package'#010, ' if AThread.CompilationOK then'#010+ ' AThread.APackage.FTargetState:=tsCompiled'#010+ - ' else // A problem occured, stop the compilation'#010+ + ' else // A problem occurred, stop the compilation'#010+ ' begin'#010+ - ' ',' ErrorState:=true;'#010+ - ' ErrorMessage:=AThread.ErrorMessage;'#010+ + ' ErrorState:=true;'#010+ + ' ErrorMessage:=A','Thread.ErrorMessage;'#010+ ' Finished:=true;'#010+ ' end;'#010+ ' AThread.APackage := nil;'#010+ @@ -8397,26 +9172,34 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' StartI := I;'#010+ #010+ ' CompilePackage := nil;'#010+ - ' ','PackageAvailable:=false;'#010+ + ' PackageAvailable:=false;'#010+ ' repeat'#010+ - ' if IsReadyToCompile(Packages.PackageItems[i]) then'#010+ + ' if IsRead','yToCompile(Packages.PackageItems[i]) then'#010+ ' CompilePackage := Packages.PackageItems[i];'#010+ ' if not (Packages.PackageItems[i].State in [tsCompiled, tsNoCom'+ 'pile]) then'#010+ - ' ',' PackageAvailable:=true;'#010+ + ' PackageAvailable:=true;'#010+ ' inc(I);'#010+ - ' if I=packages.Count then'#010+ + ' if I','=packages.Count then'#010+ ' i := 0;'#010+ ' until Assigned(CompilePackage) or (I=StartI);'#010+ ' if Assigned(CompilePackage) then'#010+ ' begin'#010+ - ' // Instruct thread to c','ompile package'#010+ - ' AThread.APackage := CompilePackage;'#010+ + ' // Instruct thread to compile package'#010+ + ' AThread.APackage := CompilePacka','ge;'#010+ ' AThread.APackage.FProcessing := true;'#010+ + ' { Commit changes before setting FDone to false, because the '+ + 'threads'#010+ + ' only wait for an event 500ms at a time and hence way wake '+ + 'up'#010+ + ' and see that FDone=false ','before the event is sent and th'+ + 'e changes'#010+ + ' are all committed by the event code }'#010+ + ' WriteBarrier;'#010+ ' AThread.FDone:=False;'#010+ ' RTLeventSetEvent(AThread.NotifyStartTask);'#010+ ' end;'#010+ - ' if not PackageAvailable',' then'#010+ + ' if not PackageAva','ilable then'#010+ ' Finished := True;'#010+ ' end;'#010+ ' end;'#010+ @@ -8429,7 +9212,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' FProgressCount:=0;'#010+ #010+ ' if Defaults.ThreadsAmount<0 then'#010+ - ' begin',#010+ + ' ',' begin'#010+ ' // Do not use any threading to compile the packages'#010+ ' For I:=0 to Packages.Count-1 do'#010+ ' begin'#010+ @@ -8437,7 +9220,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' If PackageOK(P) then'#010+ ' MaybeCompile(P)'#010+ ' else'#010+ - ' begi','n'#010+ + ' ',' begin'#010+ ' inc(FProgressCount);'#010+ ' log(vlWarning,SWarnSkipPackageTargetProgress,[(FProgressCo'+ 'unt)/FProgressMax * 100, P.Name, Defaults.Target]);'#010+ @@ -8446,19 +9229,19 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' end'#010+ ' else'#010+ ' begin'#010+ - '{$ifndef NO_THREADING}'#010+ - ' ',' // Use worker-threads to compile the packages'#010+ + '{$ifndef NO_THREADING}',#010+ + ' // Use worker-threads to compile the packages'#010+ ' ErrorState := False;'#010+ ' Finished := False;'#010+ ' I := 0;'#010+ ' // This event is set by the worker-threads to notify the main/th'+ 'is thread'#010+ - ' // that a package finished it'#039's task.'#010+ - ' ',' NotifyThreadWaiting := RTLEventCreate;'#010+ + ' // that a package finished it'#039's tas','k.'#010+ + ' NotifyThreadWaiting := RTLEventCreate;'#010+ ' SetLength(Threads,Defaults.ThreadsAmount);'#010+ ' // Create all worker-threads'#010+ ' for Thr:=0 to Defaults.ThreadsAmount-1 do'#010+ - ' Threads[Thr] := TCompileWorkerThread.Create(self,NotifyThr','ea'+ + ' Threads[Thr] := TCompileWorkerThread.Create(self,Not','ifyThrea'+ 'dWaiting);'#010+ ' try'#010+ ' // When a thread notifies this thread that it is ready, loop o'+ @@ -8466,21 +9249,21 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' // threads to check their state and if possible assign a new p'+ 'ackage'#010+ ' // to them to compile.'#010+ - ' while not Finished do'#010+ - ' ',' begin'#010+ + ' while not Finished ','do'#010+ + ' begin'#010+ ' RTLeventWaitFor(NotifyThreadWaiting);'#010+ ' for Thr:=0 to Defaults.ThreadsAmount-1 do if not Finished '+ 'then'#010+ ' ProcessThreadResult(Threads[Thr]);'#010+ ' end;'#010+ - ' // Compilation finished or abo','rted. Wait for all threads to '+ + ' // Compilation finished ','or aborted. Wait for all threads to '+ 'end.'#010+ ' for thr:=0 to Defaults.ThreadsAmount-1 do'#010+ ' begin'#010+ ' Threads[Thr].Terminate;'#010+ ' RTLeventSetEvent(Threads[Thr].NotifyStartTask);'#010+ ' Threads[Thr].WaitFor;'#010+ - ' ',' end;'#010+ + ' ',' end;'#010+ ' finally'#010+ ' RTLeventdestroy(NotifyThreadWaiting);'#010+ ' for thr:=0 to Defaults.ThreadsAmount-1 do'#010+ @@ -8488,7 +9271,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' end;'#010+ ' if ErrorState then'#010+ ' raise Exception.Create(ErrorMessage);'#010+ - '{$endif NO_THREAD','ING}'#010+ + '{$endif NO_','THREADING}'#010+ ' end;'#010+ ' NotifyEventCollection.CallEvents(neaAfterCompile, Self);'#010+ 'end;'#010+ @@ -8499,8 +9282,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' I : Integer;'#010+ ' P : TPackage;'#010+ 'begin'#010+ - ' NotifyEventCollection.CallEvents(neaBeforeInstall, Self);'#010+ - ' For ','I:=0 to Packages.Count-1 do'#010+ + ' NotifyEventCollection.CallEvents(neaBeforeInstall, Self);'#010, + ' For I:=0 to Packages.Count-1 do'#010+ ' begin'#010+ ' P:=Packages.PackageItems[i];'#010+ ' If PackageOK(P) then'#010+ @@ -8508,7 +9291,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Install(P, False);'#010+ ' log(vlWarning, SWarnInstallationPackagecomplete, [P.Name, De'+ 'faults.Target]);'#010+ - ' en','d'#010+ + ' ',' end'#010+ ' else'#010+ ' log(vlWarning,SWarnSkipPackageTarget,[P.Name, Defaults.Target]'+ ');'#010+ @@ -8519,8 +9302,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'procedure TBuildEngine.ZipInstall(Packages: TPackages);'#010+ #010+ 'var'#010+ - ' I : Integer;'#010+ - ' P ',': TPackage;'#010+ + ' I : Integer',';'#010+ + ' P : TPackage;'#010+ #010+ 'begin'#010+ ' NotifyEventCollection.CallEvents(neaBeforeInstall, Self);'#010+ @@ -8529,9 +9312,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Defaults.IntSetBaseInstallDir('#039'lib/fpc/'#039' + Defaults.FCompi'+ 'lerVersion+ '#039'/'#039')'#010+ ' else'#010+ - ' Defaults.IntSetBaseInstallDir('#039#039');'#010+ + ' Defaults.IntSetBaseInstallDir('#039#039');'#010, #010+ - ' try',#010+ + ' try'#010+ ' For I:=0 to Packages.Count-1 do'#010+ ' begin'#010+ ' P:=Packages.PackageItems[i];'#010+ @@ -8539,7 +9322,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' begin'#010+ ' Install(P, True);'#010+ ' log(vlWarning, SWarnInstallationPackagecomplete, [P.Name, '+ - 'Defaults.','Target]);'#010+ + 'Def','aults.Target]);'#010+ ' end'#010+ ' else'#010+ ' log(vlWarning,SWarnSkipPackageTarget,[P.Name, Defaults.Targe'+ @@ -8553,7 +9336,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'procedure T','BuildEngine.UnInstall(Packages: TPackages);'#010+ + 'proce','dure TBuildEngine.UnInstall(Packages: TPackages);'#010+ 'Var'#010+ ' I : Integer;'#010+ ' P : TPackage;'#010+ @@ -8562,7 +9345,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' For I:=0 to Packages.Count-1 do'#010+ ' begin'#010+ ' P:=Packages.PackageItems[i];'#010+ - ' UnInstal','l(P);'#010+ + ' Un','Install(P);'#010+ ' end;'#010+ ' NotifyEventCollection.CallEvents(neaAfterUnInstall, Self);'#010+ 'end;'#010+ @@ -8573,16 +9356,16 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' I : Integer;'#010+ ' P : TPackage;'#010+ 'begin'#010+ - ' NotifyEventCollection.CallEvents(neaBeforeArchive, Self);'#010+ - ' L','og(vlDebug, SDbgBuildEngineArchiving);'#010+ + ' NotifyEventCollection.CallEvents(neaBeforeArchive, Self',');'#010+ + ' Log(vlDebug, SDbgBuildEngineArchiving);'#010+ ' For I:=0 to Packages.Count-1 do'#010+ ' begin'#010+ ' P:=Packages.PackageItems[i];'#010+ ' // Force generation of manifest.xml, this is required for the re'+ 'pository'#010+ ' Manifest(nil, P);'#010+ - ' Archive(P);'#010+ - ' ',' end;'#010+ + ' Archive','(P);'#010+ + ' end;'#010+ ' NotifyEventCollection.CallEvents(neaAfterArchive, Self);'#010+ 'end;'#010+ #010+ @@ -8595,22 +9378,22 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' P : TPackage;'#010+ ' FN: string;'#010+ 'begin'#010+ - ' NotifyEventCollectio','n.CallEvents(neaBeforeManifest, Self);'#010+ + ' NotifyEventCol','lection.CallEvents(neaBeforeManifest, Self);'#010+ ' Log(vlDebug, SDbgBuildEngineGenerateManifests);'#010+ #010+ ' L:=TStringList.Create;'#010+ ' Try'#010+ ' Log(vlDebug, Format(SDbgGenerating, [ManifestFile]));'#010+ ' L.Add('#039''#039');'#010+ - ' L.Add('#039''#039');'#010, + ' L.Add('#039''#039');'#010+ ' if assigned(Packages) then'#010+ ' begin'#010+ ' For I:=0 to Packages.Count-1 do'#010+ ' begin'#010+ ' P:=Packages.PackageItems[i];'#010+ ' Log(vlInfo, Format(SInfoManifestPackage,[P.Name]));'#010+ - ' P.GetManifest(L);'#010+ - ' ',' end'#010+ + ' P.GetManifest(L);'#010, + ' end'#010+ ' end;'#010+ ' if assigned(Package) then'#010+ ' begin'#010+ @@ -8619,7 +9402,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' end;'#010+ ' L.Add('#039''#039');'#010+ ' FN := ManifestFile;'#010+ - ' if assigned(Pack','age) then'#010+ + ' if assigne','d(Package) then'#010+ ' FN := FixPath(Package.Directory, True)+FN;'#010+ ' L.SaveToFile(FN);'#010+ ' Finally'#010+ @@ -8631,8 +9414,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ #010+ 'procedure TBuildEngine.PkgList(Packages: TPackages);'#010+ - 'Var'#010+ - ' I :',' Integer;'#010+ + 'Var',#010+ + ' I : Integer;'#010+ ' P : TPackage;'#010+ ' L : TStrings;'#010+ ' PKGL : String;'#010+ @@ -8640,14 +9423,14 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' L:=TStringList.Create;'#010+ ' NotifyEventCollection.CallEvents(neaBeforePkgList, Self);'#010+ ' Log(vlDebug, SDbgBuildEngineGeneratePkgList);'#010+ - '{ Consider only the target OS, because the',' installer would be run th'+ + '{ Consider only the target OS, becau','se the installer would be run th'+ 'ere }'#010+ ' if Defaults.OS in AllLimit83fsOSes then'#010+ ' PKGL := PkgListFileBase + OSToString (Defaults.OS) + PkgListFileEx'+ 't'#010+ ' else if Defaults.OS = osNone then'#010+ - ' PKGL := PkgListFileBase + '#039'src'#039' + PkgListFileExt'#010+ - ' els','e'#010+ + ' PKGL := PkgListFileBase + '#039'src'#039' + PkgListFileExt',#010+ + ' else'#010+ ' PKGL := PkgListFileBase + CPUToString (Defaults.CPU) + '#039'-'#039' '+ '+'#010+ ' OSToString (Defaults.OS) + PkgLis'+ @@ -8656,7 +9439,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Try'#010+ ' Log(vlDebug, Format(SDbgGenerating, [PKGL]));'#010+ #010+ - ' For I:=0 to Packages.Count-1 do',#010+ + ' For I:=0 to Packages.Coun','t-1 do'#010+ ' begin'#010+ ' P:=Packages.PackageItems[i];'#010+ ' PkgList(L, P);'#010+ @@ -8670,7 +9453,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' NotifyEventCollection.CallEvents(neaAfterPkgList, Self);'#010+ 'end;'#010+ #010+ - 'procedure TBuildEngine.Clean(Package','s: TPackages; AllTargets: boolea'+ + 'procedure TBuildEngine.Clean(P','ackages: TPackages; AllTargets: boolea'+ 'n);'#010+ 'Var'#010+ ' I : Integer;'#010+ @@ -8680,7 +9463,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Log(vldebug, SDbgBuildEngineCleaning);'#010+ ' For I:=0 to Packages.Count-1 do'#010+ ' begin'#010+ - ' P:=Packages.Pa','ckageItems[i];'#010+ + ' P:=Packa','ges.PackageItems[i];'#010+ ' If AllTargets or PackageOK(P) then'#010+ ' Clean(P, AllTargets);'#010+ ' log(vlWarning, SWarnCleanPackagecomplete, [P.Name]);'#010+ @@ -8688,7 +9471,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' NotifyEventCollection.CallEvents(neaAfterClean, Self);'#010+ 'end;'#010+ #010+ - '{**********************','*********************************************'+ + '{****************','***************************************************'+ '*********'#010+ ' TFPVersion'#010+ '**********************************************************************'+ @@ -8696,8 +9479,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'function TFPVersion.GetAsString: String;'#010+ 'begin'#010+ - ' if Empty then'#010+ - ' ',' Result:='#039''#039#010+ + ' if Empty ','then'#010+ + ' Result:='#039''#039#010+ ' else'#010+ ' begin'#010+ ' Result := '#039#039';'#010+ @@ -8706,7 +9489,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' if Minor <> -1 then'#010+ ' Result := Result + '#039'.'#039' + IntToStr(Minor);'#010+ ' if Micro <> -1 then'#010+ - ' Result := Result + ',#039'.'#039' + IntToStr(Micro);'#010+ + ' Result := Res','ult + '#039'.'#039' + IntToStr(Micro);'#010+ ' if Build <> -1 then'#010+ ' Result := Result + '#039'-'#039' + IntToStr(Build);'#010+ ' end;'#010+ @@ -8717,7 +9500,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Result:=(Major=0) and (Minor=0) and (Micro=0) and (Build=0);'#010+ 'end;'#010+ #010+ - 'procedure TFPVers','ion.SetAsString(const AValue: String);'#010+ + 'procedure T','FPVersion.SetAsString(const AValue: String);'#010+ #010+ ' Function NextDigit(sep : Char; var V : string) : integer;'#010+ ' Var'#010+ @@ -8727,7 +9510,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' If (P=0) then'#010+ ' P:=Length(V)+1;'#010+ ' Result:=StrToIntDef(Copy(V,1,P-1),-1);'#010+ - ' If ','Result<>-1 then'#010+ + ' ',' If Result<>-1 then'#010+ ' Delete(V,1,P);'#010+ ' end;'#010+ #010+ @@ -8740,7 +9523,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' exit;'#010+ ' V:=AValue;'#010+ ' Major:=NextDigit('#039'.'#039',V);'#010+ - ' Minor:=NextDigit('#039'.'#039',','V);'#010+ + ' Minor:=NextDigi','t('#039'.'#039',V);'#010+ ' Micro:=NextDigit('#039'-'#039',V);'#010+ ' Build:=NextDigit(#0,V);'#010+ 'end;'#010+ @@ -8757,7 +9540,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'Var'#010+ ' V : TFPVersion;'#010+ 'begin'#010+ - ' if So','urce is TFPVersion then'#010+ + ' ',' if Source is TFPVersion then'#010+ ' begin'#010+ ' V:=Source as TFPVersion;'#010+ ' Major:=V.Major;'#010+ @@ -8769,7 +9552,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' inherited Assign(Source);'#010+ 'end;'#010+ #010+ - 'function TFPVersion.CompareVersion(AVersion: T','FPVersion): Integer;'#010+ + 'function TFPVersion.CompareVersion(AVers','ion: TFPVersion): Integer;'#010+ 'begin'#010+ ' Result:=Major-AVersion.Major;'#010+ ' If (Result=0) then'#010+ @@ -8778,8 +9561,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' if (Result=0) then'#010+ ' begin'#010+ ' Result:=Micro-AVersion.Micro;'#010+ - ' If (Result=0) then'#010+ - ' ',' Result:=Build-AVersion.Build;'#010+ + ' If (Result=0) then'#010, + ' Result:=Build-AVersion.Build;'#010+ ' end;'#010+ ' end;'#010+ 'end;'#010+ @@ -8790,7 +9573,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - '{************************************************************','*******'+ + '{******************************************************','*************'+ '*********'#010+ ' TTarget'#010+ '**********************************************************************'+ @@ -8799,13 +9582,13 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'constructor TTarget.Create(ACollection: TCollection);'#010+ 'begin'#010+ ' inherited Create(ACollection);'#010+ - ' FInstall',':=True;'#010+ + ' FI','nstall:=True;'#010+ ' FCPUs:=AllCPUs;'#010+ ' FOSes:=AllOSes;'#010+ ' FUnitPath:=TConditionalStrings.Create(TConditionalString);'#010+ ' FIncludePath:=TConditionalStrings.Create(TConditionalString);'#010+ ' FObjectPath:=TConditionalStrings.Create(TConditionalString);'#010+ - ' FDepen','dencies:=TDependencies.Create(TDependency);'#010+ + ' ','FDependencies:=TDependencies.Create(TDependency);'#010+ ' FCommands:=TCommands.Create(TCommand);'#010+ 'end;'#010+ #010+ @@ -8815,8 +9598,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' FreeAndNil(FUnitPath);'#010+ ' FreeAndNil(FObjectPath);'#010+ ' FreeAndNil(FIncludePath);'#010+ - ' FreeAndNil(FDependencies);'#010+ - ' Fre','eAndNil(FCommands);'#010+ + ' FreeAndNil(FDependencies);',#010+ + ' FreeAndNil(FCommands);'#010+ ' FreeAndNil(Foptions);'#010+ ' inherited Destroy;'#010+ 'end;'#010+ @@ -8828,31 +9611,31 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' if Dest is TTarget then'#010+ ' begin'#010+ ' DestTarget := TTarget(Dest);'#010+ - ' DestTarget.Depen','dencies.Assign(Dependencies);'#010+ + ' DestTarget','.Dependencies.Assign(Dependencies);'#010+ ' DestTarget.Commands.Assign(Commands);'#010+ ' DestTarget.FTargetState := FTargetState;'#010+ ' DestTarget.TargetType := TargetType;'#010+ ' DestTarget.CPUs := CPUs;'#010+ ' DestTarget.OSes := OSes;'#010+ - ' DestTarget.Mode := M','ode;'#010+ + ' DestTarget.Mod','e := Mode;'#010+ ' DestTarget.Options := Options;'#010+ ' DestTarget.Name := Name;'#010+ ' DestTarget.Extension:= Extension;'#010+ ' DestTarget.FPCTarget := FPCTarget;'#010+ ' DestTarget.FileType := FileType;'#010+ ' DestTarget.Directory := Directory;'#010+ - ' DestTarget.Re','sourceStrings := ResourceStrings;'#010+ + ' DestTar','get.ResourceStrings := ResourceStrings;'#010+ ' DestTarget.Install := Install;'#010+ ' DestTarget.FTargetSourceFileName := fTargetSourceFileName;'#010+ ' DestTarget.ObjectPath.Assign(ObjectPath);'#010+ ' DestTarget.UnitPath.Assign(UnitPath);'#010+ - ' DestTarget.Inclu','dePath.Assign(IncludePath);'#010+ + ' DestTarget','.IncludePath.Assign(IncludePath);'#010+ ' DestTarget.FXML := FXML;'#010+ ' DestTarget.AfterCompile := AfterCompile;'#010+ ' DestTarget.BeforeCompile := BeforeCompile;'#010+ ' DestTarget.BeforeClean := BeforeCompile;'#010+ - ' DestTarget.AfterClean := AfterClean;'#010+ - ' e','nd'#010+ + ' DestTarget.AfterClean := AfterClean;',#010+ + ' end'#010+ ' else'#010+ ' inherited AssignTo(Dest);'#010+ 'end;'#010+ @@ -8865,16 +9648,16 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ 'function TTarget.GetImportLibFileName(AOS : TOS) : String;'#010+ - 'begin'#010+ - ' ',' result := GetImportLibraryFilename(Name,AOS);'#010+ + 'b','egin'#010+ + ' result := GetImportLibraryFilename(Name,AOS);'#010+ 'end;'#010+ #010+ 'function TTarget.GetUnitLibFileName(AOS : TOS): String;'#010+ 'begin'#010+ ' if AOS in [atari,netwlibc,go32v2,watcom,wdosx,msdos,win16] then'#010+ ' Result := Name+LibExt'#010+ - ' else if AOS in [java] then'#010+ - ' ','Result:=Name+'#039'.jar'#039#010+ + ' else if AOS in [java] the','n'#010+ + ' Result:=Name+'#039'.jar'#039#010+ ' else if AOS in [macos] then'#010+ ' Result:=Name+'#039'Lib'#039#010+ ' else'#010+ @@ -8884,7 +9667,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'procedure TTarget.SetOptions(const AValue: TStrings);'#010+ 'begin'#010+ ' If (AValue=Nil) or (AValue.Count=0) then'#010+ - ' FreeAndNil(FOpt','ions)'#010+ + ' FreeAndNi','l(FOptions)'#010+ ' else'#010+ ' Options.Assign(AValue);'#010+ 'end;'#010+ @@ -8901,7 +9684,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'function TTarget.GetObjectFile','Name: String;'#010+ + 'function TTarget.GetObje','ctFileName: String;'#010+ 'begin'#010+ ' Result:=Name+ObjExt;'#010+ 'end;'#010+ @@ -8919,22 +9702,46 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'function TTarget.GetProgramFileName(','AOS : TOS): String;'#010+ + 'function TTarget.GetBinFileBas','e: String;'#010+ + 'begin'#010+ + ' if FExeName <> '#039#039' then'#010+ + ' Result := FExeName'#010+ + ' else'#010+ + ' Result:=Name;'#010+ + 'end;'#010+ + #010+ + #010+ + 'function TTarget.GetProgramFileName(AOS : TOS): String;'#010+ + 'begin'#010+ + ' result := AddProgramExtension(GetBinFileBase, AOS);'#010+ + 'end;'#010+ + #010+ + #010+ + 'function TTarget.G','etProgramDebugFileName(AOS: TOS): String;'#010+ + 'begin'#010+ + ' result := GetBinFileBase + DbgExt;'#010+ + 'end;'#010+ + #010+ + 'function TTarget.GetLibraryFileName(AOS : TOS): String;'#010+ 'begin'#010+ - ' result := AddProgramExtension(Name, AOS);'#010+ + ' result := AddLibraryExtension(GetBinFileBase, AOS);'#010+ + ' if aOS in AllUnixOSes then'#010+ + ' ','Result:='#039'lib'#039'+Result;'#010+ 'end;'#010+ #010+ #010+ - 'function TTarget.GetProgramDebugFileName(AOS: TOS): String;'#010+ + 'function TTarget.GetLibraryDebugFileName(AOS: TOS): String;'#010+ 'begin'#010+ - ' result := Name + DbgExt;'#010+ + ' result := GetBinFileBase + DbgExt;'#010+ 'end;'#010+ #010+ #010+ 'function TTarget.GetOutputFileName(AOs: TOS): String;'#010+ 'begin'#010+ - ' i','f TargetType in UnitTargets then'#010+ - ' Result:=GetUnitFileName'#010+ + ' if TargetType in UnitTargets then'#010+ + ' R','esult:=GetUnitFileName'#010+ + ' else if TargetType=ttSharedLibrary then'#010+ + ' Result:=GetLibraryFileName(AOs)'#010+ ' else'#010+ ' Result:=GetProgramFileName(AOs);'#010+ 'end;'#010+ @@ -8945,8 +9752,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'procedure TTarget.SetName(const AValue: String);'#010+ - 'V','ar'#010+ + 'procedure ','TTarget.SetName(const AValue: String);'#010+ + 'Var'#010+ ' D,N,E : String;'#010+ 'begin'#010+ ' N:=FixPath(AValue, False);'#010+ @@ -8955,78 +9762,98 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' N:=ExtractFileName(N);'#010+ ' inherited SetName(Copy(N,1,Length(N)-Length(E)));'#010+ ' FExtension:=E;'#010+ - ' FDirectory:=D;'#010+ + ' ',' FDirectory:=D;'#010+ + 'end;'#010+ + #010+ + 'procedure TTarget.SetExeName(const AValue: String);'#010+ + 'Var'#010+ + ' N,E : String;'#010+ + 'begin'#010+ + ' N:=FixPath(AValue, False);'#010+ + ' E:=ExtractFileExt(N);'#010+ + ' N:=ExtractFileName(N);'#010+ + ' FExeName:=Copy(N,1,Length(N)-Length(E));'#010+ + ' { Use exact AValu','e for -o option }'#010+ + ' Options.Add('#039'-o'#039'+AValue);'#010+ 'end;'#010+ #010+ - 'procedure TTarget.','SetXML(const AValue: string);'#010+ + 'procedure TTarget.SetXML(const AValue: string);'#010+ 'begin'#010+ ' FXML:=FixPath(AValue, False);'#010+ 'end;'#010+ #010+ 'procedure TTarget.GetCleanFiles(List: TStrings; const APrefixU, APrefi'+ - 'xB : String; ACPU: TCPU; AOS : TOS);'#010+ + 'xB : String; ACPU: TCPU; A','OS : TOS);'#010+ 'begin'#010+ ' If not(ACPU in CPUs) or not(AOS in OSes) then'#010+ - ' e','xit;'#010+ + ' exit;'#010+ ' List.Add(APrefixU + ObjectFileName);'#010+ ' If (TargetType in [ttUnit,ttImplicitUnit,ttExampleUnit, ttCleanOnlyU'+ 'nit]) then'#010+ ' begin'#010+ - ' List.Add(APrefixU + UnitFileName);'#010+ - ' if (AOS in AllSmartLinkLibraryOSes) and FileExists(APrefix','U + '+ - 'GetUnitLibFileName(AOS)) then'#010+ + ' List.Add(APrefixU + UnitFileN','ame);'#010+ + ' if (AOS in AllSmartLinkLibraryOSes) and FileExists(APrefixU + Ge'+ + 'tUnitLibFileName(AOS)) then'#010+ ' List.Add(APrefixU + GetUnitLibFileName(AOS));'#010+ ' if (AOS in AllImportLibraryOSes) and FileExists(APrefixU + GetIm'+ - 'portLibFilename(AOS)) then'#010+ - ' List.Add(APrefixU + GetImportLibFilename(AOS));',#010+ + 'portLibFilen','ame(AOS)) then'#010+ + ' List.Add(APrefixU + GetImportLibFilename(AOS));'#010+ ' end'#010+ ' else If (TargetType in [ttProgram,ttExampleProgram]) then'#010+ ' begin'#010+ ' List.Add(APrefixB + GetProgramFileName(AOS));'#010+ - ' if FileExists(APrefixB + GetProgramDebugFileName(AOS)) then'#010+ - ' List.Add(APrefixB + GetProgramDebugFileNa','me(AOS));'#010+ + ' if FileExists(APrefixB + GetProgramDe','bugFileName(AOS)) then'#010+ + ' List.Add(APrefixB + GetProgramDebugFileName(AOS));'#010+ + ' end'#010+ + ' else If (TargetType in [ttSharedLibrary]) then'#010+ + ' begin'#010+ + ' List.Add(APrefixB + GetLibraryFileName(AOS));'#010+ + ' if FileExists(APrefixB + GetLibraryDebu','gFileName(AOS)) then'#010+ + ' List.Add(APrefixB + GetLibraryDebugFileName(AOS));'#010+ ' end;'#010+ ' If ResourceStrings then'#010+ ' begin'#010+ ' // choose between 2 possible resource files'#010+ ' if FileExists(APrefixU + RSJFileName) then'#010+ - ' List.Add(APrefixU + RSJFileName)'#010+ + ' List.Add(A','PrefixU + RSJFileName)'#010+ ' else'#010+ - ' List.Add(APrefixU + RSTFil','eName);'#010+ + ' List.Add(APrefixU + RSTFileName);'#010+ ' end;'#010+ ' // Maybe add later ? AddConditionalStrings(List,CleanFiles);'#010+ 'end;'#010+ #010+ #010+ 'procedure TTarget.GetInstallFiles(List: TStrings; const APrefixU, APre'+ - 'fixB: String; ACPU: TCPU; AOS : TOS);'#010+ + 'fixB: String; ','ACPU: TCPU; AOS : TOS);'#010+ 'var'#010+ ' UnitsDir : string;'#010+ 'begin'#010+ - ' UnitsDir :=',' Installer.BuildEngine.AddPathPrefix(nil, APrefixU);'#010+ - ' If Not (TargetType in [ttProgram,ttExampleProgram]) and FileExists(U'+ - 'nitsDir + ObjectFileName) then'#010+ - ' // The compiler does not create an objectfile for all programs.'#010+ - ' List.Add(APref','ixU + ObjectFileName);'#010+ + ' UnitsDir := Installer.BuildEngine.AddPathPrefix(nil, APrefixU);'#010+ + ' If Not (TargetType in [ttProgram,ttSharedLibrary,ttExampleProgram]) '+ + 'and FileExists(UnitsDir + ObjectFileName) then'#010+ + ' ',' // The compiler does not create an objectfile for all programs.'#010+ + ' List.Add(APrefixU + ObjectFileName);'#010+ ' If (TargetType in [ttUnit,ttImplicitUnit,ttExampleUnit]) then'#010+ ' begin'#010+ ' List.Add(APrefixU + UnitFileName);'#010+ - ' if (AOS in AllSmartLinkLibraryOSes) and FileExists(UnitsDir + Ge'+ - 'tUnitLibFileName(AOS)) then'#010+ - ' ',' List.Add(APrefixU + GetUnitLibFileName(AOS));'#010+ + ' if (AOS in A','llSmartLinkLibraryOSes) and FileExists(UnitsDir + '+ + 'GetUnitLibFileName(AOS)) then'#010+ + ' List.Add(APrefixU + GetUnitLibFileName(AOS));'#010+ ' if (AOS in AllImportLibraryOSes) and FileExists(UnitsDir + GetIm'+ 'portLibFilename(AOS)) then'#010+ - ' List.Add(APrefixU + GetImportLibFilename(AOS));'#010+ + ' L','ist.Add(APrefixU + GetImportLibFilename(AOS));'#010+ ' end'#010+ - ' else If (TargetType in [ttP','rogram,ttExampleProgram]) then'#010+ - ' List.Add(APrefixB + GetProgramFileName(AOS));'#010+ + ' else If (TargetType in [ttProgram,ttExampleProgram]) then'#010+ + ' List.Add(APrefixB + GetProgramFileName(AOS))'#010+ + ' else If (TargetType in [ttSharedLibrary]) then'#010+ + ' List.Add(APrefixB + Get','LibraryFileName(AOS));'#010+ ' If ResourceStrings then'#010+ ' begin'#010+ ' // choose between 2 possible resource files'#010+ ' if FileExists(UnitsDir + RSJFileName) then'#010+ - ' List.Add(APrefix','U + RSJFileName)'#010+ + ' List.Add(APrefixU + RSJFileName)'#010+ ' else'#010+ - ' List.Add(APrefixU + RSTFileName);'#010+ + ' List.Add(APrefixU + RS','TFileName);'#010+ ' end;'#010+ 'end;'#010+ #010+ @@ -9037,18 +9864,18 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' i : integer;'#010+ ' D : TDependency;'#010+ 'begin'#010+ - ' If not(ACPU in CPUs) or not(AOS in',' OSes) then'#010+ + ' If not(ACPU in CPUs) or not(AOS in OSes) then'#010+ ' exit;'#010+ ' // Main source'#010+ - ' if TargetSourceFileName<>'#039#039' then'#010+ + ' if TargetSourceFi','leName<>'#039#039' then'#010+ ' List.Add(TargetSourceFileName);'#010+ ' // Includes'#010+ ' for i:=0 to Dependencies.Count-1 do'#010+ ' begin'#010+ ' D:=Dependencies[i];'#010+ - ' if (D.DependencyType=depInclude) and',#010+ + ' if (D.DependencyType=depInclude) and'#010+ ' (D.TargetFileName<>'#039#039') then'#010+ - ' List.Add(D.TargetFileName);'#010+ + ' List.Add(D.T','argetFileName);'#010+ ' end;'#010+ ' // FPDoc files'#010+ ' if XML <> '#039#039' then'#010+ @@ -9059,17 +9886,17 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - '{**********************************','*********************************'+ - '*********'#010+ - ' TSource'#010+ + '{*********************************************************************'+ + '*******'#010+ + ' ',' TSource'#010+ '**********************************************************************'+ '******}'#010+ #010+ 'function TSource.GetInstallSourcePath: string;'#010+ 'begin'#010+ - ' if FInstallSourcePath<','>'#039#039' then'#010+ + ' if FInstallSourcePath<>'#039#039' then'#010+ ' result := FInstallSourcePath'#010+ - ' else if SourceType=stExample then'#010+ + ' else if Source','Type=stExample then'#010+ ' result := '#039'examples'#039#010+ ' else'#010+ ' result := '#039#039';'#010+ @@ -9081,29 +9908,29 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'destru','ctor TSource.Destroy;'#010+ + 'destructor TSource.Destroy;'#010+ 'begin'#010+ ' inherited Destroy;'#010+ 'end;'#010+ #010+ - 'procedure TSource.GetInstallFiles(List: TStrings);'#010+ + 'pro','cedure TSource.GetInstallFiles(List: TStrings);'#010+ 'begin'#010+ ' if InstallSourcePath<>'#039#039' then'#010+ ' list.Values[name] := (IncludeTrailingPathDelimiter(InstallSourcePa'+ - 'th)+ExtractFileName(Name))',#010+ + 'th)+ExtractFileName(Name))'#010+ ' else'#010+ ' list.add(Name);'#010+ 'end;'#010+ #010+ #010+ - '{*********************************************************************'+ - '*******'#010+ + '{**********************','*********************************************'+ + '*********'#010+ ' TCommands'#010+ '**********************************************************************'+ '******}'#010+ #010+ - 'funct','ion TCommands.GetCommand(const Dest : String): TCommand;'#010+ - 'begin'#010+ + 'function TCommands.GetCommand(const Dest : String): TCommand;'#010+ + 'b','egin'#010+ ' Result:=TCommand(ItemByName(Dest));'#010+ 'end;'#010+ #010+ @@ -9113,9 +9940,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'procedure TCommands.SetC','ommandItem(Index : Integer; const AValue: TC'+ - 'ommand);'#010+ - 'begin'#010+ + 'procedure TCommands.SetCommandItem(Index : Integer; const AValue: TCom'+ + 'mand);'#010+ + 'begin',#010+ ' Items[Index]:=AValue;'#010+ 'end;'#010+ #010+ @@ -9126,22 +9953,21 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'function TCommands.AddCommand','(const Cmd, Options: String): TCommand;'+ - #010+ + 'function TCommands.AddCommand(const Cmd, Options: String): TCommand;'#010+ 'begin'#010+ - ' Result:=AddCommand(fdefaultAt,Cmd,Options,'#039#039','#039#039');'#010+ + ' Result:=Ad','dCommand(fdefaultAt,Cmd,Options,'#039#039','#039#039');'#010+ 'end;'#010+ #010+ #010+ 'function TCommands.AddCommand(const Cmd, Options, Dest, Source: String'+ ' ): TCommand;'#010+ 'begin'#010+ - ' Result:=AddCommand(fdefaultAt,Cmd,options,D','est,Source);'#010+ + ' Result:=AddCommand(fdefaultAt,Cmd,options,Dest,Source);'#010+ 'end;'#010+ #010+ #010+ - 'Function TCommands.AddCommand(At: TCommandAt; const Cmd: String) : TCo'+ - 'mmand;'#010+ + 'Function TCommands.AddCommand(At: TCom','mandAt; const Cmd: String) : T'+ + 'Command;'#010+ 'begin'#010+ ' Result:=AddCommand(At,Cmd,'#039#039','#039#039','#039#039');'#010+ 'end;'#010+ @@ -9149,20 +9975,20 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'function TCommands.AddCommand(At: TCommandAt; const Cmd, Options: Stri'+ 'ng ): TCommand;'#010+ - 'begi','n'#010+ + 'begin'#010+ ' Result:=AddCommand(At,Cmd,Options,'#039#039','#039#039');'#010+ 'end;'#010+ #010+ #010+ - 'function TCommands.AddCommand(At: TCommandAt; const Cmd, Options, Dest'+ - ', Source: String): TCommand;'#010+ + 'funct','ion TCommands.AddCommand(At: TCommandAt; const Cmd, Options, De'+ + 'st, Source: String): TCommand;'#010+ 'begin'#010+ ' Result:=Add as TCommand;'#010+ ' Result.Command:=Cmd;'#010+ ' If (Options<>'#039#039') then'#010+ - ' Resu','lt.ParseOptions(Options);'#010+ + ' Result.ParseOptions(Options);'#010+ ' Result.At:=At;'#010+ - ' Result.SourceFile:=Source;'#010+ + ' Result.Source','File:=Source;'#010+ ' Result.DestFile:=Dest;'#010+ 'end;'#010+ #010+ @@ -9170,8 +9996,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( '{*********************************************************************'+ '*******'#010+ ' TConditionalString'#010+ - '************','********************************************************'+ - '********}'#010+ + '**********************************************************************', + '******}'#010+ #010+ 'Constructor TConditionalString.Create;'#010+ 'begin'#010+ @@ -9181,9 +10007,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ '{*********************************************************************'+ '*******'#010+ - ' ',' TConditionalStrings'#010+ - '**********************************************************************'+ - '******}'#010+ + ' TConditionalStrings'#010+ + '**********************************','**********************************'+ + '********}'#010+ #010+ 'Constructor TConditionalStrings.Create(AClass:TConditionalStringClass)'+ ';'#010+ @@ -9193,8 +10019,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'function TCo','nditionalStrings.GetConditionalString(Index : Integer): '+ - 'TConditionalString;'#010+ + 'function TConditionalStrings.GetConditionalString(Index : Integer): TC', + 'onditionalString;'#010+ 'begin'#010+ ' Result:=TConditionalString(Items[Index]);'#010+ 'end;'#010+ @@ -9202,23 +10028,23 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ 'procedure TConditionalStrings.SetConditionalString(Index : Integer; co'+ 'nst AValue: TConditionalString);'#010+ - 'begi','n'#010+ + 'begin'#010+ ' Items[Index]:=AValue;'#010+ 'end;'#010+ #010+ #010+ - 'Function TConditionalStrings.Add(Const Value : String) : TConditionalS'+ - 'tring;'#010+ + 'Function TConditionalStri','ngs.Add(Const Value : String) : TConditiona'+ + 'lString;'#010+ 'begin'#010+ ' result:=Add(Value,AllCPUs,AllOSes);'#010+ 'end;'#010+ #010+ #010+ '{$ifdef cpu_only_overloads}'#010+ - 'Function TConditionalStrings.Add(Const Value : Stri','ng;const CPUs:TCP'+ - 'Us) : TConditionalString;'#010+ + 'Function TConditionalStrings.Add(Const Value : String;const CPUs:TCPUs'+ + ') : TConditionalString;'#010+ 'begin'#010+ - ' result:=Add(Value,CPUs,AllOSes);'#010+ + ' result:','=Add(Value,CPUs,AllOSes);'#010+ 'end;'#010+ '{$endif cpu_only_overloads}'#010+ #010+ @@ -9226,31 +10052,31 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'Function TConditionalStrings.Add(Const Value : String;const OSes:TOSes'+ ') : TConditionalString;'#010+ 'begin'#010+ - ' result:=Add(Value,A','llCPUs,OSes);'#010+ + ' result:=Add(Value,AllCPUs,OSes);'#010+ 'end;'#010+ #010+ #010+ - 'Function TConditionalStrings.Add(Const Value : String;const CPUs:TCPUs'+ - ';const OSes:TOSes) : TConditionalString;'#010+ + 'Function TConditionalStrings.Add(Cons','t Value : String;const CPUs:TCP'+ + 'Us;const OSes:TOSes) : TConditionalString;'#010+ 'begin'#010+ ' Result:=FCSClass.Create;'#010+ ' Result.Value:=Value;'#010+ ' Result.OSes:=OSes;'#010+ ' Result.CPUs:=CPUs;'#010+ - ' inherite','d Add(Result);'#010+ + ' inherited Add(Result);'#010+ 'end;'#010+ #010+ #010+ - '{*********************************************************************'+ - '*******'#010+ + '{***********************************','********************************'+ + '*********'#010+ ' TDependency'#010+ '**********************************************************************'+ '******}'#010+ #010+ - 'Constructor TDepe','ndency.Create;'#010+ + 'Constructor TDependency.Create;'#010+ 'begin'#010+ ' inherited Create;'#010+ - ' FVersion:=TFPVersion.Create;'#010+ + ' FVersion:=TFPVe','rsion.Create;'#010+ 'end;'#010+ #010+ #010+ @@ -9266,42 +10092,42 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'Procedur','e TDependency.SetVersion(const V : string);'#010+ + 'Procedure TDependency.SetVersion(const V : string);'#010+ 'begin'#010+ - ' FVersion.AsString:=V;'#010+ + ' FVersi','on.AsString:=V;'#010+ 'end;'#010+ #010+ #010+ '{*********************************************************************'+ '*******'#010+ ' TDependencies'#010+ - '***********************************','*********************************'+ - '********}'#010+ + '**********************************************************************'+ + '******}'#010+ #010+ - 'function TDependencies.GetDependency(Index : Integer): TDependency;'#010+ + 'function TDepe','ndencies.GetDependency(Index : Integer): TDependency;'#010+ 'begin'#010+ ' Result:=TDependency(Items[Index]);'#010+ 'end;'#010+ #010+ #010+ 'procedure TDependencies.SetDependency(Index : Integer; const AValue: T'+ - 'Dependen','cy);'#010+ + 'Dependency);'#010+ 'begin'#010+ ' Items[Index]:=AValue;'#010+ 'end;'#010+ #010+ #010+ - 'Function TDependencies.Add(Const Value : String) : TDependency;'#010+ + 'Function TDepend','encies.Add(Const Value : String) : TDependency;'#010+ 'begin'#010+ ' result:=Add(Value,AllCPUs,AllOSes);'#010+ 'end;'#010+ #010+ #010+ '{$ifdef cpu_only_overloads}'#010+ - 'Function TDependencies.Add(Const Value : String;const C','PUs:TCPUs) : '+ - 'TDependency;'#010+ + 'Function TDependencies.Add(Const Value : String;const CPUs:TCPUs) : TD'+ + 'ependency;'#010+ 'begin'#010+ - ' result:=Add(Value,CPUs,AllOSes);'#010+ + ' result:=Add(Value,CPUs,A','llOSes);'#010+ 'end;'#010+ '{$endif cpu_only_overloads}'#010+ #010+ @@ -9313,7 +10139,7 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'Function ','TDependencies.Add(Const Value : String;const CPUs:TCPUs;con'+ + 'Function TDependencies.Add(Const Value : String;const CPUs:TCPUs;co','n'+ 'st OSes:TOSes) : TDependency;'#010+ 'begin'#010+ ' Result:=inherited Add(Value,CPUs,OSes) as TDependency;'#010+ @@ -9322,9 +10148,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'Function TDependencie','s.AddUnit(Const Value : String) : TDependency;'#010+ + 'Function TDependencies.AddUnit(Const Value : String) : TDependency;'#010+ 'begin'#010+ - ' result:=AddUnit(Value,AllCPUs,AllOSes);'#010+ + ' res','ult:=AddUnit(Value,AllCPUs,AllOSes);'#010+ 'end;'#010+ #010+ #010+ @@ -9332,31 +10158,31 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'Function TDependencies.AddUnit(Const Value : String;const CPUs:TCPUs) '+ ': TDependency;'#010+ 'begin'#010+ - ' result:=AddUnit(V','alue,CPUs,AllOSes);'#010+ + ' result:=AddUnit(Value,CPUs,AllOSes);'#010+ 'end;'#010+ '{$endif cpu_only_overloads}'#010+ #010+ #010+ - 'Function TDependencies.AddUnit(Const Value : String;const OSes:TOSes) '+ - ': TDependency;'#010+ + 'Fun','ction TDependencies.AddUnit(Const Value : String;const OSes:TOSes'+ + ') : TDependency;'#010+ 'begin'#010+ ' result:=AddUnit(Value,AllCPUs,OSes);'#010+ 'end;'#010+ #010+ #010+ - 'Function TDependencies.AddUnit(Const Value : Str','ing;const CPUs:TCPUs'+ - ';const OSes:TOSes) : TDependency;'#010+ - 'begin'#010+ + 'Function TDependencies.AddUnit(Const Value : String;const CPUs:TCPUs;c'+ + 'onst OSes:TOSes) : TDependency;'#010+ + 'begi','n'#010+ ' Result:=inherited Add(Value,CPUs,OSes) as TDependency;'#010+ ' Result.Target:=nil;'#010+ ' Result.FDependencyType:=depUnit;'#010+ 'end;'#010+ #010+ #010+ - 'Function TDependencies.AddInclude(Const Value : String) : T','Dependenc'+ - 'y;'#010+ + 'Function TDependencies.AddInclude(Const Value : String) : TDependency;'+ + #010+ 'begin'#010+ - ' result:=AddInclude(Value,AllCPUs,AllOSes);'#010+ + ' result:=AddInclude(Value,AllCPUs,AllOS','es);'#010+ 'end;'#010+ #010+ #010+ @@ -9366,48 +10192,48 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'begin'#010+ ' result:=AddInclude(Value,CPUs,AllOSes);'#010+ 'end;'#010+ - '{','$endif cpu_only_overloads}'#010+ + '{$endif cpu_only_overloads}'#010+ #010+ #010+ - 'Function TDependencies.AddInclude(Const Value : String;const OSes:TOSe'+ - 's) : TDependency;'#010+ + 'Function TDependencies.AddInc','lude(Const Value : String;const OSes:TO'+ + 'Ses) : TDependency;'#010+ 'begin'#010+ ' result:=AddInclude(Value,AllCPUs,OSes);'#010+ 'end;'#010+ #010+ #010+ - 'Function TDependencies.AddInclude(Const Value : String;const CPUs:TC','P'+ - 'Us;const OSes:TOSes) : TDependency;'#010+ + 'Function TDependencies.AddInclude(Const Value : String;const CPUs:TCPU'+ + 's;const OSes:TOSes) : TDependency;'#010+ 'Var'#010+ ' N : String;'#010+ - 'begin'#010+ + 'beg','in'#010+ ' N:=FixPath(Value, False);'#010+ ' if ExtractFileExt(N)='#039#039' then'#010+ ' ChangeFileExt(N,IncExt);'#010+ ' Result:=inherited Add(N,CPUs,OSes) as TDependency;'#010+ - ' Result.FDependencyType:=depInclude;'#010, + ' Result.FDependencyType:=depInclude;'#010+ 'end;'#010+ #010+ #010+ - '{*********************************************************************'+ - '*******'#010+ + '{**************************************************','*****************'+ + '*********'#010+ ' TValueItem'#010+ '**********************************************************************'+ '******}'#010+ #010+ - 'constructor TValueItem.Create(AVal','ue: String);'#010+ + 'constructor TValueItem.Create(AValue: String);'#010+ 'begin'#010+ ' FValue:=AValue;'#010+ 'end;'#010+ #010+ #010+ - '{*********************************************************************'+ - '*******'#010+ + '{*************','******************************************************'+ + '*********'#010+ ' TFunctionItem'#010+ '**********************************************************************'+ - '****','**}'#010+ + '******}'#010+ #010+ - 'constructor TFunctionItem.Create(AFunc: TReplaceFunction);'#010+ + 'constructor TFunctionItem.Create(AFunc: TReplaceFunct','ion);'#010+ 'begin'#010+ ' FFunc:=AFunc;'#010+ 'end;'#010+ @@ -9415,10 +10241,10 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( '{*********************************************************************'+ '*******'#010+ ' TNotifyEventItem'#010+ - '**************************','******************************************'+ - '********}'#010+ + '**********************************************************************'+ + '******}'#010+ #010+ - 'procedure TNotifyEventItem.CallEvent(Sender: TObject);'#010+ + 'proce','dure TNotifyEventItem.CallEvent(Sender: TObject);'#010+ 'begin'#010+ ' if assigned(OnEvent) then'#010+ ' OnEvent(Sender);'#010+ @@ -9426,41 +10252,41 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' OnProcEvent(sender);'#010+ 'end;'#010+ #010+ - '{*************','******************************************************'+ - '*********'#010+ + '{*********************************************************************'+ + '**','*****'#010+ ' TNotifyEventCollection'#010+ '**********************************************************************'+ '******}'#010+ #010+ - 'constructor TNotifyEventCollection.create(ASupp','ortedActionSet: TNoti'+ - 'fyEventActionSet);'#010+ + 'constructor TNotifyEventCollection.create(ASupportedActionSet: TNotify'+ + 'EventActionSet);'#010+ 'begin'#010+ - ' FSupportedActionSet:=ASupportedActionSet;'#010+ + ' FSupported','ActionSet:=ASupportedActionSet;'#010+ ' inherited create(TNotifyEventItem);'#010+ 'end;'#010+ #010+ 'procedure TNotifyEventCollection.AppendEvent(AnAction: TNotifyEventAct'+ 'ion; AnEvent: TNotifyEvent);'#010+ 'var'#010+ - ' i','tem: TNotifyEventItem;'#010+ + ' item: TNotifyEventItem;'#010+ 'begin'#010+ - ' if not (AnAction in FSupportedActionSet) then'#010+ + ' if not (AnAction in FSuppor','tedActionSet) then'#010+ ' raise Exception.Create(SErrEventNotSupported);'#010+ ' item := TNotifyEventItem(add);'#010+ ' item.OnEvent:=AnEvent;'#010+ ' item.OnAction:=AnAction;'#010+ 'end;'#010+ #010+ - 'procedure TNotifyEven','tCollection.AppendProcEvent(AnAction: TNotifyEv'+ - 'entAction; AnProcEvent: TNotifyProcEvent);'#010+ + 'procedure TNotifyEventCollection.AppendProcEvent(AnAction: TNotifyEven'+ + 'tAction; ','AnProcEvent: TNotifyProcEvent);'#010+ 'var'#010+ ' item: TNotifyEventItem;'#010+ 'begin'#010+ ' if not (AnAction in FSupportedActionSet) then'#010+ ' raise Exception.Create(SErrEventNotSupported);'#010+ - ' item := TNoti','fyEventItem(add);'#010+ + ' item := TNotifyEventItem(add);'#010+ ' item.OnProcEvent:=AnProcEvent;'#010+ - ' item.OnAction:=AnAction;'#010+ + ' item.','OnAction:=AnAction;'#010+ 'end;'#010+ #010+ 'procedure TNotifyEventCollection.CallEvents(AnAction: TNotifyEventActi'+ @@ -9469,9 +10295,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' i: integer;'#010+ ' item: TNotifyEventItem;'#010+ 'begin'#010+ - ' for i := 0 t','o Count-1 do'#010+ + ' for i := 0 to Count-1 do'#010+ ' begin'#010+ - ' item := TNotifyEventItem(Items[i]);'#010+ + ' item := TNotifyEventItem(Item','s[i]);'#010+ ' if item.OnAction=AnAction then'#010+ ' item.CallEvent(Sender);'#010+ ' end;'#010+ @@ -9479,20 +10305,20 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( #010+ '{*********************************************************************'+ '*******'#010+ - ' ',' TDictionary'#010+ - '**********************************************************************'+ - '******}'#010+ + ' TDictionary'#010+ + '**************************','******************************************'+ + '********}'#010+ #010+ 'constructor TDictionary.Create(AOwner: TComponent);'#010+ 'begin'#010+ ' inherited Create(AOwner);'#010+ ' FList:=TStringList.Create;'#010+ - ' FList.Sorted',':=True;'#010+ + ' FList.Sorted:=True;'#010+ ' FList.Duplicates:=dupError;'#010+ 'end;'#010+ #010+ #010+ - 'destructor TDictionary.Destroy;'#010+ + 'destructor TD','ictionary.Destroy;'#010+ 'Var'#010+ ' I : Integer;'#010+ 'begin'#010+ @@ -9503,11 +10329,11 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'procedure TDictionary.AddVariab','le(const AName, Value: String);'#010+ + 'procedure TDictionary.AddVariable(const AName, Value: String);'#010+ 'Var'#010+ ' I : Integer;'#010+ 'begin'#010+ - ' I:=Flist.IndexOf(AName);'#010+ + ' ',' I:=Flist.IndexOf(AName);'#010+ ' If I=-1 then'#010+ ' I:=FList.Add(Aname)'#010+ ' else'#010+ @@ -9516,8 +10342,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'procedure TDictionary.AddFunct','ion(const AName: String; FReplacement:'+ - ' TReplaceFunction);'#010+ + 'procedure TDictionary.AddFunction(const AName: String; FReplacement: T'+ + 'ReplaceFunction);'#010, 'Var'#010+ ' I : Integer;'#010+ 'begin'#010+ @@ -9527,10 +10353,10 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' else'#010+ ' Flist.Objects[i].Free;'#010+ ' Flist.Objects[i]:=TFunctionItem.Create(FReplacement);'#010+ - 'e','nd;'#010+ + 'end;'#010+ #010+ #010+ - 'procedure TDictionary.RemoveItem(const AName: String);'#010+ + 'procedure TDictionary.RemoveItem(const AName: String',');'#010+ 'Var'#010+ ' I : Integer;'#010+ 'begin'#010+ @@ -9543,10 +10369,10 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'function TDictionary.GetValue(AName',': String): String;'#010+ + 'function TDictionary.GetValue(AName: String): String;'#010+ 'begin'#010+ ' Result:=GetValue(AName,'#039#039');'#010+ - 'end;'#010+ + 'end',';'#010+ #010+ #010+ 'function TDictionary.GetValue(const AName,Args: String): String;'#010+ @@ -9556,8 +10382,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'begin'#010+ ' I:=Flist.IndexOf(AName);'#010+ ' If (I=-1) then'#010+ - ' Raise EDictionaryError.Cr','eateFmt(SErrNoDictionaryItem,[AName]);'#010+ - ' O:=Flist.Objects[I];'#010+ + ' Raise EDictionaryError.CreateFmt(SErrNoDictionaryItem,[AName]);'#010+ + ' O:=Flist.Objects[','I];'#010+ ' If O is TValueItem then'#010+ ' Result:=TValueItem(O).FValue'#010+ ' else'#010+ @@ -9565,10 +10391,10 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'function TDictionary.ReplaceStrings(Const ASource: String','; Const Max'+ - 'Depth: Integer = 10): String;'#010+ + 'function TDictionary.ReplaceStrings(Const ASource: String; Const MaxDe'+ + 'pth: Integer = 10): String;'#010+ 'Var'#010+ - ' S,FN,FV : String;'#010+ + ' S,FN,FV : S','tring;'#010+ ' P: Integer;'#010+ 'begin'#010+ ' Result:='#039#039';'#010+ @@ -9579,9 +10405,9 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' Result:=Result+Copy(S,1,P-1);'#010+ ' Delete(S,1,P+1);'#010+ ' P:=Pos('#039')'#039',S);'#010+ - ' ',' FN:=Copy(S,1,P-1);'#010+ + ' FN:=Copy(S,1,P-1);'#010+ ' Delete(S,1,P);'#010+ - ' P:=Pos('#039' '#039',FN);'#010+ + ' P:=Pos(',#039' '#039',FN);'#010+ ' If (P<>0) then // function arguments ?'#010+ ' begin'#010+ ' FV:=FN;'#010+ @@ -9590,8 +10416,8 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( ' end'#010+ ' else'#010+ ' FV:='#039#039';'#010+ - ' ',' if MaxDepth > 0 then'#010+ - ' Result:=Result+ReplaceStrings(GetValue(FN,FV), MaxDepth-1)'#010+ + ' if MaxDepth > 0 then'#010+ + ' Result:=Result+ReplaceStr','ings(GetValue(FN,FV), MaxDepth-1)'#010+ ' else'#010+ ' Result:=Result+GetValue(FN,FV);'#010+ ' P:=Pos('#039'$('#039',S);'#010+ @@ -9600,10 +10426,10 @@ const fpmkunitsrc : array[0..1137,1..240] of char=( 'end;'#010+ #010+ #010+ - 'Function TDictionary.Substitute(Const S','ource : String; Macros : Arra'+ - 'y of string) : String;'#010+ + 'Function TDictionary.Substitute(Const Source : String; Macros : Array '+ + 'of string) : String;'#010+ 'Var'#010+ - ' I : Integer;'#010+ + ' ','I : Integer;'#010+ 'begin'#010+ ' I:=0;'#010+ ' While I