codetools: fixed fpc source directory definitions if blocks

git-svn-id: trunk@17731 -
This commit is contained in:
mattias 2008-12-08 17:58:16 +00:00
parent 213c8cf730
commit 2629831200
4 changed files with 63 additions and 53 deletions

View File

@ -878,7 +878,7 @@ begin
ATestPascalFile:=GetTempFilename('fpctest.pas','');
CurFPCOptions:=Config.FPCOptions;
if TargetOS<>'' then AddFPCOption('-T'+TargetOS);
if TargetProcessor<>'' then AddFPCOption('-Op'+TargetProcessor);
if TargetProcessor<>'' then AddFPCOption('-P'+TargetProcessor);
FPCDefines:=CreateFPCTemplate(Config.FPCPath, CurFPCOptions,
ATestPascalFile,
FPCUnitPath, TargetOS, TargetProcessor,

View File

@ -80,6 +80,8 @@ const
CompiledSrcPathMacroName = ExternalMacroStart+'CompiledSrcPath';
UnitLinksMacroName = ExternalMacroStart+'UnitLinks';
FPCUnitPathMacroName = ExternalMacroStart+'FPCUnitPath';
TargetOSMacroName = ExternalMacroStart+'TargetOS';
TargetCPUMacroName = ExternalMacroStart+'TargetCPU';
DefinePathMacro = '$('+DefinePathMacroName+')';
UnitPathMacro = '$('+UnitPathMacroName+')';
@ -91,6 +93,8 @@ const
CompiledSrcPathMacro = '$('+CompiledSrcPathMacroName+')';
UnitLinksMacro = '$('+UnitLinksMacroName+')';
FPCUnitPathMacro = '$('+FPCUnitPathMacroName+')';
TargetOSMacro = '$('+TargetOSMacroName+')';
TargetCPUMacro = '$('+TargetCPUMacroName+')';
// virtual directories
@ -3142,7 +3146,7 @@ function TDefinePool.CreateFPCSrcTemplate(
UnitLinkListValid: boolean; var UnitLinkList: string;
Owner: TObject): TDefineTemplate;
var
Dir, TargetOS, SrcOS, SrcOS2, TargetProcessor, UnitLinks,
Dir, SrcOS, SrcOS2, TargetProcessor, UnitLinks,
IncPathMacro: string;
DS: char; // dir separator
UnitTree: TAVLTree; // tree of TDefTemplUnitNameLink
@ -3239,7 +3243,7 @@ var
// replace operating system
for i:=Low(FPCOperatingSystemNames) to High(FPCOperatingSystemNames)
do
if ReplaceDir(FPCOperatingSystemNames[i],DefaultTargetOS,TargetOS)
if ReplaceDir(FPCOperatingSystemNames[i],DefaultTargetOS,TargetOSMacro)
then
break;
// replace operating system class
@ -3584,7 +3588,7 @@ var
// if TargetOS<>SrcOS
IfTargetOSIsNotSrcOS:=TDefineTemplate.Create(
'IF TargetOS<>SrcOS',
ctsIfTargetOSIsNotSrcOS,'',''''+TargetOS+'''<>'''+SrcOS+'''',da_If);
ctsIfTargetOSIsNotSrcOS,'',''''+TargetOSMacro+'''<>'''+SrcOS+'''',da_If);
// rtl/$(#SrcOS)
RTLSrcOSDir:=TDefineTemplate.Create('SrcOS',SrcOS,'',
SrcOS,da_Directory);
@ -3602,7 +3606,7 @@ var
// if TargetOS<>SrcOS2
IfTargetOSIsNotSrcOS2:=TDefineTemplate.Create(
'IF TargetOS is not SrcOS2',
ctsIfTargetOSIsNotSrcOS,'',''''+TargetOS+'''<>'''+SrcOS2+'''',da_If);
ctsIfTargetOSIsNotSrcOS,'',''''+TargetOSMacro+'''<>'''+SrcOS2+'''',da_If);
// rtl/$(#SrcOS2)
RTLSrcOS2Dir:=TDefineTemplate.Create('SrcOS2',SrcOS2,'',
SrcOS2,da_Directory);
@ -3645,7 +3649,6 @@ begin
end;
DS:=PathDelim;
Dir:=AppendPathDelim(FPCSrcDir);
TargetOS:='$('+ExternalMacroStart+'TargetOS)';
SrcOS:='$('+ExternalMacroStart+'SrcOS)';
SrcOS2:='$('+ExternalMacroStart+'SrcOS2)';
TargetProcessor:='$('+ExternalMacroStart+'TargetProcessor)';
@ -3698,16 +3701,12 @@ begin
+';'+Dir+'rtl'+DS+'objpas'+DS+'classes'
+';'+Dir+'rtl'+DS+'inc'+DS
+';'+Dir+'rtl'+DS+'inc'+DS+'graph'+DS
+';'+Dir+'rtl'+DS+SrcOS+DS;
if (TargetOS<>SrcOS) then
s:=s+';'+Dir+'rtl'+DS+TargetOS+DS;
if (SrcOS2<>'') and (SrcOS2<>SrcOS) then begin
s:=s+';'+Dir+'rtl'+DS+SrcOS2+DS
+';'+Dir+'rtl'+DS+SrcOS2+DS+TargetProcessor;
end;
s:=s
+';'+Dir+'rtl'+DS+SrcOS+DS
+';'+Dir+'rtl'+DS+TargetOSMacro+DS
+';'+Dir+'rtl'+DS+SrcOS2+DS
+';'+Dir+'rtl'+DS+SrcOS2+DS+TargetProcessor
+';'+Dir+'rtl'+DS+TargetProcessor+DS
+';'+Dir+'rtl'+DS+TargetOS+DS+TargetProcessor+DS;
+';'+Dir+'rtl'+DS+TargetOSMacro+DS+TargetProcessor+DS;
RTLDir.AddChild(TDefineTemplate.Create('Include Path',
Format(ctsIncludeDirectoriesPlusDirs,
['objpas, inc,'+TargetProcessor+','+SrcOS]),
@ -3715,10 +3714,10 @@ begin
// rtl/$(#TargetOS)
RTLOSDir:=TDefineTemplate.Create('TargetOS','Target OS','',
TargetOS,da_Directory);
TargetOSMacro,da_Directory);
s:=IncPathMacro
+';'+Dir+'rtl'+DS+TargetOS+DS+SrcOS+'inc' // e.g. rtl/win32/inc/
+';'+Dir+'rtl'+DS+TargetOS+DS+TargetProcessor+DS
+';'+Dir+'rtl'+DS+TargetOSMacro+DS+SrcOS+'inc' // e.g. rtl/win32/inc/
+';'+Dir+'rtl'+DS+TargetOSMacro+DS+TargetProcessor+DS
;
RTLOSDir.AddChild(TDefineTemplate.Create('Include Path',
Format(ctsIncludeDirectoriesPlusDirs,[TargetProcessor]),
@ -3733,7 +3732,7 @@ begin
// rtl: IF SrcOS=win then add include path rtl/win/wininc
IFTempl:=TDefineTemplate.Create('If SrcOS=win','If SrcOS=win',
'',SrcOS+'=''win''',da_If);
'',''''+SrcOS+'''=''win''',da_If);
IFTempl.AddChild(TDefineTemplate.Create('Include Path',
Format(ctsIncludeDirectoriesPlusDirs,['wininc']),
ExternalMacroStart+'IncPath',
@ -3745,7 +3744,7 @@ begin
// rtl: IF TargetOS=darwin then add include path rtl/freebsd
IFTempl:=TDefineTemplate.Create('If TargetOS=darwin','If TargetOS=darwin',
'',TargetOS+'=''darwin''',da_If);
'',''''+TargetOSMacro+'''=''darwin''',da_If);
IFTempl.AddChild(TDefineTemplate.Create('Include Path',
Format(ctsIncludeDirectoriesPlusDirs,['rtl'+DS+'freebsd']),
ExternalMacroStart+'IncPath',
@ -3768,7 +3767,7 @@ begin
ExternalMacroStart+'IncPath',
d( DefinePathMacro+'/inc/'
+';'+DefinePathMacro+'/classes/'
+';'+DefinePathMacro+'/'+TargetOS+DS // TargetOS before SrcOS !
+';'+DefinePathMacro+'/'+TargetOSMacro+DS // TargetOS before SrcOS !
+';'+DefinePathMacro+'/'+SrcOS+DS
+';'+IncPathMacro)
,da_DefineRecurse));
@ -3804,7 +3803,7 @@ begin
Format(ctsIncludeDirectoriesPlusDirs,['inc,'+SrcOS]),
ExternalMacroStart+'IncPath',
d( DefinePathMacro+'/inc/'
+';'+DefinePathMacro+'/'+TargetOS+DS // TargetOS before SrcOS !
+';'+DefinePathMacro+'/'+TargetOSMacro+DS // TargetOS before SrcOS !
+';'+DefinePathMacro+'/'+SrcOS+DS
+';'+IncPathMacro)
,da_DefineRecurse));
@ -3822,7 +3821,7 @@ begin
FCLSubSrcDir.AddChild(TDefineTemplate.Create('Include Path',
Format(ctsIncludeDirectoriesPlusDirs,['inc,'+SrcOS]),
ExternalMacroStart+'IncPath',
d( DefinePathMacro+'/'+TargetOS+DS // TargetOS before SrcOS !
d( DefinePathMacro+'/'+TargetOSMacro+DS // TargetOS before SrcOS !
+';'+DefinePathMacro+'/'+SrcOS+DS
+';'+IncPathMacro)
,da_DefineRecurse));

View File

@ -17,7 +17,8 @@ var
begin
// setup the Options
CodeToolBoss.SimpleInit(ConfigFilename);
writeln(CodeToolBoss.GetIncludePathForDirectory());
writeln('UnitPath: ',CodeToolBoss.GetUnitPathForDirectory('/home/mattias/pascal/fpc_sources/23/fpc/rtl/'));
writeln('IncPath: ',CodeToolBoss.GetIncludePathForDirectory('/home/mattias/pascal/fpc_sources/23/fpc/rtl/'));
// Example: find declaration of 'TObject'

View File

@ -213,38 +213,48 @@ begin
exit;
end;
// set our debug function, clear codetools cache and calculate the values
if FNodeValues<>nil then
FNodeValues.FreeAndClear;
DefineTree.ClearCache;// make sure the defines are reparsed
OldOnCalculate:=DefineTree.OnCalculate;
DefineTree.OnCalculate:=@DefineTreeCalculate;
Defines:=nil;
try
Defines:=DefineTree.GetDefinesForDirectory(Dir,false);
finally
DefineTree.OnCalculate:=OldOnCalculate;
end;
// fill the ValuesListview
ValuesListview.BeginUpdate;
for i:=0 to Defines.Count-1 do begin
if ValuesListview.Items.Count<=i then
ListItem:=ValuesListview.Items.Add
else
ListItem:=ValuesListview.Items[i];
ListItem.Caption:=Defines.Names(i);
Value:=Defines.Values(i);
if length(Value)>100 then
Value:=copy(Value,1,100)+' ...';
if ListItem.SubItems.Count<1 then
ListItem.SubItems.Add(Value)
else
ListItem.SubItems[0]:=Value;
// set our debug function, clear codetools cache and calculate the values
if FNodeValues<>nil then
FNodeValues.FreeAndClear;
DefineTree.ClearCache;// make sure the defines are reparsed
OldOnCalculate:=DefineTree.OnCalculate;
DefineTree.OnCalculate:=@DefineTreeCalculate;
try
Defines:=DefineTree.GetDefinesForDirectory(Dir,false);
finally
DefineTree.OnCalculate:=OldOnCalculate;
end;
// fill the ValuesListview
ValuesListview.BeginUpdate;
if Defines<>nil then begin
for i:=0 to Defines.Count-1 do begin
if ValuesListview.Items.Count<=i then
ListItem:=ValuesListview.Items.Add
else
ListItem:=ValuesListview.Items[i];
ListItem.Caption:=Defines.Names(i);
Value:=Defines.Values(i);
if length(Value)>100 then
Value:=copy(Value,1,100)+' ...';
if ListItem.SubItems.Count<1 then
ListItem.SubItems.Add(Value)
else
ListItem.SubItems[0]:=Value;
end;
while ValuesListview.Items.Count>Defines.Count do
ValuesListview.Items.Delete(ValuesListview.Items.Count-1);
end else begin
ValuesListview.Items.Clear;
end;
ValuesListview.EndUpdate;
UpdateValue;
finally
Defines.Free;
end;
while ValuesListview.Items.Count>Defines.Count do
ValuesListview.Items.Delete(ValuesListview.Items.Count-1);
ValuesListview.EndUpdate;
UpdateValue;
end;
procedure TCodeToolsDefinesDialog.UpdateValue;