diff --git a/src/voc/OPC.Mod b/src/voc/OPC.Mod index bac5ce80..be6f6df6 100644 --- a/src/voc/OPC.Mod +++ b/src/voc/OPC.Mod @@ -94,7 +94,8 @@ MODULE OPC; (* copyright (c) J. Templ 12.7.95 / 3.7.96 *) BEGIN indentLevel := 0; ptrinit := OPM.ptrinit IN OPM.opt; - mainprog := OPM.mainprog IN OPM.opt; + (*mainprog := OPM.mainprog IN OPM.opt;*) + mainprog := OPM.mainProg OR OPM.mainLinkStat; ansi := OPM.ansi IN OPM.opt; IF ansi THEN BodyNameExt := "__init(void)" ELSE BodyNameExt := "__init()" END END Init; diff --git a/src/voc/OPM.cmdln.Mod b/src/voc/OPM.cmdln.Mod index f625f2ba..4f01cf7e 100644 --- a/src/voc/OPM.cmdln.Mod +++ b/src/voc/OPM.cmdln.Mod @@ -234,6 +234,13 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *) IF lineno IN opt THEN useLineNo := TRUE; curpos := 256; errpos := curpos; lasterrpos := curpos - 10 ELSE useLineNo := FALSE; END; + + IF useparfile IN opt THEN useParFile := TRUE ELSE useParFile := FALSE END; (* this check must be made before calling getproperties, noch *) + IF dontasm IN opt THEN dontAsm := TRUE ELSE dontAsm := FALSE END; + IF dontlink IN opt THEN dontLink := TRUE ELSE dontLink := FALSE END; + IF mainprog IN opt THEN mainProg := TRUE ELSE mainProg := FALSE END; + IF mainlinkstat IN opt THEN INCL(glbopt, mainprog); mainLinkStat := TRUE ELSE mainLinkStat := FALSE END; + END InitOptions; PROCEDURE Init*(VAR done: BOOLEAN; VAR mname : ARRAY OF CHAR); (* get the source for one translation *) diff --git a/src/voc/gnuc/extTools.Mod b/src/voc/gnuc/extTools.Mod index eaa82085..b701bf70 100644 --- a/src/voc/gnuc/extTools.Mod +++ b/src/voc/gnuc/extTools.Mod @@ -27,7 +27,7 @@ Unix.system(cmd); END Assemble; -PROCEDURE LinkMain*(VAR m : ARRAY OF CHAR; statically : BOOLEAN); +PROCEDURE LinkMain*(VAR m : ARRAY OF CHAR; statically : BOOLEAN; additionalopts : ARRAY OF CHAR); VAR lpath : ARRAY 256 OF CHAR; cc : ARRAY 256 OF CHAR; ccopt : ARRAY 256 OF CHAR; @@ -45,6 +45,7 @@ COPY (cc, cmd); Strings.Append(" ", cmd); Strings.Append(m, cmd); Strings.Append(ext, cmd); +Strings.Append(additionalopts, cmd); IF statically THEN Strings.Append(" -static ", cmd) END; Strings.Append(" -o ", cmd); Strings.Append(m, cmd); diff --git a/src/voc/voc.Mod b/src/voc/voc.Mod index 05b971a3..572bb58f 100644 --- a/src/voc/voc.Mod +++ b/src/voc/voc.Mod @@ -4,7 +4,7 @@ MODULE voc; (* J. Templ 3.2.95 *) SYSTEM, Unix, Kernel, OPP, OPB, OPT, OPV, OPC, OPM, - extTools; + extTools, Strings := oocOakStrings; VAR mname : ARRAY 256 OF CHAR; (* noch *) @@ -62,26 +62,15 @@ VAR mname : ARRAY 256 OF CHAR; (* noch *) OPM.CloseFiles; OPT.Close; OPM.LogWLn; done := OPM.noerr; -(* noch *) - IF done THEN - IF ~OPM.dontAsm THEN - (*IF ~(OPM.mainProg OR OPM.mainLinkStat) THEN*) - extTools.Assemble(OPM.modName); - (*ELSE*) - IF ~OPM.dontLink & (OPM.mainProg OR OPM.mainLinkStat) THEN - extTools.LinkMain (OPM.modName, OPM.mainLinkStat); - END; - (*END;*) - END; - END - END Module; PROCEDURE Translate*; VAR done: BOOLEAN; + VAR modulesobj: ARRAY 2048 OF CHAR; (* here we hold all modules name given on the command line, to add corresponding .o files to the external compiler options *) BEGIN + modulesobj := ""; OPM.OpenPar; (* gclock(); slightly faste rtranslation but may lead to opening "too many files" *) OPT.bytetyp.size := OPM.ByteSize; OPT.sysptrtyp.size := OPM.PointerSize; @@ -99,8 +88,24 @@ VAR mname : ARRAY 256 OF CHAR; (* noch *) OPM.InitOptions; Kernel.GC(FALSE); Module(done); - IF ~done THEN Unix.Exit(1) END - END + IF ~done THEN Unix.Exit(1) END; + + (* noch *) + IF done THEN + IF ~OPM.dontAsm THEN + extTools.Assemble(OPM.modName); + IF ~(OPM.mainProg OR OPM.mainLinkStat) THEN Strings.Append(" ",modulesobj); Strings.Append(OPM.modName, modulesobj); Strings.Append(".o ", modulesobj) END; + + IF ~OPM.dontLink & (OPM.mainProg OR OPM.mainLinkStat) THEN + extTools.LinkMain (OPM.modName, OPM.mainLinkStat, modulesobj); + END; + END; + END + + + + + END (* loop *) END Translate; BEGIN