mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-07 04:50:31 +02:00
* support variable in packagenames
* fpcmake.loc support * fixed place of presettings which must be before FPCDIR is set
This commit is contained in:
parent
d61d0e32f2
commit
99cf60d6a7
File diff suppressed because it is too large
Load Diff
@ -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]
|
||||
|
151
utils/fpcmake.pp
151
utils/fpcmake.pp
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user