Sfoglia il codice sorgente

* support variable in packagenames
* fpcmake.loc support
* fixed place of presettings which must be before FPCDIR is set

peter 25 anni fa
parent
commit
99cf60d6a7
3 ha cambiato i file con 344 aggiunte e 256 eliminazioni
  1. 198 179
      utils/fpcmake.inc
  2. 50 22
      utils/fpcmake.ini
  3. 96 55
      utils/fpcmake.pp

File diff suppressed because it is too large
+ 198 - 179
utils/fpcmake.inc


+ 50 - 22
utils/fpcmake.ini

@@ -111,6 +111,10 @@ export FPC OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FPC_VERSION
 
 
 
 
 [fpcdircheckenv]
 [fpcdircheckenv]
+#####################################################################
+# FPCDIR Setting
+#####################################################################
+
 # Test FPCDIR to look if the RTL dir exists
 # Test FPCDIR to look if the RTL dir exists
 ifdef FPCDIR
 ifdef FPCDIR
 override FPCDIR:=$(subst \,/,$(FPCDIR))
 override FPCDIR:=$(subst \,/,$(FPCDIR))
@@ -137,10 +141,14 @@ ifneq ($(FPCDIR),.)
 UNITSDIR=$(FPCDIR)/units/$(OS_TARGET)
 UNITSDIR=$(FPCDIR)/units/$(OS_TARGET)
 endif
 endif
 
 
+[checkfpcdirsubs]
 # Check if the dirs really exists, else turn it off
 # Check if the dirs really exists, else turn it off
 ifeq ($(wildcard $(UNITSDIR)),)
 ifeq ($(wildcard $(UNITSDIR)),)
 UNITSDIR=
 UNITSDIR=
 endif
 endif
+ifeq ($(wildcard $(TOOLKITDIR)),)
+TOOLKITDIR=
+endif
 ifeq ($(wildcard $(PACKAGEDIR)),)
 ifeq ($(wildcard $(PACKAGEDIR)),)
 PACKAGEDIR=
 PACKAGEDIR=
 endif
 endif
@@ -149,31 +157,21 @@ COMPONENTDIR=
 endif
 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]
 [usersettings]
 #####################################################################
 #####################################################################
 # User Settings
 # User Settings
 #####################################################################
 #####################################################################
 
 
+[postsettings]
+#####################################################################
+# Post Settings
+#####################################################################
+
 
 
 [dir_default]
 [dir_default]
 #####################################################################
 #####################################################################
@@ -282,6 +280,26 @@ endif
 export OTHERLIBDIR
 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]
 [command_begin]
 #####################################################################
 #####################################################################
 # Compiler Command Line
 # Compiler Command Line
@@ -871,14 +889,14 @@ fpc_test: examples
 # General compile rules
 # General compile rules
 #####################################################################
 #####################################################################
 
 
-.PHONY: fpc_all fpc_debug
+.PHONY: fpc_packages fpc_all fpc_debug
 
 
-$(FPCMADE):
+$(FPCMADE): $(ALLTARGET)
         @$(ECHO) Compiled > $(FPCMADE)
         @$(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:
 fpc_debug:
         $(MAKE) all DEBUG=1
         $(MAKE) all DEBUG=1
@@ -1244,9 +1262,19 @@ endif
         @$(ECHO)  DataInstallDir....... $(DATAINSTALLDIR)
         @$(ECHO)  DataInstallDir....... $(DATAINSTALLDIR)
         @$(ECHO)
         @$(ECHO)
 
 
+[localmakefile]
+#####################################################################
+# Local Makefile
+#####################################################################
+
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+
 [userrules]
 [userrules]
 #####################################################################
 #####################################################################
 # Users rules
 # Users rules
 #####################################################################
 #####################################################################
 
 
+
 [end]
 [end]

+ 96 - 55
utils/fpcmake.pp

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

Some files were not shown because too many files changed in this diff