* support variable in packagenames

* fpcmake.loc support
  * fixed place of presettings which must be before FPCDIR is set
This commit is contained in:
peter 2000-01-08 16:31:04 +00:00
parent d61d0e32f2
commit 99cf60d6a7
3 changed files with 421 additions and 322 deletions

File diff suppressed because it is too large Load Diff

View File

@ -111,6 +111,10 @@ export FPC OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FPC_VERSION
[fpcdircheckenv]
#####################################################################
# FPCDIR Setting
#####################################################################
# Test FPCDIR to look if the RTL dir exists
ifdef FPCDIR
override FPCDIR:=$(subst \,/,$(FPCDIR))
@ -137,10 +141,14 @@ ifneq ($(FPCDIR),.)
UNITSDIR=$(FPCDIR)/units/$(OS_TARGET)
endif
[checkfpcdirsubs]
# Check if the dirs really exists, else turn it off
ifeq ($(wildcard $(UNITSDIR)),)
UNITSDIR=
endif
ifeq ($(wildcard $(TOOLKITDIR)),)
TOOLKITDIR=
endif
ifeq ($(wildcard $(PACKAGEDIR)),)
PACKAGEDIR=
endif
@ -149,31 +157,21 @@ COMPONENTDIR=
endif
[defaultsettings]
[presettings]
#####################################################################
# Default Settings
# Pre Settings
#####################################################################
# Release ? Then force OPT and don't use extra opts via commandline
ifndef REDIRFILE
REDIRFILE=log
endif
ifdef REDIR
ifndef inlinux
override FPC=redir -eo $(FPC)
endif
# set the verbosity to max
override OPT+=-va
override REDIR:= >> $(REDIRFILE)
endif
[usersettings]
#####################################################################
# User Settings
#####################################################################
[postsettings]
#####################################################################
# Post Settings
#####################################################################
[dir_default]
#####################################################################
@ -282,6 +280,26 @@ endif
export OTHERLIBDIR
[redir]
#####################################################################
# Redirection
#####################################################################
# Release ? Then force OPT and don't use extra opts via commandline
ifndef REDIRFILE
REDIRFILE=log
endif
ifdef REDIR
ifndef inlinux
override FPC=redir -eo $(FPC)
endif
# set the verbosity to max
override FPCOPT+=-va
override REDIR:= >> $(REDIRFILE)
endif
[command_begin]
#####################################################################
# Compiler Command Line
@ -871,14 +889,14 @@ fpc_test: examples
# General compile rules
#####################################################################
.PHONY: fpc_all fpc_debug
.PHONY: fpc_packages fpc_all fpc_debug
$(FPCMADE):
$(FPCMADE): $(ALLTARGET)
@$(ECHO) Compiled > $(FPCMADE)
fpc_all: $(addsuffix _package,$(COMPILEPACKAGES)) \
$(addsuffix _component,$(COMPILECOMPONENTS)) \
$(ALLTARGET) $(FPCMADE)
fpc_packages: $(addsuffix _package,$(COMPILEPACKAGES))
fpc_all: fpc_packages $(FPCMADE)
fpc_debug:
$(MAKE) all DEBUG=1
@ -1244,9 +1262,19 @@ endif
@$(ECHO) DataInstallDir....... $(DATAINSTALLDIR)
@$(ECHO)
[localmakefile]
#####################################################################
# Local Makefile
#####################################################################
ifneq ($(wildcard fpcmake.loc),)
include fpcmake.loc
endif
[userrules]
#####################################################################
# Users rules
#####################################################################
[end]

View File

