DEADSOFTWARE

cpmake: add option to generate symbol files only
[cpc.git] / src / generic / Dsw / Mod / MakeMain.cp
index 5c84f5296973d52dd8df3146e4eee924c5bade84..7d98bdf84b7e7105d35dfc0253a9df0e355e5f42 100644 (file)
@@ -29,7 +29,8 @@ MODULE DswMakeMain;
     module = 75; eof = 76;
 
     (* module state flags *)
-    imported = 0; trace = 1; hasObj = 2; hasSym = 3; hasErrors = 4; library = 5;
+    imported = 0; trace = 1; hasObj = 2; hasSym = 3; hasErrors = 4;
+    library = 5; force = 6;
 
     debugImport = FALSE;
     debugOrder = FALSE;
@@ -56,7 +57,7 @@ MODULE DswMakeMain;
     END;
 
   VAR (* options *)
-    auto, trap, clean: BOOLEAN;
+    auto, trap, clean, symonly: BOOLEAN;
     exe, target, base: String;
     jobs: INTEGER;
 
@@ -156,6 +157,7 @@ MODULE DswMakeMain;
     Log.String("Options:"); Log.Ln;
     Log.String("  -a          Enable automatic dependency resolution"); Log.Ln;
     Log.String("  -c          Remove all generated files"); Log.Ln;
+    Log.String("  -s          Generate symbol files only"); Log.Ln;
     Log.String("  -t target   Specify target rules"); Log.Ln;
     Log.String("  -o file     Generate object file"); Log.Ln;
     Log.String("  -j num      Specifies the number of jobs to run simultaneously"); Log.Ln;
@@ -170,10 +172,11 @@ MODULE DswMakeMain;
     exe := NIL; auto := FALSE; jobs := 1; def.next := NIL; mno := 0; rno := 0;
     target := NewStr("default"); base := NewStr("cprules");
     LOOP
-      CASE DswOpts.GetOpt("acdgo:t:j:f:") OF
+      CASE DswOpts.GetOpt("acdsgo:t:j:f:") OF
       | "a": auto := TRUE
       | "c": clean := TRUE
       | "d": trap := TRUE
+      | "s": symonly := TRUE
       | "f": base := DswOpts.str
       | "h": Help
       | "j": jobs := MIN(MAX(StrToInt(DswOpts.str, 1), 1), maxJobs)
@@ -350,6 +353,7 @@ MODULE DswMakeMain;
     ParseModule(m);
     DevCPR.Check;
     ok := DevCPM.noerr;
+    IF DevCPR.used THEN INCL(m.flags, force) END;
     DevCPR.Close;
     DevCPM.InsertMarks;
     DevCPM.Close;
@@ -521,6 +525,14 @@ MODULE DswMakeMain;
     p := DswProcs.dir.New();
     p.Program(base + "/" + target + "/" + "build");
     p.PutParam(m.odc);
+    IF force IN m.flags THEN p.PutParam("-f") END;
+    IF symonly OR (library IN m.flags) THEN p.PutParam("-s") END;
+    s := def.next;
+    WHILE s # NIL DO
+      IF s.value THEN p.PutParam("-D") ELSE p.PutParam("-d") END;
+      p.PutParam(s.name$);
+      s := s.next
+    END;
     RETURN p
   END PrepareCompiler;
 
@@ -578,7 +590,7 @@ MODULE DswMakeMain;
   PROCEDURE Link;
     VAR p: DswProcs.Process; ok: BOOLEAN; i, res: INTEGER;
   BEGIN
-    IF exe # NIL THEN
+    IF ~symonly & (exe # NIL) THEN
       p := DswProcs.dir.New();
       p.Program(base + "/" + target + "/" + "link");
       p.PutParam(exe$);