1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- {
- This file is part of the Free Component Library
- Copyright (c) 2022 by Michael Van Canneyt, [email protected]
- Replace hardcoded unit names xyz in a makefile by a variable XYZUNIT.
- (see genunitnames for how to create the variables)
-
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- program replaceunitnames;
- uses regexpr,sysutils, classes, types, namespacetool, prefixer;
- function ReplaceWord(aLine, aName, aFull: String): String;
- var
- RE : TRegExpr;
- begin
- RE:=TRegExpr.Create('\b'+aName+'\b');
- try
- RE.ModifierI:=True;
- Result:=RE.Replace(aLine,aFull);
- // Writeln(aLine,': ',aName,' -> ',aFull,' = ',Result);
- finally
- RE.Free;
- end;
- end;
- function ReplaceUnits(const aLine: string; aUnitNames: TStrings): String;
- Var
- res,aName,aFull : String;
- begin
- Res:=aLine;
- for aName in aUnitNames do
- begin
- aFull:='$('+UpperCase(aName)+'UNIT)';
- Res:=ReplaceWord(Res,aName,aFull);
- end;
- Result:=Res;
- end;
- var
- i : Integer;
- L,aNames,aMakeFile: TStrings;
- aFN,aRule : String;
- begin
- aNames:=Nil;
- aMakeFile:=nil;
- L:=TStringList.Create;
- try
- aMakeFile:=TStringList.Create;
- aNames:=TStringList.Create;
- L.LoadFromFile(paramstr(1));
- for I:=0 to L.Count-1 do
- begin
- L.GetNameValue(I,aFN,aRule);
- aNames.Add(aFN);
- end;
- aMakeFile.LoadFromFile(Paramstr(2));
- aMakeFile.SaveToFile(Paramstr(2)+'.bak');
- For I:=0 to aMakefile.Count-1 do
- aMakefile[I]:=ReplaceUnits(aMakefile[I],aNames);
- aMakeFile.SaveToFile(ParamStr(2)+'.new');
- finally
- aMakeFile.Free;
- aNames.Free;
- L.Free;
- end;
- end.
|