5634
5675
DefaultSrcOS:=GetDefaultSrcOSForTargetOS(DefaultTargetOS);
5635
5676
DefaultSrcOS2:=GetDefaultSrcOS2ForTargetOS(DefaultTargetOS);
5637
Result:=TDefineTemplate.Create(StdDefTemplFPCSrc,
5638
Format(ctsFreePascalSourcesPlusDesc,['RTL, FCL, Packages, Compiler']),
5678
if (FPCSrcDir='') or (not DirPathExists(FPCSrcDir)) then begin
5679
DebugLn(['TDefinePool.CreateFPCSrcTemplate FPCSrcDir does not exist: FPCSrcDir="',FPCSrcDir,'"']);
5641
5682
// try to find for every reachable ppu file the unit file in the FPC sources
5642
5683
UnitLinks:=UnitLinksMacroName;
5644
5685
if not FindStandardPPUSources then exit;
5687
Result:=CreateFPCSourceTemplate(FPCSrcDir,Owner);
5645
5689
DefTempl:=TDefineTemplate.Create('FPC Unit Links',
5646
5690
ctsSourceFilenamesForStandardFPCUnits,
5647
5691
UnitLinks,UnitLinkList,da_DefineRecurse);
5648
5692
Result.AddChild(DefTempl);
5650
// The free pascal sources build a world of their own,
5651
// reset search paths
5652
MainDir:=TDefineTemplate.Create('Free Pascal Source Directory',
5653
ctsFreePascalSourceDir,'',FPCSrcDir,da_Directory);
5654
Result.AddChild(MainDir);
5655
DefTempl:=TDefineTemplate.Create('Reset SrcPath',
5656
ctsSrcPathInitialization,ExternalMacroStart+'SrcPath','',da_DefineRecurse);
5657
MainDir.AddChild(DefTempl);
5658
DefTempl:=TDefineTemplate.Create('Reset UnitPath',
5659
ctsUnitPathInitialization,ExternalMacroStart+'UnitPath','',da_DefineRecurse);
5660
MainDir.AddChild(DefTempl);
5661
// turn Nested comments on
5662
DefTempl:=TDefineTemplate.Create('Nested Comments',
5663
ctsNestedCommentsOn,ExternalMacroStart+'NestedComments','',da_DefineRecurse);
5664
MainDir.AddChild(DefTempl);
5665
// enable FPDocSystem to find compiler functions like writeln and readln
5666
{DefTempl:=TDefineTemplate.Create('FPDocSystem',
5667
ctsFPDocSystemOn,'FPDocSystem','',da_DefineRecurse);
5668
MainDir.AddChild(DefTempl);}
5671
RTLDir:=TDefineTemplate.Create('RTL',ctsRuntimeLibrary,'','rtl',da_Directory);
5672
MainDir.AddChild(RTLDir);
5674
// rtl include paths
5676
+';'+Dir+'rtl'+DS+'objpas'+DS
5677
+';'+Dir+'rtl'+DS+'objpas'+DS+'sysutils'
5678
+';'+Dir+'rtl'+DS+'objpas'+DS+'classes'
5679
+';'+Dir+'rtl'+DS+'inc'+DS
5680
+';'+Dir+'rtl'+DS+'inc'+DS+'graph'+DS
5681
+';'+Dir+'rtl'+DS+SrcOS+DS
5682
+';'+Dir+'rtl'+DS+TargetOSMacro+DS
5683
+';'+Dir+'rtl'+DS+SrcOS2+DS
5684
+';'+Dir+'rtl'+DS+SrcOS2+DS+TargetProcessor
5685
+';'+Dir+'rtl'+DS+TargetProcessor+DS
5686
+';'+Dir+'rtl'+DS+TargetOSMacro+DS+TargetProcessor+DS;
5687
RTLDir.AddChild(TDefineTemplate.Create('Include Path',
5688
Format(ctsIncludeDirectoriesPlusDirs,
5689
['objpas, inc,'+TargetProcessor+','+SrcOS]),
5690
ExternalMacroStart+'IncPath',s,da_DefineRecurse));
5693
RTLOSDir:=TDefineTemplate.Create('TargetOS','Target OS','',
5694
TargetOSMacro,da_Directory);
5696
+';'+Dir+'rtl'+DS+TargetOSMacro+DS+SrcOS+'inc' // e.g. rtl/win32/inc/
5697
+';'+Dir+'rtl'+DS+TargetOSMacro+DS+TargetProcessor+DS
5699
RTLOSDir.AddChild(TDefineTemplate.Create('Include Path',
5700
Format(ctsIncludeDirectoriesPlusDirs,[TargetProcessor]),
5701
ExternalMacroStart+'IncPath',
5702
s,da_DefineRecurse));
5704
+';'+Dir+'rtl'+DS+'objpas'+DS;
5705
RTLOSDir.AddChild(TDefineTemplate.Create('Src Path',
5706
Format(ctsAddsDirToSourcePath,[TargetProcessor]),
5707
ExternalMacroStart+'SrcPath',s,da_DefineRecurse));
5708
RTLDir.AddChild(RTLOSDir);
5710
// rtl: IF SrcOS=win then add include path rtl/win/wininc
5711
IFTempl:=TDefineTemplate.Create('If SrcOS=win','If SrcOS=win',
5712
'',''''+SrcOS+'''=''win''',da_If);
5713
IFTempl.AddChild(TDefineTemplate.Create('Include Path',
5714
Format(ctsIncludeDirectoriesPlusDirs,['wininc']),
5715
ExternalMacroStart+'IncPath',
5717
+';'+Dir+'rtl'+DS+'win'+DS+'wininc'
5718
+';'+Dir+'rtl'+DS+'win',
5720
RTLDir.AddChild(IFTempl);
5722
// rtl: IF TargetOS=darwin then add include path rtl/freebsd
5723
IFTempl:=TDefineTemplate.Create('If TargetOS=darwin','If TargetOS=darwin',
5724
'',''''+TargetOSMacro+'''=''darwin''',da_If);
5725
IFTempl.AddChild(TDefineTemplate.Create('Include Path',
5726
Format(ctsIncludeDirectoriesPlusDirs,['rtl'+DS+'freebsd']),
5727
ExternalMacroStart+'IncPath',
5729
+';'+Dir+'rtl'+DS+'freebsd',
5731
RTLDir.AddChild(IFTempl);
5733
// add processor and SrcOS alias defines for the RTL
5734
AddProcessorTypeDefine(RTLDir);
5735
AddSrcOSDefines(RTLDir);
5739
FCLDir:=TDefineTemplate.Create('FCL',ctsFreePascalComponentLibrary,'','fcl',
5741
MainDir.AddChild(FCLDir);
5742
FCLDir.AddChild(TDefineTemplate.Create('Include Path',
5743
Format(ctsIncludeDirectoriesPlusDirs,['inc,'+SrcOS]),
5744
ExternalMacroStart+'IncPath',
5745
d( DefinePathMacro+'/inc/'
5746
+';'+DefinePathMacro+'/classes/'
5747
+';'+DefinePathMacro+'/'+TargetOSMacro+DS // TargetOS before SrcOS !
5748
+';'+DefinePathMacro+'/'+SrcOS+DS
5750
,da_DefineRecurse));
5753
FCLDBDir:=TDefineTemplate.Create('DB','DB','','db',da_Directory);
5754
FCLDir.AddChild(FCLDBDir);
5755
FCLDBInterbaseDir:=TDefineTemplate.Create('interbase','interbase','',
5756
'interbase',da_Directory);
5757
FCLDBDir.AddChild(FCLDBInterbaseDir);
5758
FCLDBInterbaseDir.AddChild(TDefineTemplate.Create('SrcPath',
5760
ExternalMacroStart+'SrcPath',
5761
d(Dir+'/packages/base/ibase;'+SrcPathMacro)
5765
PackagesDir:=TDefineTemplate.Create('Packages',ctsPackageDirectories,'',
5766
'packages',da_Directory);
5767
MainDir.AddChild(PackagesDir);
5769
// packages/fcl-base
5770
FCLBaseDir:=TDefineTemplate.Create('FCL-base',
5771
ctsFreePascalComponentLibrary,'','fcl-base',
5773
PackagesDir.AddChild(FCLBaseDir);
5774
// packages/fcl-base/src
5775
FCLBaseSrcDir:=TDefineTemplate.Create('src',
5778
FCLBaseDir.AddChild(FCLBaseSrcDir);
5779
FCLBaseSrcDir.AddChild(TDefineTemplate.Create('Include Path',
5780
Format(ctsIncludeDirectoriesPlusDirs,['inc,'+SrcOS]),
5781
ExternalMacroStart+'IncPath',
5782
d( DefinePathMacro+'/inc/'
5783
+';'+DefinePathMacro+'/'+TargetOSMacro+DS // TargetOS before SrcOS !
5784
+';'+DefinePathMacro+'/'+SrcOS+DS
5786
,da_DefineRecurse));
5788
// packages/fcl-process
5789
FCLSubDir:=TDefineTemplate.Create('FCL-process',
5790
'fcl-process','','fcl-process',
5792
PackagesDir.AddChild(FCLSubDir);
5793
// packages/fcl-process/src
5794
FCLSubSrcDir:=TDefineTemplate.Create('src',
5797
FCLSubDir.AddChild(FCLSubSrcDir);
5798
FCLSubSrcDir.AddChild(TDefineTemplate.Create('Include Path',
5799
Format(ctsIncludeDirectoriesPlusDirs,['inc,'+SrcOS]),
5800
ExternalMacroStart+'IncPath',
5801
d( DefinePathMacro+'/'+TargetOSMacro+DS // TargetOS before SrcOS !
5802
+';'+DefinePathMacro+'/'+SrcOS+DS
5804
,da_DefineRecurse));
5806
// packages/fcl-async
5807
PackagesFCLAsyncDir:=TDefineTemplate.Create('fcl-async','fcl-async','','fcl-async',da_Directory);
5808
PackagesDir.AddChild(PackagesFCLAsyncDir);
5810
// packages/fcl-async/src
5811
PackagesFCLAsyncDir.AddChild(TDefineTemplate.Create('Include Path',
5812
Format(ctsIncludeDirectoriesPlusDirs,['packages/fcl-async/src']),
5813
ExternalMacroStart+'IncPath',
5814
d( DefinePathMacro+'/src/'
5816
,da_DefineRecurse));
5819
PackagesExtraDir:=TDefineTemplate.Create('extra','extra','','extra',da_Directory);
5820
PackagesDir.AddChild(PackagesExtraDir);
5822
// packages/extra/graph
5823
PkgExtraGraphDir:=TDefineTemplate.Create('graph','graph','','graph',
5825
PackagesExtraDir.AddChild(PkgExtraGraphDir);
5826
PkgExtraGraphDir.AddChild(TDefineTemplate.Create('Include Path',
5827
Format(ctsIncludeDirectoriesPlusDirs,['inc']),
5828
ExternalMacroStart+'IncPath',
5829
d( DefinePathMacro+'/inc/'
5831
,da_DefineRecurse));
5833
// packages/extra/amunits
5834
PkgExtraAMunitsDir:=TDefineTemplate.Create('amunits','amunits','','amunits',
5836
PackagesExtraDir.AddChild(PkgExtraAMunitsDir);
5837
PkgExtraAMunitsDir.AddChild(TDefineTemplate.Create('Include Path',
5838
Format(ctsIncludeDirectoriesPlusDirs,['inc']),
5839
ExternalMacroStart+'IncPath',
5840
d( DefinePathMacro+'/inc/'
5842
,da_DefineRecurse));
5845
UtilsDir:=TDefineTemplate.Create('Utils',ctsUtilsDirectories,'',
5846
'utils',da_Directory);
5847
MainDir.AddChild(UtilsDir);
5850
DebugSvrDir:=TDefineTemplate.Create('DebugSvr','Debug Server','',
5851
'debugsvr',da_Directory);
5852
UtilsDir.AddChild(DebugSvrDir);
5853
DebugSvrDir.AddChild(TDefineTemplate.Create('Interface Path',
5854
Format(ctsAddsDirToSourcePath,['..']),ExternalMacroStart+'SrcPath',
5855
'..;'+ExternalMacroStart+'SrcPath',da_DefineRecurse));
5858
InstallerDir:=TDefineTemplate.Create('Installer',ctsInstallerDirectories,'',
5859
'installer',da_Directory);
5860
InstallerDir.AddChild(TDefineTemplate.Create('SrcPath','SrcPath addition',
5861
ExternalMacroStart+'SrcPath',
5862
SrcPathMacro+';'+Dir+'ide;'+Dir+'fv',da_Define));
5863
MainDir.AddChild(InstallerDir);
5866
CompilerDir:=TDefineTemplate.Create('Compiler',ctsCompiler,'','compiler',
5868
AddProcessorTypeDefine(CompilerDir);
5869
CompilerDir.AddChild(TDefineTemplate.Create('SrcPath','SrcPath addition',
5870
ExternalMacroStart+'SrcPath',
5871
SrcPathMacro+';'+Dir+TargetProcessor,da_Define));
5872
CompilerDir.AddChild(TDefineTemplate.Create('IncPath','IncPath addition',
5873
ExternalMacroStart+'IncPath',
5874
IncPathMacro+';'+Dir+'compiler',da_DefineRecurse));
5875
MainDir.AddChild(CompilerDir);
5878
UtilsDir:=TDefineTemplate.Create('utils',ctsUtilsDirectories,'',
5879
'utils',da_Directory);
5880
UtilsDir.AddChild(TDefineTemplate.Create('SrcPath','SrcPath addition',
5881
ExternalMacroStart+'SrcPath',
5882
SrcPathMacro+';..',da_Define));
5883
CompilerDir.AddChild(UtilsDir);
5886
5695
if UnitTree<>nil then begin
5887
5696
UnitTree.FreeAndClear;
6233
5975
+';../lcl/interfaces/'+WidgetType+';'+SrcPath)
6235
5977
MainDir.AddChild(DirTempl);
6237
// <LazarusSrcDir>/lcl
6238
DirTempl:=TDefineTemplate.Create('LCL',Format(ctsNamedDirectory,['LCL']),
6239
'','lcl',da_Directory);
6240
DirTempl.AddChild(TDefineTemplate.Create('IncludePath',
6241
Format(ctsIncludeDirectoriesPlusDirs,['include']),
6242
ExternalMacroStart+'IncPath',
6243
'include',da_Define));
6244
DirTempl.AddChild(TDefineTemplate.Create('LCL path addition',
6245
Format(ctsAddsDirToSourcePath,['forms']),
6246
ExternalMacroStart+'SrcPath','forms;'+SrcPath,da_Define));
6247
DirTempl.AddChild(TDefineTemplate.Create('LCL path addition',
6248
Format(ctsAddsDirToSourcePath,['widgetset']),
6249
ExternalMacroStart+'SrcPath','widgetset;'+SrcPath,da_Define));
6251
FPGUIPlatformTempl:=TDefineTemplate.Create('Define FPGUIPlatform',
6252
'Define FPGUIPlatform','','',da_Block);
6253
IfTemplate:=TDefineTemplate.Create('IFDEF windows',
6254
ctsIfDefWindows, 'windows', '', da_IfDef);
6255
// then set #FPGUIPlatform to gdi
6256
IfTemplate.AddChild(TDefineTemplate.Create('#FPGUIPlatform:=gdi',
6257
'#FPGUIPlatform:=gdi',
6258
ExternalMacroStart+'FPGUIPlatform','gdi',da_DefineRecurse));
6259
FPGUIPlatformTempl.AddChild(IfTemplate);
6260
ElseTemplate:=TDefineTemplate.Create('Else',
6261
ctsElse, '', '', da_Else);
6262
// then set #FPGUIPlatform to x11
6263
ElseTemplate.AddChild(TDefineTemplate.Create('#FPGUIPlatform:=x11',
6264
'#FPGUIPlatform:=x11',
6265
ExternalMacroStart+'FPGUIPlatform','x11',da_DefineRecurse));
6266
FPGUIPlatformTempl.AddChild(ElseTemplate);
6267
DirTempl.AddChild(FPGUIPlatformTempl);
6268
MainDir.AddChild(DirTempl);
6270
// <LazarusSrcDir>/lcl/forms
6271
LCLWidgetSetDir:=TDefineTemplate.Create('forms',Format(ctsNamedDirectory,['WidgetSet']),
6272
'','forms',da_Directory);
6273
LCLWidgetSetDir.AddChild(TDefineTemplate.Create('LCL path addition',
6274
Format(ctsAddsDirToSourcePath,['..']),
6275
ExternalMacroStart+'SrcPath','..;'+SrcPath,da_Define));
6276
DirTempl.AddChild(LCLWidgetSetDir);
6278
// <LazarusSrcDir>/lcl/widgetset
6279
LCLWidgetSetDir:=TDefineTemplate.Create('widgetset',Format(ctsNamedDirectory,['WidgetSet']),
6280
'','widgetset',da_Directory);
6281
LCLWidgetSetDir.AddChild(TDefineTemplate.Create('LCL path addition',
6282
Format(ctsAddsDirToSourcePath,['..']),
6283
ExternalMacroStart+'SrcPath','..;'+SrcPath,da_Define));
6284
DirTempl.AddChild(LCLWidgetSetDir);
6286
// <LazarusSrcDir>/lcl/units
6287
LCLUnitsDir:=TDefineTemplate.Create('units',Format(ctsNamedDirectory,['Units']),
6288
'','units',da_Directory);
6289
DirTempl.AddChild(LCLUnitsDir);
6290
for i:=Low(Lazarus_CPU_OS_Widget_Combinations)
6291
to High(Lazarus_CPU_OS_Widget_Combinations) do
6293
SplitLazarusCPUOSWidgetCombo(Lazarus_CPU_OS_Widget_Combinations[i],
6294
CurCPU,CurOS,CurWidgetSet);
6295
// <LazarusSrcDir>/lcl/units/<TargetCPU>-<TargetOS>
6296
// these directories contain the output of the LCL (excluding the interfaces)
6297
CurCPUOS:=CurCPU+'-'+CurOS;
6298
LCLUnitsCPUOSDir:=LCLUnitsDir.FindChildByName(CurCPUOS);
6299
if LCLUnitsCPUOSDir=nil then begin
6300
LCLUnitsCPUOSDir:=TDefineTemplate.Create(CurCPUOS,
6301
Format(ctsNamedDirectory,[CurCPUOS]),
6302
'',CurCPUOS,da_Directory);
6303
LCLUnitsDir.AddChild(LCLUnitsCPUOSDir);
6305
ExtraSrcPath:='../..;../../widgetset';
6306
if CurOS<>'win32' then
6307
ExtraSrcPath:=ExtraSrcPath+';../../nonwin32';
6308
LCLUnitsCPUOSDir.AddChild(TDefineTemplate.Create('CompiledSrcPath',
6309
ctsSrcPathForCompiledUnits,CompiledSrcPathMacroName,
6310
d(ExtraSrcPath),da_Define));
6312
// <LazarusSrcDir>/lcl/units/<TargetCPU>-<TargetOS>/<WidgetSet>
6313
// these directories contain the output of the LCL interfaces
6314
LCLUnitsCPUOSWidgetSetDir:=LCLUnitsCPUOSDir.FindChildByName(CurWidgetSet);
6315
if LCLUnitsCPUOSWidgetSetDir=nil then begin
6316
LCLUnitsCPUOSWidgetSetDir:=TDefineTemplate.Create(CurWidgetSet,
6317
Format(ctsNamedDirectory,[CurWidgetSet]),
6318
'',CurWidgetSet,da_Directory);
6319
LCLUnitsCPUOSDir.AddChild(LCLUnitsCPUOSWidgetSetDir);
6320
ExtraSrcPath:='../../../interfaces/'+CurWidgetSet;
6321
if (CurWidgetSet='carbon') then
6322
ExtraSrcPath:=ExtraSrcPath+';../../../interfaces/carbon/pascocoa/appkit;../../../interfaces/carbon/objc';
6323
if (CurWidgetSet='fpgui') then
6324
ExtraSrcPath:=ExtraSrcPath
6325
+';../../../interfaces/fpgui/corelib'
6326
+';../../../interfaces/fpgui/corelib/$('+ExternalMacroStart+'FPGUIPlatform)'
6327
+';../../../interfaces/fpgui/gui';
6328
LCLUnitsCPUOSWidgetSetDir.AddChild(
6329
TDefineTemplate.Create('CompiledSrcPath',
6330
ctsSrcPathForCompiledUnits,CompiledSrcPathMacroName,
6331
d(ExtraSrcPath),da_Define));
6335
// <LazarusSrcDir>/lcl/interfaces
6336
SubDirTempl:=TDefineTemplate.Create('interfaces',
6337
ctsWidgetDirectory,'','interfaces',da_Directory);
6338
// add lcl to the source path of all widget set directories
6339
SubDirTempl.AddChild(TDefineTemplate.Create('LCL Path',
6340
Format(ctsAddsDirToSourcePath,['lcl']),ExternalMacroStart+'SrcPath',
6341
LazarusSrcDir+d('/lcl;')
6342
+LazarusSrcDir+d('/lcl/widgetset;')
6345
DirTempl.AddChild(SubDirTempl);
6347
// <LazarusSrcDir>/lcl/interfaces/gtk
6348
IntfDirTemplate:=TDefineTemplate.Create('gtk',
6349
ctsIntfDirectory,'','gtk',da_Directory);
6350
SubDirTempl.AddChild(IntfDirTemplate);
6352
// <LazarusSrcDir>/lcl/interfaces/gtk2
6353
IntfDirTemplate:=TDefineTemplate.Create('gtk2',
6354
ctsGtk2IntfDirectory,'','gtk2',da_Directory);
6355
SubDirTempl.AddChild(IntfDirTemplate);
6357
// <LazarusSrcDir>/lcl/interfaces/win32
6360
// <LazarusSrcDir>/lcl/interfaces/wince
6361
IntfDirTemplate:=TDefineTemplate.Create('wince',
6362
ctsIntfDirectory,'','wince',da_Directory);
6363
// then define wince1
6364
IntfDirTemplate.AddChild(TDefineTemplate.Create('Define wince1',
6365
ctsDefineMacroWinCE1,'wince1','',da_Define));
6366
SubDirTempl.AddChild(IntfDirTemplate);
6368
// <LazarusSrcDir>/lcl/interfaces/carbon
6369
IntfDirTemplate:=TDefineTemplate.Create('carbon',
6370
ctsIntfDirectory,'','carbon',da_Directory);
6371
// then define carbon1
6372
IntfDirTemplate.AddChild(TDefineTemplate.Create('Define carbon1',
6373
ctsDefineMacroCarbon1,'carbon1','',da_Define));
6374
// add 'pascocoa/appkit' to the SrcPath
6375
IntfDirTemplate.AddChild(TDefineTemplate.Create('SrcPath',
6376
Format(ctsAddsDirToSourcePath,['pascocoa']),ExternalMacroStart+'SrcPath',
6377
d('pascocoa/appkit;pascocoa/foundation;')+SrcPath,da_Define));
6378
SubDirTempl.AddChild(IntfDirTemplate);
6380
// <LazarusSrcDir>/lcl/interfaces/qt
6381
IntfDirTemplate:=TDefineTemplate.Create('qt',
6382
ctsIntfDirectory,'','qt',da_Directory);
6384
IntfDirTemplate.AddChild(TDefineTemplate.Create('Define qt1',
6385
ctsDefineMacroQT1,'qt1','',da_Define));
6386
SubDirTempl.AddChild(IntfDirTemplate);
6388
// <LazarusSrcDir>/lcl/interfaces/fpgui
6389
IntfDirTemplate:=TDefineTemplate.Create('fpgui',
6390
ctsIntfDirectory,'','fpgui',da_Directory);
6392
IntfDirTemplate.AddChild(TDefineTemplate.Create('Add gui, corelib to SrcPath',
6393
Format(ctsAddsDirToSourcePath,['gui, corelib']),
6394
ExternalMacroStart+'SrcPath',
6395
d(LazarusSrcDir+'/lcl/interfaces/fpgui/gui')
6396
+';'+d(LazarusSrcDir+'/lcl/interfaces/fpgui/corelib')
6397
+';'+d(LazarusSrcDir+'/lcl/interfaces/fpgui/corelib/$('+ExternalMacroStart+'FPGUIPlatform)')
6399
,da_DefineRecurse));
6401
IntfDirTemplate.AddChild(TDefineTemplate.Create('Add corelib to IncPath',
6402
Format(ctsAddsDirToIncludePath,['corelib']),
6403
ExternalMacroStart+'IncPath',
6404
d(LazarusSrcDir+'/lcl/interfaces/fpgui/corelib')
6405
+';'+d(LazarusSrcDir+'/lcl/interfaces/fpgui/corelib/$('+ExternalMacroStart+'FPGUIPlatform)')
6408
SubDirTempl.AddChild(IntfDirTemplate);
6410
5979
// <LazarusSrcDir>/components
6411
5980
DirTempl:=TDefineTemplate.Create('Components',ctsComponentsDirectory,
6412
5981
'','components',da_Directory);
6413
DirTempl.AddChild(TDefineTemplate.Create('LCL Path',
6414
Format(ctsAddsDirToSourcePath,['lcl']),
6415
ExternalMacroStart+'SrcPath',
6416
d(LazarusSrcDir+'/lcl'
6417
+';'+LazarusSrcDir+'/lcl/interfaces/'+WidgetType)
6419
,da_DefineRecurse));
6421
// <LazarusSrcDir>/components/synedit
6422
SynEditDirTempl:=TDefineTemplate.Create('synedit',
6423
'SynEdit','','synedit',da_Directory);
6424
SynEditDirTempl.AddChild(TDefineTemplate.Create('IDEIntf Path',
6425
Format(ctsAddsDirToSourcePath,['ideintf']),
6426
ExternalMacroStart+'SrcPath',
6427
d(LazarusSrcDir+'/ideintf')
6429
,da_DefineRecurse));
6430
// <LazarusSrcDir>/components/synedit/units
6431
SynEditUnitsDirTempl:=TDefineTemplate.Create('synedit output directory',
6432
'units','','units',da_Directory);
6433
SynEditDirTempl.AddChild(SynEditUnitsDirTempl);
6434
SynEditUnitsDirTempl.AddChild(TDefineTemplate.Create('CompiledSrcPath',
6435
ctsSrcPathForCompiledUnits,
6436
ExternalMacroStart+'CompiledSrcPath',
6437
d(LazarusSrcDir+'components/synedit')
6438
,da_DefineRecurse));
6439
DirTempl.AddChild(SynEditDirTempl);
6441
// <LazarusSrcDir>/components/lazcontrols
6442
LazControlsDirTempl:=TDefineTemplate.Create('lazcontrols',
6443
'LazControls','','lazcontrols',da_Directory);
6444
// <LazarusSrcDir>/components/lazcontrols/lib
6445
LazControlsUnitsDirTempl:=TDefineTemplate.Create('lazcontrols output directory',
6446
'lib','','lib',da_Directory);
6447
LazControlsDirTempl.AddChild(LazControlsUnitsDirTempl);
6448
LazControlsUnitsDirTempl.AddChild(TDefineTemplate.Create('CompiledSrcPath',
6449
ctsSrcPathForCompiledUnits,
6450
ExternalMacroStart+'CompiledSrcPath',
6451
d(LazarusSrcDir+'components/lazcontrols')
6452
,da_DefineRecurse));
6453
DirTempl.AddChild(LazControlsDirTempl);
6455
// <LazarusSrcDir>/components/codetools/units
6456
CodeToolsDirTempl:=TDefineTemplate.Create('codetools',
6457
'CodeTools','','codetools',da_Directory);
6458
CodeToolsUnitsDirTempl:=TDefineTemplate.Create('codetools output directory',
6459
'units','','units',da_Directory);
6460
CodeToolsDirTempl.AddChild(CodeToolsUnitsDirTempl);
6461
CodeToolsUnitsDirTempl.AddChild(TDefineTemplate.Create('CompiledSrcPath',
6462
ctsSrcPathForCompiledUnits,
6463
ExternalMacroStart+'CompiledSrcPath',
6464
d(LazarusSrcDir+'components/codetools')
6465
,da_DefineRecurse));
6466
DirTempl.AddChild(CodeToolsDirTempl);
6468
5983
// <LazarusSrcDir>/components/custom
6469
5984
SubDirTempl:=TDefineTemplate.Create('Custom Components',
7555
7091
if (not FileExistsCached(Compiler)) then begin
7556
debugln(['TFPCTargetConfigCache.NeedsUpdate compiler file missing "',Compiler,'"']);
7092
debugln(['TFPCTargetConfigCache.NeedsUpdate TargetOS="',TargetOS,'" TargetCPU="',TargetCPU,'" compiler file missing "',Compiler,'"']);
7559
7095
if (FileAgeCached(Compiler)<>CompilerDate) then begin
7560
debugln(['TFPCTargetConfigCache.NeedsUpdate compiler file changed "',Compiler,'" FileAge=',FileAgeCached(Compiler),' StoredAge=',CompilerDate]);
7096
debugln(['TFPCTargetConfigCache.NeedsUpdate TargetOS="',TargetOS,'" TargetCPU="',TargetCPU,'" compiler file changed "',Compiler,'" FileAge=',FileAgeCached(Compiler),' StoredAge=',CompilerDate]);
7563
7099
if (RealCompiler<>'') and (CompareFilenames(RealCompiler,Compiler)<>0)
7565
7101
if (not FileExistsCached(RealCompiler))
7566
7102
or (FileAgeCached(RealCompiler)<>RealCompilerDate) then begin
7567
debugln(['TFPCTargetConfigCache.NeedsUpdate real compiler file changed "',RealCompiler,'"']);
7570
// fpc searches via PATH for the real compiler, resolves any symlink
7571
// and that is the RealCompiler
7573
AFilename:=FindRealCompilerInPath(TargetCPU,true);
7574
if RealCompilerInPath<>AFilename then begin
7575
debugln(['TFPCTargetConfigCache.NeedsUpdate real compiler in PATH changed from "',RealCompilerInPath,'" to "',AFilename,'"']);
7103
debugln(['TFPCTargetConfigCache.NeedsUpdate TargetOS="',TargetOS,'" TargetCPU="',TargetCPU,'" real compiler file changed "',RealCompiler,'"']);
7107
// fpc searches via PATH for the real compiler, resolves any symlink
7108
// and that is the RealCompiler
7109
AFilename:=FindRealCompilerInPath(TargetCPU,true);
7110
if RealCompilerInPath<>AFilename then begin
7111
debugln(['TFPCTargetConfigCache.NeedsUpdate TargetOS="',TargetOS,'" TargetCPU="',TargetCPU,'" real compiler in PATH changed from "',RealCompilerInPath,'" to "',AFilename,'"']);
7579
7114
for i:=0 to ConfigFiles.Count-1 do begin
7580
7115
Cfg:=ConfigFiles[i];
7581
7116
if Cfg.Filename='' then continue;
7582
7117
if FileExistsCached(Cfg.Filename)<>Cfg.FileExists then begin
7583
debugln(['TFPCTargetConfigCache.NeedsUpdate config fileexists changed "',Cfg.Filename,'"']);
7118
debugln(['TFPCTargetConfigCache.NeedsUpdate TargetOS="',TargetOS,'" TargetCPU="',TargetCPU,'" config fileexists changed "',Cfg.Filename,'"']);
7586
7121
if Cfg.FileExists and (FileAgeCached(Cfg.Filename)<>Cfg.FileDate) then begin
7587
debugln(['TFPCTargetConfigCache.NeedsUpdate config file changed "',Cfg.Filename,'"']);
7122
debugln(['TFPCTargetConfigCache.NeedsUpdate TargetOS="',TargetOS,'" TargetCPU="',TargetCPU,'" config file changed "',Cfg.Filename,'"']);
7129
function TFPCTargetConfigCache.GetFPCInfoCmdLineOptions(ExtraOptions: string
7132
CurTargetCPU: String;
7133
CurTargetOS: String;
7135
Result:=CompilerOptions;
7136
// Note: always pass the -P and -T options so that the compiler writes the
7137
// target macros with -va
7138
CurTargetCPU:=TargetCPU;
7139
if CurTargetCPU='' then
7140
CurTargetCPU:=GetCompiledTargetCPU;
7141
Result:=Result+' -P'+LowerCase(CurTargetCPU);
7142
CurTargetOS:=TargetOS;
7143
if CurTargetOS='' then
7144
CurTargetOS:=GetCompiledTargetOS;
7145
Result:=Result+' -T'+LowerCase(CurTargetOS);
7146
Result:=Result+' '+ExtraOptions;
7147
Result:=Trim(Result);
7594
7150
procedure TFPCTargetConfigCache.IncreaseChangeStamp;
7596
7152
CTIncreaseChangeStamp(FChangeStamp);