@ -150,6 +150,7 @@ type
DefaultCPU : string;
DirFpc,
DirPackage,
DirToolkit,
DirComponent,
DirUnit,
DirLib,
@ -160,6 +161,7 @@ type
DirInc : string;
RequireRTL : boolean;
RequireOptions : string;
RequireToolkits,
RequirePackages,
RequireComponents : TTargetsString;
LibName,
@ -330,8 +332,9 @@ begin
{ require }
RequireRTL:=ReadBool(ini_require,'rtl',true);
RequireOptions:=ReadString(ini_require,'options','');
ReadTargetsString(requireComponents,ini_require,'components','');
ReadTargetsString(requireToolkits,ini_require,'toolkit','');
ReadTargetsString(requirePackages,ini_require,'packages','');
ReadTargetsString(requireComponents,ini_require,'components','');
if userini.RequireRTL then
begin
if userini.Requirepackages[0]<>'' then
@ -342,7 +345,8 @@ begin
{ dirs }
DirFpc:=ReadString(ini_dirs,'fpcdir','');
DirPackage:=ReadString(ini_dirs,'packagedir','$(FPCDIR)/packages');
DirComponent:=ReadString(ini_dirs,'componentdir','$(FPCDIR)/components');
DirToolkit:=ReadString(ini_dirs,'toolkitdir','');
DirComponent:=ReadString(ini_dirs,'componentdir','');
DirUnit:=ReadString(ini_dirs,'unitdir','');
DirLib:=ReadString(ini_dirs,'libdir','');
DirObj:=ReadString(ini_dirs,'objdir','');
@ -450,6 +454,27 @@ end;
Makefile writing
*****************************************************************************}
function VarName(const s:string):string;
var
i : longint;
begin
i:=0;
result:=s;
while i<length(result) do
begin
inc(i);
case result[i] of
'$','(',')' :
begin
Delete(result,i,1);
dec(i);
end;
'a'..'z' :
result[i]:=chr(ord(result[i])-32);
end;
end;
end;
function WriteMakefile(const fn:string):boolean;
var
mf : TStringList;
@ -596,8 +621,8 @@ var
if j=0 then
j:=length(hs)+1;
pack:=Copy(hs,1,j-1);
packdirvar:='PACKAGEDIR_'+Uppercase(pack);
unitdirvar:='UNITDIR_'+Uppercase(pack);
packdirvar:='PACKAGEDIR_'+VarName(pack);
unitdirvar:='UNITDIR_'+VarName(pack);
packdir:=packpre+'/'+pack;
unitdir:='$(UNITSDIR)/'+pack;
for k:=1to specialdirs do
@ -642,7 +667,7 @@ var
hs : string;
begin
AddHead('Dir '+s);
mf.Add('ifdef OBJECTDIR'+Uppercase(s));
mf.Add('ifdef OBJECTDIR'+VarName(s));
hs:='.PHONY: ';
for j:=1to rules do
hs:=hs+' '+s+'_'+rulestr[j];
@ -662,8 +687,8 @@ var
var
packagedir : string;
begin
packagedir:='$(PACKAGEDIR_'+Uppercase(s)+')';
mf.Add('ifdef PACKAGE'+Uppercase(s));
packagedir:='$(PACKAGEDIR_'+VarName(s)+')';
mf.Add('ifdef PACKAGE'+VarName(s));
mf.Add('ifneq ($(wildcard '+packagedir+'),)');
mf.Add('ifeq ($(wildcard '+packagedir+'/$(FPCMADE)),)');
mf.Add('override COMPILEPACKAGES+='+s);
@ -691,7 +716,7 @@ var
i:=pos(' ',hs);
if i=0 then
i:=length(hs)+1;
mf.Add(prefix+Uppercase(Copy(hs,1,i-1))+'=1');
mf.Add(prefix+VarName(Copy(hs,1,i-1))+'=1');
{ add to the list of dirs without duplicates }
AddStrNoDup(hs2,Copy(hs,1,i-1));
system.delete(hs,1,i);
@ -702,6 +727,32 @@ var
AddTargetDefines:=hs2;
end;
procedure AddTargetsPackageDep(const ts:TTargetsString);
var
Phony,hs : string;
i : integer;
begin
{ Components }
Phony:='';
if not TargetStringEmpty(ts) then
begin
hs:=AddTargetDefines(ts,'PACKAGE');
repeat
i:=pos(' ',hs);
if i=0 then
i:=length(hs)+1;
AddPackageDep(Copy(hs,1,i-1));
system.delete(hs,1,i);
until hs='';
mf.Add('');
end;
if Phony<>'' then
begin
mf.Add('.PHONY: '+Phony);
mf.Add('');
end;
end;
var
hs : string;
i : integer;
@ -736,6 +787,13 @@ begin
{ fpc detection }
AddSection(true,'fpcdetect');
{ Pre Settings }
if userini.PreSettings.count>0 then
begin
AddSection(true,'presettings');
AddStrings(userini.PreSettings);
end;
{ fpc dir }
AddSection(true,'fpcdircheckenv');
if userini.dirfpc<>'' then
@ -755,22 +813,17 @@ begin
Add('ifndef PACKAGEDIR');
Add('PACKAGEDIR='+userini.dirpackage);
Add('endif');
Add('ifndef TOOLKITDIR');
Add('TOOLKITDIR='+userini.dirtoolkit);
Add('endif');
Add('ifndef COMPONENTDIR');
Add('COMPONENTDIR='+userini.dircomponent);
Add('endif');
AddSection(userini.requirertl,'fpcdirsubs');
{ write the default & user settings }
AddSection(true,'defaultsettings');
AddSection(true,'usersettings');
{ Pre Settings }
if userini.PreSettings.count>0 then
begin
AddHead('Pre Settings');
AddStrings(userini.PreSettings);
end;
{ Targets }
AddHead('Targets');
AddTargets('DIROBJECTS',userini.targetdirs,true);
@ -837,9 +890,8 @@ begin
{ Packages }
AddHead('Packages');
AddTargets('PACKAGES',userini.Requirepackages,false);
AddTargets('TOOLKITS',userini.Requiretoolkits,false);
AddTargets('COMPONENTS',userini.Requirecomponents,false);
AddTargetsUnitDir('$(PACKAGEDIR)',userini.Requirepackages);
AddTargetsUnitDir('$(COMPONENTDIR)',userini.Requirecomponents);
{ Libs }
AddHead('Libraries');
@ -869,13 +921,22 @@ begin
hs:=hs+'fpc_infoinstall ';
Add('INFOTARGET='+hs);
end;
Add('');
{ Post Settings }
if userini.PostSettings.count>0 then
begin
AddHead('Post Settings');
AddSection(true,'postsettings');
AddStrings(userini.PostSettings);
Add('');
end;
{ package/component dirs }
AddHead('Package/component dirs');
AddSection(userini.requirertl,'checkfpcdirsubs');
AddTargetsUnitDir('$(TOOLKITDIR)',userini.Requiretoolkits);
AddTargetsUnitDir('$(PACKAGEDIR)',userini.Requirepackages);
AddTargetsUnitDir('$(COMPONENTDIR)',userini.Requirecomponents);
Add('');
{ write dirs }
@ -887,6 +948,9 @@ begin
AddSection(true,'dir_install');
end;
{ redirection }
AddSection(true,'redir');
{ commandline }
if userini.section[sec_command] then
begin
@ -894,6 +958,7 @@ begin
AddSection(true,'command_begin');
AddSection((userini.Requireoptions<>''),'command_needopt');
AddSection((userini.dirunit<>'') or
(not TargetStringEmpty(userini.Requiretoolkits)) or
(not TargetStringEmpty(userini.Requirepackages)) or
(not TargetStringEmpty(userini.Requirecomponents))
,'command_needunit');
@ -944,41 +1009,9 @@ begin
{ Package requirements, must be before the other rules so it's done first }
AddSection(true,'packagerequirerules');
Phony:='';
if userini.RequireRTL then
AddPackageDep('rtl');
Add('');
if not TargetStringEmpty(userini.RequirePackages) then
begin
hs:=AddTargetDefines(userini.RequirePackages,'PACKAGE');
repeat
i:=pos(' ',hs);
if i=0 then
i:=length(hs)+1;
AddPackageDep(Copy(hs,1,i-1));
system.delete(hs,1,i);
until hs='';
Add('');
end;
if Phony<>'' then
begin
Add('.PHONY: '+Phony);
Add('');
end;
{ Components }
Phony:='';
if not TargetStringEmpty(userini.RequireComponents) then
begin
hs:=AddTargetDefines(userini.RequireComponents,'COMPONENT');
repeat
i:=pos(' ',hs);
if i=0 then
i:=length(hs)+1;
AddPackageDep(Copy(hs,1,i-1));
system.delete(hs,1,i);
until hs='';
Add('');
end;
AddTargetsPackageDep(userini.RequireToolkits);
AddTargetsPackageDep(userini.RequirePackages);
AddTargetsPackageDep(userini.RequireComponents);
if Phony<>'' then
begin
Add('.PHONY: '+Phony);
@ -1025,6 +1058,9 @@ begin
Add('');
end;
{ local makefile }
AddSection(true,'localmakefile');
{ insert users rules }
if userini.rules.count>0 then
begin
@ -1093,7 +1129,12 @@ begin
end.
{
$Log$
Revision 1.20 2000-01-07 16:46:02 daniel
Revision 1.21 2000-01-08 16:31:04 peter
* support variable in packagenames
* fpcmake.loc support
* fixed place of presettings which must be before FPCDIR is set
Revision 1.20 2000/01/07 16:46:02 daniel
* copyright 2000
Revision 1.19 2000/01/06 15:49:23 peter