浏览代码

Windows compilation process fixes

Arthur Yefimov 3 年之前
父节点
当前提交
7b34ffb88e
共有 7 个文件被更改,包括 23 次插入17 次删除
  1. 1 0
      Data/bin/compile.bat
  2. 1 0
      Data/bin/link_console.bat
  3. 1 0
      Data/bin/link_graph.bat
  4. 7 7
      src/Builder.Mod
  5. 2 2
      src/Env.Mod
  6. 9 7
      src/Fob.Mod
  7. 2 1
      src/make.bat

+ 1 - 0
Data/bin/compile.bat

@@ -31,4 +31,5 @@ ECHO ON
 @%OFR% %2 %FNAME%
 @SET RETCODE=%ERRORLEVEL%
 @ECHO OFF
+@CD ..
 EXIT /b %RETCODE%

+ 1 - 0
Data/bin/link_console.bat

@@ -52,4 +52,5 @@ ECHO ON
 
 @SET RETCODE=%ERRORLEVEL%
 
+@CD ..
 @EXIT /b %RETCODE%

+ 1 - 0
Data/bin/link_graph.bat

@@ -55,4 +55,5 @@ ECHO ON
 
 @SET RETCODE=%ERRORLEVEL%
 
+@CD ..
 @EXIT /b %RETCODE%

+ 7 - 7
src/Builder.Mod

@@ -220,22 +220,22 @@ BEGIN ok := TRUE;
         p := p.next
       END
     END;
-    ;;;;Out.String(cmd);Out.Ln;
     Utf8.Encode(cmd, q);
     success := (Term.RunProcess(q, buf, bufLen, len, err) # 0) & (err = 0);
     IF ~success & (onError # NIL) THEN
-      s := ' Command returned '; Int.Append(err, s);
-      Strings.Append(' exit status ', s);
+      z := ''; line := 0; col := 0;
       IF (len > 0) & (len < bufLen) THEN
         IF buf[len - 1] = 0AX THEN buf[len - 1] := 0X ELSE buf[len] := 0X END;
         Utf8.Decode(buf, z);
-        ParseErrors(z, fname, line, col, error);
-        onError(fname, col, line, error, z)
+        ParseErrors(z, fname, line, col, error)
       ELSIF link THEN FoStrings.GetErrorStr(422, z)
       ELSE FoStrings.GetErrorStr(421, z)
       END;
-      IF z[0] = 0X THEN onError('', -1, -1, -1, s)
-      ELSE onError('', -1, -1, -1, z)
+      IF z = '' THEN
+        s := ' Command returned '; Int.Append(err, s);
+        Strings.Append(' exit status ', s);
+        onError('', -1, -1, -1, s)
+      ELSE onError(fname, col, line, error, z)
       END
     END
   END ;

+ 2 - 2
src/Env.Mod

@@ -6,7 +6,7 @@ VAR count: INTEGER;
 
 PROCEDURE Count*(): INTEGER;
 BEGIN
-  IF count = -1 THEN count := CmdArgs.GetEnvCount() END
+  IF count = -1 THEN count := CmdArgs.EnvCount() END
 RETURN count END Count;
 
 PROCEDURE Get*(n: INTEGER; VAR s: ARRAY OF CHAR);
@@ -30,7 +30,7 @@ VAR c, delim: CHAR;
   z: ARRAY 260 OF SHORTCHAR;
 BEGIN
   IF Platform.Windows THEN
-    Platform.GetStartDir(z);
+    Platform.GetAppDir(z);
     Utf8.Decode(z, s)
   ELSE
     GetByName('_', s);

+ 9 - 7
src/Fob.Mod

@@ -16,7 +16,7 @@ GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with Free Oberon.  If not, see <http://www.gnu.org/licenses/>.
 *)
-IMPORT FoStrings, Builder, Config, Args, Strings, Out, Kernel;
+IMPORT FoStrings, Builder, Config, Args, Strings, Out, Platform, Kernel;
 
 PROCEDURE Usage;
 VAR s: ARRAY 256 OF CHAR;
@@ -45,10 +45,9 @@ PROCEDURE BuildErrorCallback(fname: ARRAY OF CHAR; col, line, error: INTEGER;
 BEGIN
   IF fname[0] # 0X THEN
     Out.String(fname); Out.Char(':'); Out.Int(line, 0);
-    Out.Char(':'); Out.Int(col, 0); Out.String(': error: ')
-  ELSE Out.String('error: ')
+    Out.Char(':'); Out.Int(col, 0); Out.String(': ')
   END;
-  Out.String(msg); Out.Ln
+  Out.String('error: '); Out.String(msg); Out.Ln
 END BuildErrorCallback;
 
 PROCEDURE ParseArgs(VAR mainFname, lang: ARRAY OF CHAR);
@@ -68,7 +67,7 @@ PROCEDURE Do;
 VAR modules: Builder.StrList;
   mainFname, modname, exename, errFname, lang, s: ARRAY 256 OF CHAR;
   errLine, errCol, res: INTEGER;
-  graph: BOOLEAN;
+  ok, graph: BOOLEAN;
 BEGIN
   ParseArgs(mainFname, lang);
   FoStrings.SetLang(lang);
@@ -76,15 +75,18 @@ BEGIN
   Builder.GetModuleName(mainFname, modname);
   modules := Builder.UsedModuleList(modname, mainFname,
     errFname, errLine, errCol, res);
+  ok := FALSE;
   IF res = 0 THEN
     graph := Builder.ImportsGraph(modules);
     IF Builder.CompileAll(modules, graph, exename,
-        TRUE, BuildErrorCallback) THEN
+        TRUE, BuildErrorCallback)
+    THEN ok := TRUE
     END
   ELSE (*res = 400-file not found or 401-file contains wrong module name*)
     FoStrings.MakeErrorStr(res, s);
     BuildErrorCallback(errFname, 1, 1, 401, s)
-  END
+  END;
+  IF ~ok THEN Platform.ExitOS(1) END
 END Do;
 
 BEGIN

+ 2 - 1
src/make.bat

@@ -114,7 +114,8 @@ windres resources.rc resources.o
   -lallegro -lallegro_primitives -lallegro_image ^
   -I..\Data\bin\mingw32\include ^
   -Wl,-e_WinMain@16 ^
-  -nostartfiles %OFRDIR%\..\..\Mod\Lib\crt1.c
+  -nostartfiles %OFRDIR%\..\..\Mod\Lib\crt1.c ^
+  -Wl,-subsystem,windows
 
 %CCFULL% -o ..\%PROG2%.exe ^
   FoStrings.c Builder.c ^