Browse Source

Add support for reading/writing required packages from/to the PCP file

fpcp.pas, tpcppackage:
  + new methods writerequiredpackages and readrequiredpackages
  * loadpcp: use readrequiredpackages
  * savepcp: use writerequiredpackages
pcp.pas:
  * increase PCP version

git-svn-id: branches/svenbarth/packages@29040 -
svenbarth 10 years ago
parent
commit
558f2aeb3a
2 changed files with 42 additions and 3 deletions
  1. 41 2
      compiler/fpcp.pas
  2. 1 1
      compiler/pcp.pas

+ 41 - 2
compiler/fpcp.pas

@@ -42,8 +42,10 @@ interface
       procedure setfilename(const fn:string;allowoutput:boolean);
       procedure setfilename(const fn:string;allowoutput:boolean);
       procedure writecontainernames;
       procedure writecontainernames;
       procedure writecontainedunits;
       procedure writecontainedunits;
+      procedure writerequiredpackages;
       procedure readcontainernames;
       procedure readcontainernames;
       procedure readcontainedunits;
       procedure readcontainedunits;
+      procedure readrequiredpackages;
     public
     public
       constructor create(const pn:string);
       constructor create(const pn:string);
       destructor destroy; override;
       destructor destroy; override;
@@ -258,6 +260,19 @@ implementation
       pcpfile.writeentry(ibendcontained);
       pcpfile.writeentry(ibendcontained);
     end;
     end;
 
 
+  procedure tpcppackage.writerequiredpackages;
+    var
+      i : longint;
+    begin
+      pcpfile.putlongint(requiredpackages.count);
+      pcpfile.writeentry(ibstartrequireds);
+      for i:=0 to requiredpackages.count-1 do
+        begin
+          pcpfile.putstring(requiredpackages.NameOfIndex(i));
+        end;
+      pcpfile.writeentry(ibendrequireds);
+    end;
+
   procedure tpcppackage.readcontainernames;
   procedure tpcppackage.readcontainernames;
     begin
     begin
       if pcpfile.readentry<>ibpackagefiles then
       if pcpfile.readentry<>ibpackagefiles then
@@ -299,6 +314,30 @@ implementation
         end;
         end;
     end;
     end;
 
 
+  procedure tpcppackage.readrequiredpackages;
+    var
+      cnt,i : longint;
+      name : string;
+    begin
+      if pcpfile.readentry<>ibstartrequireds then
+        begin
+          Writeln('Error reading pcp file');
+          internalerror(2014110901);
+        end;
+      cnt:=pcpfile.getlongint;
+      if pcpfile.readentry<>ibendrequireds then
+        begin
+          Writeln('Error reading pcp file');
+          internalerror(2014110902);
+        end;
+      for i:=0 to cnt-1 do
+        begin
+          name:=pcpfile.getstring;
+          requiredpackages.add(name,nil);
+          Writeln('Found required package ',name);
+        end;
+    end;
+
     constructor tpcppackage.create(const pn: string);
     constructor tpcppackage.create(const pn: string);
     begin
     begin
       inherited create(pn);
       inherited create(pn);
@@ -337,7 +376,7 @@ implementation
 
 
       readcontainernames;
       readcontainernames;
 
 
-      //readrequiredpackages
+      readrequiredpackages;
 
 
       readcontainedunits;
       readcontainedunits;
     end;
     end;
@@ -355,7 +394,7 @@ implementation
 
 
       writecontainernames;
       writecontainernames;
 
 
-      //writerequiredpackages;
+      writerequiredpackages;
 
 
       writecontainedunits;
       writecontainedunits;
 
 

+ 1 - 1
compiler/pcp.pas

@@ -29,7 +29,7 @@ interface
     cstreams,entfile;
     cstreams,entfile;
 
 
   const
   const
-    CurrentPCPVersion=1;
+    CurrentPCPVersion=2;
 
 
   { unit flags }
   { unit flags }
     //uf_init                = $000001; { unit has initialization section }
     //uf_init                = $000001; { unit has initialization section }