aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGaius Mulley <gaiusmod2@gmail.com>2023-01-24 22:41:45 +0000
committerGaius Mulley <gaiusmod2@gmail.com>2023-01-24 22:41:45 +0000
commitf235d695729cc745cf15a00fb8b2cfaded80fd1e (patch)
tree1b01e42b4195c3752567d96a75a52e4e056f1cce
parent327d45c57ebd2655a7599df0f01b8b5e2f82eda7 (diff)
downloadgcc-f235d695729cc745cf15a00fb8b2cfaded80fd1e.zip
gcc-f235d695729cc745cf15a00fb8b2cfaded80fd1e.tar.gz
gcc-f235d695729cc745cf15a00fb8b2cfaded80fd1e.tar.bz2
Introduce new module to create search paths of dynamic strings.
Introduce a simple DynamicStringPath module to allow the front end to create and modify a search path from dynamic strings. gcc/m2/ChangeLog: * Make-lang.in (GM2-COMP-BOOT-DEFS): Add DynamicStringPath.def. (GM2-COMP-BOOT-MODS): Add DynamicStringPath.mod. (GM2-COMP-DEFS): Add DynamicStringPath.def. (GM2-COMP-MODS): Add DynamicStringPath.mod. ($(objdir)/m2/gm2-libs-min/SYSTEM.def): Split path into multiple -I components. ($(objdir)/m2/gm2-libs/SYSTEM.def): Ditto. ($(objdir)/m2/gm2-libs-coroutines/SYSTEM.def): Ditto. * gm2-compiler/M2Options.mod: Import DynamicStringPath. (SetSearchPath): Reimplement using DynamicStringPath procedures. * gm2-compiler/M2Search.def (InitSearchPath): Remove. (PrependSearchPath): Remove. * gm2-compiler/M2Search.mod (SFIO): Remove import. (DynamicStringPath): Add import. (Directory): Remove. (UserPath): Remove. (InitialPath): Remove. (InitSearchPath): Remove. (PrependSearchPath): Remove. (FindSourceFile): Re-implement. (FindSourceDefFile): Re-implement. (FindSourceModFile): Re-implement. * gm2-gcc/init.cc (_M2_DynamicStringPath_init): New prototype. (init_FrontEndInit): Call _M2_DynamicStringPath_init. * tools-src/makeSystem: Allow multiple -I paths. * gm2-compiler/DynamicStringPath.def: New file. * gm2-compiler/DynamicStringPath.mod: New file. * gm2-gcc/m2options.h (M2Options_SetMakeIncludePath): Add prototype. Co-Authored by: Iain Sandoe <iain@sandoe.co.uk> libgm2/ChangeLog: * libm2cor/Makefile.am (SYSTEM.def): Split path into multiple -I components. * libm2cor/Makefile.in: Rebuild. * libm2min/Makefile.am (SYSTEM.def): Split path into multiple -I components. * libm2min/Makefile.in: Rebuild. * libm2iso/Makefile.am (SYSTEM.def): Split path into multiple -I components. * libm2iso/Makefile.in: Rebuild. Co-Authored by: Iain Sandoe <iain@sandoe.co.uk> Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
-rw-r--r--gcc/m2/Make-lang.in10
-rw-r--r--gcc/m2/gm2-compiler/DynamicStringPath.def113
-rw-r--r--gcc/m2/gm2-compiler/DynamicStringPath.mod265
-rw-r--r--gcc/m2/gm2-compiler/M2Options.mod12
-rw-r--r--gcc/m2/gm2-compiler/M2Search.def25
-rw-r--r--gcc/m2/gm2-compiler/M2Search.mod131
-rw-r--r--gcc/m2/gm2-gcc/init.cc2
-rw-r--r--gcc/m2/gm2-gcc/m2options.h1
-rw-r--r--gcc/m2/tools-src/makeSystem17
-rw-r--r--libgm2/libm2cor/Makefile.am2
-rw-r--r--libgm2/libm2cor/Makefile.in2
-rw-r--r--libgm2/libm2iso/Makefile.am2
-rw-r--r--libgm2/libm2iso/Makefile.in2
-rw-r--r--libgm2/libm2min/Makefile.am2
-rw-r--r--libgm2/libm2min/Makefile.in2
15 files changed, 435 insertions, 153 deletions
diff --git a/gcc/m2/Make-lang.in b/gcc/m2/Make-lang.in
index 00cca7d..0d3ff23 100644
--- a/gcc/m2/Make-lang.in
+++ b/gcc/m2/Make-lang.in
@@ -690,6 +690,7 @@ GM2-COMP-BOOT-DEFS = \
M2DebugStack.def \
M2Defaults.def \
M2DriverOptions.def \
+ DynamicStringPath.def \
M2Emit.def \
M2Error.def \
M2EvalSym.def \
@@ -761,6 +762,7 @@ GM2-COMP-BOOT-MODS = \
M2DebugStack.mod \
M2Defaults.mod \
M2DriverOptions.mod \
+ DynamicStringPath.mod \
M2Emit.mod \
M2Error.mod \
M2FileName.mod \
@@ -965,6 +967,7 @@ GM2-COMP-DEFS = \
M2DebugStack.def \
M2Defaults.def \
M2DriverOptions.def \
+ DynamicStringPath.def \
M2Emit.def \
M2Error.def \
M2FileName.def \
@@ -1032,6 +1035,7 @@ GM2-COMP-MODS = \
M2DebugStack.mod \
M2Defaults.mod \
M2DriverOptions.mod \
+ DynamicStringPath.mod \
M2Emit.mod \
M2Error.mod \
M2FileName.mod \
@@ -1522,7 +1526,7 @@ $(objdir)/m2/gm2-libs-min/SYSTEM.def: $(GM2_PROG_DEP)
$(SHELL) $(srcdir)/m2/tools-src/makeSystem -fpim \
$(srcdir)/m2/gm2-libs-min/SYSTEM.def \
$(srcdir)/m2/gm2-libs-min/SYSTEM.mod \
- -I$(srcdir)/m2/gm2-libs-min:$(srcdir)/m2/gm2-libs \
+ -I$(srcdir)/m2/gm2-libs-min -I$(srcdir)/m2/gm2-libs \
"$(GM2_FOR_TARGET)" $@
$(objdir)/m2/gm2-libs/SYSTEM.def: $(GM2_PROG_DEP)
@@ -1540,7 +1544,7 @@ $(objdir)/m2/gm2-libs-iso/SYSTEM.def: $(GM2_PROG_DEP)
$(SHELL) $(srcdir)/m2/tools-src/makeSystem -fiso \
$(srcdir)/m2/gm2-libs-iso/SYSTEM.def \
$(srcdir)/m2/gm2-libs-iso/SYSTEM.mod \
- -I$(srcdir)/m2/gm2-libs-iso:$(srcdir)/m2/gm2-libs \
+ -I$(srcdir)/m2/gm2-libs-iso -I$(srcdir)/m2/gm2-libs \
"$(GM2_FOR_TARGET)" $@
$(objdir)/m2/gm2-libs-coroutines/SYSTEM.def: $(GM2_PROG_DEP)
@@ -1548,7 +1552,7 @@ $(objdir)/m2/gm2-libs-coroutines/SYSTEM.def: $(GM2_PROG_DEP)
$(SHELL) $(srcdir)/m2/tools-src/makeSystem -fpim \
$(srcdir)/m2/gm2-libs-coroutines/SYSTEM.def \
$(srcdir)/m2/gm2-libs-coroutines/SYSTEM.mod \
- -I$(srcdir)/m2/gm2-libs-coroutines:$(srcdir)/m2/gm2-libs-iso:$(srcdir)/m2/gm2-libs \
+ -I$(srcdir)/m2/gm2-libs-coroutines -I$(srcdir)/m2/gm2-libs-iso -I$(srcdir)/m2/gm2-libs \
"$(GM2_FOR_TARGET)" $@
build-compiler: $(GM2-COMP-MODS:%.mod=m2/gm2-compiler/%.o) \
diff --git a/gcc/m2/gm2-compiler/DynamicStringPath.def b/gcc/m2/gm2-compiler/DynamicStringPath.def
new file mode 100644
index 0000000..e9fdff7
--- /dev/null
+++ b/gcc/m2/gm2-compiler/DynamicStringPath.def
@@ -0,0 +1,113 @@
+(* DynamicStringPath.def implements a path for DynamicStrings.
+
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
+Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
+
+This file is part of GNU Modula-2.
+
+GNU Modula-2 is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GNU Modula-2 is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. *)
+
+DEFINITION MODULE DynamicStringPath ; (*!m2iso+gm2*)
+
+FROM DynamicStrings IMPORT String ;
+
+TYPE
+ PathList ;
+
+
+(*
+ GetUserPath - returns the current UserPath.
+*)
+
+PROCEDURE GetUserPath () : PathList ;
+
+
+(*
+ GetSystemPath - returns the current SystemPath.
+*)
+
+PROCEDURE GetSystemPath () : PathList ;
+
+
+(*
+ SetUserPath - assigns UserPath to pl.
+*)
+
+PROCEDURE SetUserPath (pl: PathList) ;
+
+
+(*
+ SetSystemPath - assigns SystemPath to pl.
+*)
+
+PROCEDURE SetSystemPath (pl: PathList) ;
+
+
+(*
+ InitPathList - creates a new empty path list.
+*)
+
+PROCEDURE InitPathList (str: String) : PathList ;
+
+
+(*
+ KillPathList - places list pl onto the freelist.
+ Postcondition: pl will be NIL.
+*)
+
+PROCEDURE KillPathList (VAR pl: PathList) ;
+
+
+(*
+ Cons - appends str to the end of a path list.
+ If pl is NIL a new list is created and returned
+ containing str.
+*)
+
+PROCEDURE Cons (pl: PathList; str: String) : PathList ;
+
+
+(*
+ ConsList - concatenates path list left and right together.
+ It always returns NIL which should be assigned
+ to the callers right parameter after ConsList
+ has been completed signifying that right should
+ no longer be accessed.
+*)
+
+PROCEDURE ConsList (left, right: PathList) : PathList ;
+
+
+(*
+ Stash - returns pl before setting pl to NIL.
+*)
+
+PROCEDURE Stash (VAR pl: PathList) : PathList ;
+
+
+(*
+ FindFileName - returns NIL if a file cannot be found otherwise
+ it returns the path including the filename.
+*)
+
+PROCEDURE FindFileName (filename: String; pl: PathList) : String ;
+
+
+END DynamicStringPath.
diff --git a/gcc/m2/gm2-compiler/DynamicStringPath.mod b/gcc/m2/gm2-compiler/DynamicStringPath.mod
new file mode 100644
index 0000000..601456e
--- /dev/null
+++ b/gcc/m2/gm2-compiler/DynamicStringPath.mod
@@ -0,0 +1,265 @@
+(* DynamicStringPath.def implements a path for DynamicStrings.
+
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
+Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
+
+This file is part of GNU Modula-2.
+
+GNU Modula-2 is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GNU Modula-2 is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. *)
+
+IMPLEMENTATION MODULE DynamicStringPath ; (*!m2iso+gm2*)
+
+FROM Storage IMPORT ALLOCATE, DEALLOCATE ;
+FROM DynamicStrings IMPORT InitString, ConCat, ConCatChar, char, Dup,
+ KillString, Length ;
+FROM SFIO IMPORT Exists ;
+FROM FIO IMPORT StdErr ;
+FROM M2Printf IMPORT fprintf0, fprintf1 ;
+
+CONST
+ Directory = '/' ;
+ Debugging = FALSE ;
+
+TYPE
+ PathList = POINTER TO RECORD
+ tail,
+ next : PathList ;
+ entry: String ;
+ END ;
+
+
+VAR
+ FreeList,
+ DefaultUserPath,
+ DefaultSystemPath: PathList ;
+
+
+(*
+ GetUserPath - returns the current UserPath.
+*)
+
+PROCEDURE GetUserPath () : PathList ;
+BEGIN
+ RETURN DefaultUserPath
+END GetUserPath ;
+
+
+(*
+ GetSystemPath - returns the current SystemPath.
+*)
+
+PROCEDURE GetSystemPath () : PathList ;
+BEGIN
+ RETURN DefaultSystemPath
+END GetSystemPath ;
+
+
+(*
+ SetUserPath - assigns UserPath to pl.
+*)
+
+PROCEDURE SetUserPath (pl: PathList) ;
+BEGIN
+ DefaultUserPath := pl ;
+ DumpPath ('DefaultUserPath', DefaultUserPath)
+END SetUserPath ;
+
+
+(*
+ SetSystemPath - assigns SystemPath to pl.
+*)
+
+PROCEDURE SetSystemPath (pl: PathList) ;
+BEGIN
+ DefaultSystemPath := pl ;
+ DumpPath ('DefaultSystemPath', DefaultSystemPath)
+END SetSystemPath ;
+
+
+(*
+ KillPathList - places list pl onto the freelist.
+ Postcondition: pl will be NIL.
+*)
+
+PROCEDURE KillPathList (VAR pl: PathList) ;
+BEGIN
+ IF pl # NIL
+ THEN
+ pl^.tail^.next := FreeList ;
+ FreeList := pl ;
+ pl := NIL
+ END
+END KillPathList ;
+
+
+(*
+ InitPathList - creates a new empty path list.
+ It takes a copy of the string.
+*)
+
+PROCEDURE InitPathList (str: String) : PathList ;
+VAR
+ pl: PathList ;
+BEGIN
+ NEW (pl) ;
+ WITH pl^ DO
+ tail := pl ;
+ next := NIL ;
+ entry := Dup (str)
+ END ;
+ RETURN pl
+END InitPathList ;
+
+
+(*
+ Cons - appends str to the end of a path list.
+ If pl is NIL a new list is created and returned
+ containing str.
+*)
+
+PROCEDURE Cons (pl: PathList; str: String) : PathList ;
+BEGIN
+ IF pl = NIL
+ THEN
+ pl := InitPathList (str)
+ ELSE
+ pl := ConsList (pl, InitPathList (str))
+ END ;
+ RETURN pl
+END Cons ;
+
+
+(*
+ ConsList - concatenates path list left and right together.
+ It always returns NIL which should be assigned
+ to the callers right parameter after ConsList
+ has been completed signifying that right should
+ no longer be accessed.
+*)
+
+PROCEDURE ConsList (left, right: PathList) : PathList ;
+BEGIN
+ IF right # NIL
+ THEN
+ left^.tail^.next := right ;
+ left^.tail := right^.tail
+ END ;
+ RETURN left
+END ConsList ;
+
+
+(*
+ Stash - returns pl before setting pl to NIL.
+*)
+
+PROCEDURE Stash (VAR pl: PathList) : PathList ;
+VAR
+ old: PathList ;
+BEGIN
+ old := pl ;
+ pl := NIL ;
+ RETURN old
+END Stash ;
+
+
+(*
+ AddDir - if str is not empty and does not end with / then add
+ a directory.
+ Postcondition: str is returned (with a '/' at the end)
+ or is empty.
+*)
+
+PROCEDURE AddDir (str: String) : String ;
+BEGIN
+ IF Length (str) > 0
+ THEN
+ IF char (str, -1) # Directory
+ THEN
+ str := ConCatChar (str, Directory)
+ END
+ END ;
+ RETURN str
+END AddDir ;
+
+
+(*
+ FindFileName - returns NIL if a file cannot be found otherwise
+ it returns the path including the filename.
+*)
+
+PROCEDURE FindFileName (filename: String; pl: PathList) : String ;
+VAR
+ s: String ;
+BEGIN
+ WHILE pl # NIL DO
+ s := ConCat (AddDir (Dup (pl^.entry)), Dup (filename)) ;
+ IF Debugging
+ THEN
+ fprintf1 (StdErr, "testing for %s: ", s)
+ END ;
+ IF Exists (s)
+ THEN
+ IF Debugging
+ THEN
+ fprintf0 (StdErr, "yes\n")
+ END ;
+ RETURN s
+ END ;
+ IF Debugging
+ THEN
+ fprintf0 (StdErr, "no\n")
+ END ;
+ s := KillString (s) ;
+ pl := pl^.next
+ END ;
+ IF Debugging
+ THEN
+ fprintf1 (StdErr, "FindFileName did not find: %s in path\n", filename)
+ END ;
+ RETURN NIL
+END FindFileName ;
+
+
+(*
+ DumpPath - debugging dump of the pathlist.
+*)
+
+PROCEDURE DumpPath (name: ARRAY OF CHAR; pl: PathList) ;
+BEGIN
+ IF Debugging
+ THEN
+ fprintf0 (StdErr, name) ;
+ fprintf0 (StdErr, ":") ;
+ WHILE pl # NIL DO
+ fprintf0 (StdErr, " {") ;
+ fprintf1 (StdErr, "%s", pl^.entry) ;
+ fprintf0 (StdErr, "}") ;
+ pl := pl^.next
+ END ;
+ fprintf0 (StdErr, "\n")
+ END
+END DumpPath ;
+
+
+BEGIN
+ DefaultSystemPath := NIL ;
+ DefaultUserPath := NIL ;
+ FreeList := NIL
+END DynamicStringPath.
diff --git a/gcc/m2/gm2-compiler/M2Options.mod b/gcc/m2/gm2-compiler/M2Options.mod
index f046e29..14e978a 100644
--- a/gcc/m2/gm2-compiler/M2Options.mod
+++ b/gcc/m2/gm2-compiler/M2Options.mod
@@ -24,8 +24,10 @@ IMPLEMENTATION MODULE M2Options ;
IMPORT CmdArgs ;
FROM SArgs IMPORT GetArg, Narg ;
-FROM M2Search IMPORT PrependSearchPath, SetDefExtension, SetModExtension ;
-FROM M2Printf IMPORT printf0, printf1 ;
+FROM M2Search IMPORT SetDefExtension, SetModExtension ;
+FROM DynamicStringPath IMPORT Cons, GetUserPath, SetUserPath, Cons ;
+FROM M2Printf IMPORT printf0, printf1, fprintf1 ;
+FROM FIO IMPORT StdErr ;
FROM libc IMPORT exit ;
FROM Debug IMPORT Halt ;
FROM m2linemap IMPORT location_t ;
@@ -789,10 +791,10 @@ BEGIN
s := InitStringCharStar(arg) ;
IF Debugging
THEN
- printf1("setting search path to: %s\n", s)
+ fprintf1 (StdErr, "M2Search.SetSearchPath setting search path to: %s\n", s)
END ;
- PrependSearchPath(s) ;
- s := KillString(s)
+ SetUserPath (Cons (GetUserPath (), s)) ;
+ s := KillString (s)
END SetSearchPath ;
diff --git a/gcc/m2/gm2-compiler/M2Search.def b/gcc/m2/gm2-compiler/M2Search.def
index 9bed7eb..3d17237 100644
--- a/gcc/m2/gm2-compiler/M2Search.def
+++ b/gcc/m2/gm2-compiler/M2Search.def
@@ -31,31 +31,6 @@ DEFINITION MODULE M2Search ;
*)
FROM DynamicStrings IMPORT String ;
-EXPORT QUALIFIED InitSearchPath, PrependSearchPath, FindSourceFile,
- FindSourceDefFile, FindSourceModFile,
- SetDefExtension, SetModExtension ;
-
-
-(*
- InitSearchPath - assigns the search path to Path.
- The string Path may take the form:
-
- Path ::= IndividualPath { ":" IndividualPath }
- IndividualPath ::= "." | DirectoryPath
- DirectoryPath ::= [ "/" ] Name { "/" Name }
- Name ::= Letter { (Letter | Number) }
- Letter ::= A..Z | a..z
- Number ::= 0..9
-*)
-
-PROCEDURE InitSearchPath (Path: String) ;
-
-
-(*
- PrependSearchPath - prepends a new path to the initial search path.
-*)
-
-PROCEDURE PrependSearchPath (path: String) ;
(*
diff --git a/gcc/m2/gm2-compiler/M2Search.mod b/gcc/m2/gm2-compiler/M2Search.mod
index e2dd82d..cc61ebf 100644
--- a/gcc/m2/gm2-compiler/M2Search.mod
+++ b/gcc/m2/gm2-compiler/M2Search.mod
@@ -22,9 +22,9 @@ along with GNU Modula-2; see the file COPYING3. If not see
IMPLEMENTATION MODULE M2Search ;
-FROM SFIO IMPORT Exists ;
FROM M2FileName IMPORT CalculateFileName ;
FROM Assertion IMPORT Assert ;
+FROM DynamicStringPath IMPORT GetUserPath, GetSystemPath, FindFileName ;
FROM DynamicStrings IMPORT InitString, InitStringChar,
KillString, ConCat, ConCatChar, Index, Slice,
@@ -35,13 +35,10 @@ FROM DynamicStrings IMPORT InitString, InitStringChar,
CONST
- Directory = '/' ;
GarbageDebugging = FALSE ;
VAR
- Def, Mod,
- UserPath,
- InitialPath: String ;
+ Def, Mod: String ;
(* Internal garbage collection debugging routines. *)
@@ -110,24 +107,6 @@ END DSdbExit ;
(*
- PrependSearchPath - prepends a new path to the initial search path.
-*)
-
-PROCEDURE PrependSearchPath (path: String) ;
-BEGIN
- DSdbEnter ;
- IF EqualArray(UserPath, '')
- THEN
- UserPath := KillString(UserPath) ;
- UserPath := Dup(path)
- ELSE
- UserPath := ConCat(ConCatChar(UserPath, ':'), path)
- END ;
- DSdbExit (UserPath)
-END PrependSearchPath ;
-
-
-(*
FindSourceFile - attempts to locate the source file FileName.
If a file is found then TRUE is returned otherwise
FALSE is returned.
@@ -143,55 +122,13 @@ END PrependSearchPath ;
PROCEDURE FindSourceFile (FileName: String;
VAR FullPath: String) : BOOLEAN ;
-VAR
- CompleteSearchPath: String ;
- start, end : INTEGER ;
- newpath : String ;
BEGIN
- IF EqualArray(UserPath, '')
+ FullPath := FindFileName (FileName, GetUserPath ()) ;
+ IF FullPath = NIL
THEN
- IF EqualArray(InitialPath, '')
- THEN
- CompleteSearchPath := InitString('.')
- ELSE
- CompleteSearchPath := Dup(InitialPath)
- END
- ELSE
- CompleteSearchPath := ConCat(ConCatChar(Dup(UserPath), ':'), InitialPath)
+ FullPath := FindFileName (FileName, GetSystemPath ())
END ;
- start := 0 ;
- end := Index(CompleteSearchPath, ':', CARDINAL(start)) ;
- REPEAT
- IF end=-1
- THEN
- end := 0
- END ;
- newpath := Slice(CompleteSearchPath, start, end) ;
- IF EqualArray(newpath, '.')
- THEN
- newpath := KillString(newpath) ;
- newpath := Dup(FileName)
- ELSE
- newpath := ConCat(ConCatChar(newpath, Directory), FileName)
- END ;
- IF Exists(newpath)
- THEN
- FullPath := newpath ;
- CompleteSearchPath := KillString(CompleteSearchPath) ;
- RETURN( TRUE )
- END ;
- newpath := KillString(newpath) ;
- IF end#0
- THEN
- start := end+1 ;
- end := Index(CompleteSearchPath, ':', CARDINAL(start))
- END
- UNTIL end=0 ;
-
- FullPath := NIL ;
- newpath := KillString(newpath) ;
- CompleteSearchPath := KillString(CompleteSearchPath) ;
- RETURN( FALSE )
+ RETURN FullPath # NIL
END FindSourceFile ;
@@ -206,18 +143,18 @@ PROCEDURE FindSourceDefFile (Stem: String; VAR FullPath: String) : BOOLEAN ;
VAR
f: String ;
BEGIN
- IF Def#NIL
+ IF Def # NIL
THEN
- f := CalculateFileName(Stem, Def) ;
- IF FindSourceFile(f, FullPath)
+ f := CalculateFileName (Stem, Def) ;
+ IF FindSourceFile (f, FullPath)
THEN
- RETURN( TRUE )
+ RETURN TRUE
END ;
- f := KillString(f)
+ f := KillString (f)
END ;
- (* and try the GNU Modula-2 default extension *)
- f := CalculateFileName(Stem, Mark(InitString('def'))) ;
- RETURN( FindSourceFile(f, FullPath) )
+ (* Try the GNU Modula-2 default extension. *)
+ f := CalculateFileName (Stem, Mark(InitString ('def'))) ;
+ RETURN FindSourceFile (f, FullPath)
END FindSourceDefFile ;
@@ -234,16 +171,16 @@ VAR
BEGIN
IF Mod#NIL
THEN
- f := CalculateFileName(Stem, Mod) ;
- IF FindSourceFile(f, FullPath)
+ f := CalculateFileName (Stem, Mod) ;
+ IF FindSourceFile (f, FullPath)
THEN
- RETURN( TRUE )
+ RETURN TRUE
END ;
- f := KillString(f)
+ f := KillString (f)
END ;
- (* and try the GNU Modula-2 default extension *)
- f := CalculateFileName(Stem, Mark(InitString('mod'))) ;
- RETURN( FindSourceFile(f, FullPath) )
+ (* Try the GNU Modula-2 default extension. *)
+ f := CalculateFileName (Stem, Mark(InitString ('mod'))) ;
+ RETURN FindSourceFile (f, FullPath)
END FindSourceModFile ;
@@ -274,35 +211,11 @@ END SetModExtension ;
(*
- InitSearchPath - assigns the search path to Path.
- The string Path may take the form:
-
- Path ::= IndividualPath { ":" IndividualPath }
- IndividualPath ::= "." | DirectoryPath
- DirectoryPath ::= [ "/" ] Name { "/" Name }
- Name ::= Letter { (Letter | Number) }
- Letter ::= A..Z | a..z
- Number ::= 0..9
-*)
-
-PROCEDURE InitSearchPath (Path: String) ;
-BEGIN
- IF InitialPath#NIL
- THEN
- InitialPath := KillString(InitialPath)
- END ;
- InitialPath := Path
-END InitSearchPath ;
-
-
-(*
- Init - initializes the search path.
+ Init - initializes the def and mod default string names to NIL.
*)
PROCEDURE Init ;
BEGIN
- UserPath := InitString('') ;
- InitialPath := InitStringChar('.') ;
Def := NIL ;
Mod := NIL
END Init ;
diff --git a/gcc/m2/gm2-gcc/init.cc b/gcc/m2/gm2-gcc/init.cc
index 42d8151..a9dfcc7 100644
--- a/gcc/m2/gm2-gcc/init.cc
+++ b/gcc/m2/gm2-gcc/init.cc
@@ -55,6 +55,7 @@ EXTERN void _M2_CmdArgs_init (int argc, char *argv[], char *envp[]);
EXTERN void _M2_M2Preprocess_init (int argc, char *argv[], char *envp[]);
EXTERN void _M2_M2Error_init (int argc, char *argv[], char *envp[]);
EXTERN void _M2_M2Search_init (int argc, char *argv[], char *envp[]);
+EXTERN void _M2_DynamicStringPath_init (int argc, char *argv[], char *envp[]);
EXTERN void _M2_Indexing_init (int argc, char *argv[], char *envp[]);
EXTERN void _M2_NameKey_init (int argc, char *argv[], char *envp[]);
EXTERN void _M2_NumberIO_init (int argc, char *argv[], char *envp[]);
@@ -141,6 +142,7 @@ init_FrontEndInit (void)
_M2_StrLib_init (0, NULL, NULL);
_M2_dtoa_init (0, NULL, NULL);
_M2_ldtoa_init (0, NULL, NULL);
+ _M2_DynamicStringPath_init (0, NULL, NULL);
_M2_M2Search_init (0, NULL, NULL);
_M2_M2Options_init (0, NULL, NULL);
}
diff --git a/gcc/m2/gm2-gcc/m2options.h b/gcc/m2/gm2-gcc/m2options.h
index 80c7968..9cccb37 100644
--- a/gcc/m2/gm2-gcc/m2options.h
+++ b/gcc/m2/gm2-gcc/m2options.h
@@ -38,7 +38,6 @@ along with GNU Modula-2; see the file COPYING3. If not see
#include "input.h"
-EXTERN void M2Options_SetMakeIncludePath (const char *arg);
EXTERN void M2Options_SetSearchPath (const char *arg);
EXTERN void M2Options_setdefextension (const char *arg);
EXTERN void M2Options_setmodextension (const char *arg);
diff --git a/gcc/m2/tools-src/makeSystem b/gcc/m2/tools-src/makeSystem
index 49b58a2..b1156b5 100644
--- a/gcc/m2/tools-src/makeSystem
+++ b/gcc/m2/tools-src/makeSystem
@@ -23,7 +23,7 @@
Usage () {
- echo "Usage: makesystem dialectflag SYSTEM.def SYSTEM.mod librarypath compiler"
+ echo "Usage: makesystem dialectflag SYSTEM.def SYSTEM.mod { librarypath } compiler"
}
if [ $# -lt 6 ] ; then
@@ -34,9 +34,18 @@ fi
DIALECT=$1
SYSTEMDEF=$2
SYSTEMMOD=$3
-LIBRARY=$4
-COMPILER=$5
-OUTPUTFILE=$6
+shift 3
+LIBRARY=""
+while [ $# -gt 2 ] ; do
+ if [ "$LIBRARY" = "" ] ; then
+ LIBRARY=$1
+ else
+ LIBRARY="${LIBRARY} $1"
+ fi
+ shift
+done
+COMPILER=$1
+OUTPUTFILE=$2
if [ "$COMPILER" = "" ] ; then
echo "parameter 5 of makeSystem is incorrect, GM2_FOR_TARGET was unset"
diff --git a/libgm2/libm2cor/Makefile.am b/libgm2/libm2cor/Makefile.am
index 2cc3084..e7c7273 100644
--- a/libgm2/libm2cor/Makefile.am
+++ b/libgm2/libm2cor/Makefile.am
@@ -129,7 +129,7 @@ SYSTEM.def: Makefile
bash $(GM2_SRC)/tools-src/makeSystem -fpim \
$(GM2_SRC)/gm2-libs-coroutines/SYSTEM.def \
$(GM2_SRC)/gm2-libs-coroutines/SYSTEM.mod \
- -I$(GM2_SRC)/gm2-libs-coroutines:$(GM2_SRC)/gm2-libs:$(GM2_SRC)/gm2-libs-iso \
+ -I$(GM2_SRC)/gm2-libs-coroutines -I$(GM2_SRC)/gm2-libs -I$(GM2_SRC)/gm2-libs-iso \
"$(GM2_FOR_TARGET)" $@
.mod.lo:
diff --git a/libgm2/libm2cor/Makefile.in b/libgm2/libm2cor/Makefile.in
index 8806d7b..677aebf 100644
--- a/libgm2/libm2cor/Makefile.in
+++ b/libgm2/libm2cor/Makefile.in
@@ -795,7 +795,7 @@ uninstall-am: uninstall-toolexeclibLTLIBRARIES
@BUILD_CORLIB_TRUE@ bash $(GM2_SRC)/tools-src/makeSystem -fpim \
@BUILD_CORLIB_TRUE@ $(GM2_SRC)/gm2-libs-coroutines/SYSTEM.def \
@BUILD_CORLIB_TRUE@ $(GM2_SRC)/gm2-libs-coroutines/SYSTEM.mod \
-@BUILD_CORLIB_TRUE@ -I$(GM2_SRC)/gm2-libs-coroutines:$(GM2_SRC)/gm2-libs:$(GM2_SRC)/gm2-libs-iso \
+@BUILD_CORLIB_TRUE@ -I$(GM2_SRC)/gm2-libs-coroutines -I$(GM2_SRC)/gm2-libs -I$(GM2_SRC)/gm2-libs-iso \
@BUILD_CORLIB_TRUE@ "$(GM2_FOR_TARGET)" $@
@BUILD_CORLIB_TRUE@.mod.lo:
diff --git a/libgm2/libm2iso/Makefile.am b/libgm2/libm2iso/Makefile.am
index a28cd5a..af3728b 100644
--- a/libgm2/libm2iso/Makefile.am
+++ b/libgm2/libm2iso/Makefile.am
@@ -204,7 +204,7 @@ SYSTEM.def: Makefile
bash $(GM2_SRC)/tools-src/makeSystem -fiso \
$(GM2_SRC)/gm2-libs-iso/SYSTEM.def \
$(GM2_SRC)/gm2-libs-iso/SYSTEM.mod \
- -I$(GM2_SRC)/gm2-libs-iso:$(GM2_SRC)/gm2-libs \
+ -I$(GM2_SRC)/gm2-libs-iso -I$(GM2_SRC)/gm2-libs \
"$(GM2_FOR_TARGET)" $@
## add these to the .mod.o rule when optimization is fixed $(CFLAGS_FOR_TARGET) $(LIBCFLAGS)
diff --git a/libgm2/libm2iso/Makefile.in b/libgm2/libm2iso/Makefile.in
index 0ca852a..b327cbc 100644
--- a/libgm2/libm2iso/Makefile.in
+++ b/libgm2/libm2iso/Makefile.in
@@ -905,7 +905,7 @@ uninstall-am: uninstall-toolexeclibLTLIBRARIES
@BUILD_ISOLIB_TRUE@ bash $(GM2_SRC)/tools-src/makeSystem -fiso \
@BUILD_ISOLIB_TRUE@ $(GM2_SRC)/gm2-libs-iso/SYSTEM.def \
@BUILD_ISOLIB_TRUE@ $(GM2_SRC)/gm2-libs-iso/SYSTEM.mod \
-@BUILD_ISOLIB_TRUE@ -I$(GM2_SRC)/gm2-libs-iso:$(GM2_SRC)/gm2-libs \
+@BUILD_ISOLIB_TRUE@ -I$(GM2_SRC)/gm2-libs-iso -I$(GM2_SRC)/gm2-libs \
@BUILD_ISOLIB_TRUE@ "$(GM2_FOR_TARGET)" $@
@BUILD_ISOLIB_TRUE@.mod.lo:
diff --git a/libgm2/libm2min/Makefile.am b/libgm2/libm2min/Makefile.am
index bbbf3d4..f63f243 100644
--- a/libgm2/libm2min/Makefile.am
+++ b/libgm2/libm2min/Makefile.am
@@ -128,7 +128,7 @@ SYSTEM.def: Makefile
bash $(GM2_SRC)/tools-src/makeSystem -fpim \
$(GM2_SRC)/gm2-libs-min/SYSTEM.def \
$(GM2_SRC)/gm2-libs-min/SYSTEM.mod \
- -I$(GM2_SRC)/gm2-libs-min:$(GM2_SRC)/gm2-libs \
+ -I$(GM2_SRC)/gm2-libs-min -I$(GM2_SRC)/gm2-libs \
"$(GM2_FOR_TARGET) -fno-exceptions" $@
install-data-local: force
diff --git a/libgm2/libm2min/Makefile.in b/libgm2/libm2min/Makefile.in
index ad818bc..7e4496c 100644
--- a/libgm2/libm2min/Makefile.in
+++ b/libgm2/libm2min/Makefile.in
@@ -754,7 +754,7 @@ SYSTEM.def: Makefile
bash $(GM2_SRC)/tools-src/makeSystem -fpim \
$(GM2_SRC)/gm2-libs-min/SYSTEM.def \
$(GM2_SRC)/gm2-libs-min/SYSTEM.mod \
- -I$(GM2_SRC)/gm2-libs-min:$(GM2_SRC)/gm2-libs \
+ -I$(GM2_SRC)/gm2-libs-min -I$(GM2_SRC)/gm2-libs \
"$(GM2_FOR_TARGET) -fno-exceptions" $@
install-data-local: force