public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc/devel/modula-2] gcc/m2/tools-src/def2doc.py rewritten to use argparse
@ 2022-10-21 15:38 Gaius Mulley
  0 siblings, 0 replies; only message in thread
From: Gaius Mulley @ 2022-10-21 15:38 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:f7b2d2d0ab28744763540ffe2f3b5001fbf3e211

commit f7b2d2d0ab28744763540ffe2f3b5001fbf3e211
Author: Gaius Mulley <gaiusmod2@gmail.com>
Date:   Fri Oct 21 16:37:26 2022 +0100

    gcc/m2/tools-src/def2doc.py rewritten to use argparse
    
    gcc/m2/tools-src/def2texi.py renamed to gcc/m2/tools-src/def2doc.py.
    It has been rewritten to use argparse and now has additional options
    -x (partial sphinx output at present), -t texinfo output and -o output
    filename.  It has been reformatted to conform to flake8.  The
    gcc/configure.ac has been extended to check for the existance of
    python3.  gcc/m2/Make-lang.in checks HAVE_PYTHON before invoking
    python3.
    
    gcc/ChangeLog:
    
            * configure.ac (HAVE_PYTHON): New test added.
            (PYTHON) New test added.
            * doc/gm2.texi (Copying): Menu item moved between
            Contributing and Licence.
    
    gcc/m2/ChangeLog:
    
            * tools-src/def2doc.py (Renamed from def2texi.py): Rewritten to
            use argparse rather than getopt.  New options introduced -t texinfo
            and -x for sphinx output.  New option -o output file introduced.
            Code reformatted to conform to flake8.
            * m2/Make-lang.in: Only build texi files with def2texi.py if
            HAVE_PYTHON allows.
            * m2/config-make.in (HAVE_PYTHON): Added.  (PYTHON) Added.
            * m2/configure : Rebuilt.
            * m2/configure.ac: Remove check for flex as it is checked in
            gcc/configure.ac.
            * gm2-libs-pim/README.texi: Remove local menu and use 3 links
            instead.
    
    Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>

Diff:
---
 gcc/configure                   |  90 +++++++-
 gcc/configure.ac                |   5 +-
 gcc/doc/gm2.texi                |  11 +-
 gcc/m2/Make-lang.in             |  39 +++-
 gcc/m2/config-make.in           |   4 +
 gcc/m2/configure                |  47 -----
 gcc/m2/configure.ac             |   5 -
 gcc/m2/gm2-libs-pim/README.texi |  16 +-
 gcc/m2/tools-src/def2doc.py     | 444 ++++++++++++++++++++++++++++++++++++++++
 gcc/m2/tools-src/def2texi.py    | 423 --------------------------------------
 libgm2/configure                |  52 ++++-
 11 files changed, 632 insertions(+), 504 deletions(-)

diff --git a/gcc/configure b/gcc/configure
index 99ba76522d6..f8b96b64b56 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -805,6 +805,8 @@ am__leading_dot
 doc_build_sys
 AR
 NM
+PYTHON
+HAVE_PYTHON
 BISON
 FLEX
 GENERATED_MANPAGES
@@ -8902,6 +8904,89 @@ done
 test -n "$BISON" || BISON="$MISSING bison"
 
 
+# Python3?
+# Extract the first word of "python3", so it can be a program name with args.
+set dummy python3; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_HAVE_PYTHON+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$HAVE_PYTHON"; then
+  ac_cv_prog_HAVE_PYTHON="$HAVE_PYTHON" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_HAVE_PYTHON=""yes""
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_prog_HAVE_PYTHON" && ac_cv_prog_HAVE_PYTHON=""no""
+fi
+fi
+HAVE_PYTHON=$ac_cv_prog_HAVE_PYTHON
+if test -n "$HAVE_PYTHON"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_PYTHON" >&5
+$as_echo "$HAVE_PYTHON" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+for ac_prog in python3
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_PYTHON+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$PYTHON"; then
+  ac_cv_prog_PYTHON="$PYTHON" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_PYTHON="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+PYTHON=$ac_cv_prog_PYTHON
+if test -n "$PYTHON"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5
+$as_echo "$PYTHON" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$PYTHON" && break
+done
+test -n "$PYTHON" || PYTHON="$MISSING python3"
+
+
 # Binutils are not build modules, unlike bison/flex/makeinfo.  So we
 # check for build == host before using them.
 
@@ -19713,7 +19798,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 19716 "configure"
+#line 19801 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -19819,7 +19904,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 19822 "configure"
+#line 19907 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -33900,4 +33985,3 @@ if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
 fi
 
-
diff --git a/gcc/configure.ac b/gcc/configure.ac
index e48fcbfe18e..dc181c854ad 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -1269,6 +1269,10 @@ AC_CHECK_PROGS([FLEX], flex, [$MISSING flex])
 # Bison?
 AC_CHECK_PROGS([BISON], bison, [$MISSING bison])
 
+# Python3?
+AC_CHECK_PROG(HAVE_PYTHON, python3, "yes", "no")
+AC_CHECK_PROGS([PYTHON], python3, [$MISSING python3])
+
 # Binutils are not build modules, unlike bison/flex/makeinfo.  So we
 # check for build == host before using them.
 
@@ -7654,4 +7658,3 @@ done
 ], 
 [subdirs='$subdirs'])
 AC_OUTPUT
-
diff --git a/gcc/doc/gm2.texi b/gcc/doc/gm2.texi
index 897de6ead10..fdecabc01ab 100644
--- a/gcc/doc/gm2.texi
+++ b/gcc/doc/gm2.texi
@@ -72,11 +72,11 @@ Boston, MA 02110-1301, USA@*
 @menu
 * Overview::         What is GNU Modula-2.
 * Using::            Using GNU Modula-2.
-* Licence::          Licence of GNU Modula-2.
-* Contributing::     Contributing to GNU Modula-2.
+* Licence::          Licence of GNU Modula-2
+* Copying::          GNU Public Licence V3.
+* Contributing::     Contributing to GNU Modula-2
 * Internals::        GNU Modula-2 internals.
 * EBNF::             EBNF of GNU Modula-2
-* Copying::          GNU Public Licence V3.
 * Libraries::        PIM and ISO library definitions.
 * Indices::          Document and function indices.
 @end menu
@@ -2826,7 +2826,7 @@ There are also a variety of fixed sized @code{INTEGER} and
 @code{CARDINAL} types.  The variety of the fixed sized types will
 depend upon the target architecture.
 
-@node Licence, Contributing, The ISO system module, Top
+@node Licence, Copying, The ISO system module, Top
 @section Licence of GNU Modula-2
 
 GNU Modula-2 is free software, the compiler is held under the GPL v3
@@ -2846,9 +2846,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 More information on how these licences work is available
 @uref{http://www.gnu.org/licenses/licenses.html} on the GNU web site.
 
+@c Copying node is inside the gpl_v3.texi
 @include gpl_v3.texi
 
-@node Contributing, Internals, Licence, Top
+@node Contributing, Internals, Copying, Top
 @section Contributing to GNU Modula-2
 
 Please do. But also please read the GNU Emacs info under
diff --git a/gcc/m2/Make-lang.in b/gcc/m2/Make-lang.in
index f785834029e..dc32a4d607a 100644
--- a/gcc/m2/Make-lang.in
+++ b/gcc/m2/Make-lang.in
@@ -18,8 +18,6 @@
 #along with GCC; see the file COPYING3.  If not see
 #<http://www.gnu.org/licenses/>.
 
-GM2_MAKE_DEBUG=
-
 # Actual names to use when installing a native compiler.
 GM2_INSTALL_NAME = $(shell echo gm2|sed '$(program_transform_name)')
 GM2_TARGET_INSTALL_NAME = $(target_noncanonical)-$(shell echo gm2|sed '$(program_transform_name)')
@@ -53,6 +51,7 @@ m2.serial = cc1gm2$(exeext)
 GM2_PROG_DEP=gm2$(exeext) xgcc$(exeext) cc1gm2$(exeext)
 
 include m2/config-make
+
 LIBSTDCXX=../$(TARGET_SUBDIR)/libstdc++-v3/src/.libs/libstdc++.a
 
 PGE=m2/pge$(exeext)
@@ -138,10 +137,16 @@ $(objdir)/m2/images/gnu.eps: $(srcdir)/m2/images/gnupng
 
 m2/gm2-libs.texi: gm2-libs.texi-check; @true
 
-gm2-libs.texi-check:  m2/SYSTEM-pim.texi m2/SYSTEM-iso.texi m2/Builtins.texi \
-                      $(objdir)/m2/gm2-libs-coroutines/SYSTEM.def m2/gm2-ebnf.texi
-	python3 $(srcdir)/m2/tools-src/def2texi.py -uLibraries -s$(srcdir)/m2 -b$(objdir)/m2 > $(objdir)/m2/gm2-libs.texi
+ifeq ($(HAVE_PYTHON),yes)
+gm2-libs.texi-check: m2/SYSTEM-pim.texi m2/SYSTEM-iso.texi m2/Builtins.texi \
+                     $(objdir)/m2/gm2-libs-coroutines/SYSTEM.def m2/gm2-ebnf.texi
+	$(PYTHON) $(srcdir)/m2/tools-src/def2doc.py -t -uLibraries -s$(srcdir)/m2 -b$(objdir)/m2 -o $(objdir)/m2/gm2-libs.texi
 	$(STAMP) gm2-libs.texi-check
+else
+gm2-libs.texi-check:
+	echo "not building gm2-libs.texi as python3 has not been found"
+	touch $(objdir)/m2/gm2-libs.texi
+endif
 
 m2/gm2-ebnf.texi: gm2-ebnf.texi-check; @true
 
@@ -151,21 +156,39 @@ gm2-ebnf.texi-check: $(PGE) $(srcdir)/m2/gm2-compiler/P0SyntaxCheck.bnf
 
 m2/SYSTEM-pim.texi: SYSTEM-pim-texi-check; @true
 
+ifeq ($(HAVE_PYTHON),yes)
 SYSTEM-pim-texi-check: $(objdir)/m2/gm2-libs/SYSTEM.def
-	python3 $(srcdir)/m2/tools-src/def2texi.py -b$(objdir)/m2 -f$(objdir)/m2/gm2-libs/SYSTEM.def > $(objdir)/m2/SYSTEM-pim.texi
+	$(PYTHON) $(srcdir)/m2/tools-src/def2doc.py -t -b$(objdir)/m2 -f$(objdir)/m2/gm2-libs/SYSTEM.def -o $(objdir)/m2/SYSTEM-pim.texi
 	$(STAMP) SYSTEM-pim-texi-check
+else
+SYSTEM-pim-texi-check: $(objdir)/m2/gm2-libs/SYSTEM.def
+	echo "not building SYSTEM-pim.texi as python3 has not been found"
+	touch $(objdir)/m2/SYSTEM-pim.texi
+endif
 
 m2/SYSTEM-iso.texi:  SYSTEM-iso.texi-check; @true
 
+ifeq ($(HAVE_PYTHON),yes)
 SYSTEM-iso.texi-check:  $(objdir)/m2/gm2-libs-iso/SYSTEM.def
-	python3 $(srcdir)/m2/tools-src/def2texi.py -b$(objdir)/m2 -f$(objdir)/m2/gm2-libs-iso/SYSTEM.def > $(objdir)/m2/SYSTEM-iso.texi
+	$(PYTHON) $(srcdir)/m2/tools-src/def2doc.py -t -b$(objdir)/m2 -f$(objdir)/m2/gm2-libs-iso/SYSTEM.def -o $(objdir)/m2/SYSTEM-iso.texi
 	$(STAMP) SYSTEM-iso.texi-check
+else
+SYSTEM-iso.texi-check:  $(objdir)/m2/gm2-libs-iso/SYSTEM.def
+	echo "not building SYSTEM-iso.texi as python3 has not been found"
+	touch $(objdir)/m2/SYSTEM-iso.texi
+endif
 
 m2/Builtins.texi:  Builtins.texi-check; @true
 
+ifeq ($(HAVE_PYTHON),yes)
 Builtins.texi-check:  m2/gm2-libs/Builtins.def
-	python3 $(srcdir)/m2/tools-src/def2texi.py -b./ -f$(srcdir)/m2/gm2-libs/Builtins.def > $(objdir)/m2/Builtins.texi
+	$(PYTHON) $(srcdir)/m2/tools-src/def2doc.py -t -b./ -f$(srcdir)/m2/gm2-libs/Builtins.def -o $(objdir)/m2/Builtins.texi
 	$(STAMP) Builtins.texi-check
+else
+Builtins.texi-check:  m2/gm2-libs/Builtins.def
+	echo "not building SYSTEM-iso.texi as python3 has not been found"
+	touch $(objdir)/m2/Builtins.texi
+endif
 
 $(objdir)/m2/gm2-compiler-boot:
 	test -d $@ || mkdir $@
diff --git a/gcc/m2/config-make.in b/gcc/m2/config-make.in
index c7d8641b4c7..fb25ef44c33 100644
--- a/gcc/m2/config-make.in
+++ b/gcc/m2/config-make.in
@@ -1,2 +1,6 @@
 # Target libraries are put under this directory:
 TARGET_SUBDIR = @target_subdir@
+# Python3 executable name if it exists
+PYTHON = @PYTHON@
+# Does Python3 exist?  (yes/no).
+HAVE_PYTHON = @HAVE_PYTHON@
\ No newline at end of file
diff --git a/gcc/m2/configure b/gcc/m2/configure
index 13d9f1f3d6f..db1ca3d1f9b 100755
--- a/gcc/m2/configure
+++ b/gcc/m2/configure
@@ -631,7 +631,6 @@ LDFLAGS
 CFLAGS
 CC
 regex_realpath
-regex_flex
 target_os
 target_vendor
 target_cpu
@@ -2236,52 +2235,6 @@ test -n "$target_alias" &&
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
 
-for ac_prog in flex
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_regex_flex+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$regex_flex"; then
-  ac_cv_prog_regex_flex="$regex_flex" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_regex_flex="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-regex_flex=$ac_cv_prog_regex_flex
-if test -n "$regex_flex"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $regex_flex" >&5
-$as_echo "$regex_flex" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$regex_flex" && break
-done
-
-if test x$regex_flex = "x" ; then
-    as_fn_error $? "flex is required to build GNU Modula-2 (hint install flex)." "$LINENO" 5
-fi
-
 for ac_prog in realpath
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
diff --git a/gcc/m2/configure.ac b/gcc/m2/configure.ac
index 1c5c9f66a3c..756e01c4321 100644
--- a/gcc/m2/configure.ac
+++ b/gcc/m2/configure.ac
@@ -24,11 +24,6 @@ AC_CANONICAL_BUILD
 AC_CANONICAL_HOST
 AC_CANONICAL_TARGET
 
-AC_CHECK_PROGS(regex_flex, flex)
-if test x$regex_flex = "x" ; then
-    AC_MSG_ERROR([flex is required to build GNU Modula-2 (hint install flex).])
-fi
-
 AC_CHECK_PROGS(regex_realpath, realpath)
 if test x$regex_realpath = "x" ; then
     AC_MSG_ERROR([realpath is required to build GNU Modula-2 (hint install coreutils).])
diff --git a/gcc/m2/gm2-libs-pim/README.texi b/gcc/m2/gm2-libs-pim/README.texi
index 84c1d332b7e..8bf4d7b3843 100644
--- a/gcc/m2/gm2-libs-pim/README.texi
+++ b/gcc/m2/gm2-libs-pim/README.texi
@@ -34,11 +34,11 @@ routines are provided. Access to DOSCALL, graphics, time and date
 are not as these were constrained by the limitations of MS-DOS.
 
 The following libraries are contained within the base GNU Modula-2
-libraries but are also Logitech-3.0 compatible: ASCII, Storage
-and MathLib0.
-
-@menu
-* gm2-libs/ASCII::ASCII.def
-* gm2-libs/Storage::Storage.def
-* gm2-libs/MathLib0::MathLib0.def
-@end menu
+libraries and are also Logitech-3.0 compatible: @xref{gm2-libs/ASCII},
+@xref{gm2-libs/Storage} and @xref{gm2-libs/MathLib0}.  These libraries
+are always available for any dialect of the language (although their
+implementation and behaviour might differ, for example Storage ISO and
+PIM).
+
+The following libraries are Logitech-3.0 compatible but fall outside
+the base GNU Modula-2 libraries.
diff --git a/gcc/m2/tools-src/def2doc.py b/gcc/m2/tools-src/def2doc.py
new file mode 100755
index 00000000000..6f8f934ee62
--- /dev/null
+++ b/gcc/m2/tools-src/def2doc.py
@@ -0,0 +1,444 @@
+#!/usr/bin/env python3
+
+# def2texi.py creates texi library documentation for all exported procedures.
+# Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
+
+# Copyright (C) 2000-2022 Free Software Foundation, Inc.
+# 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.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Modula-2; see the file COPYING.  If not, write to the
+# Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+
+import argparse
+import os
+import sys
+
+BaseLibs = ["gm2-libs", "Base libraries", "Basic M2F compatible libraries"]
+
+PIMLogDesc = "PIM and Logitech 3.0 compatible libraries"
+PIMLog = ["gm2-libs-pim", "PIM and Logitech 3.0 Compatible", PIMLogDesc]
+PIMCorDesc = "PIM compatible process support"
+PIMCor = ["gm2-libs-coroutines", "PIM coroutine support", PIMCorDesc]
+ISOLibs = ["gm2-libs-iso", "M2 ISO Libraries", "ISO defined libraries"]
+
+libraryClassifications = [BaseLibs, PIMLog, PIMCor, ISOLibs]
+
+
+def initState():
+    global inVar, inType, inConst
+    inVar, inType, inConst = False, False, False
+
+
+def emitNode(name, nxt, previous, up):
+    if args.texinfo:
+        output.write("@node " + name + ", " + nxt + ", ")
+        output.write(previous + ", " + up + "\n")
+    elif args.sphinx:
+        output.write("@c @node " + name + ", " + nxt + ", ")
+        output.write(previous + ", " + up + "\n")
+
+
+def emitSection(name):
+    if args.texinfo:
+        output.write("@section " + name + "\n")
+    elif args.sphinx:
+        output.write(name + "\n")
+        output.write("=" * len(name) + "\n")
+
+
+def emitSubSection(name):
+    if args.texinfo:
+        output.write("@subsection " + name + "\n")
+    elif args.sphinx:
+        output.write(name + "\n")
+        output.write("=" * len(name) + "\n")
+
+
+#  displayLibraryClass - displays a node for a library directory and invokes
+#                        a routine to summarize each module.
+
+def displayLibraryClass():
+    global args
+    previous = ""
+
+    nxt = libraryClassifications[1][1]
+    i = 0
+    lib = libraryClassifications[i]
+
+    while True:
+        emitNode(lib[1], nxt, previous, args.up)
+        emitSection(lib[1])
+        output.write("\n")
+        displayModules(lib[1], lib[0], args.builddir, args.sourcedir)
+        output.write("\n")
+        output.write("@c " + "-" * 60 + "\n")
+        previous = lib[1]
+        i += 1
+        if i == len(libraryClassifications):
+            break
+        lib = libraryClassifications[i]
+        if i+1 == len(libraryClassifications):
+            nxt = ""
+        else:
+            nxt = libraryClassifications[i+1][1]
+
+
+#  displayMenu - displays the top level menu for library documentation.
+
+def displayMenu():
+    output.write("@menu\n")
+    for lib in libraryClassifications:
+        output.write("* " + lib[1] + "::" + lib[2] + "\n")
+    output.write("@end menu\n")
+
+    output.write("\n")
+    output.write("@c " + "=" * 60 + "\n")
+    output.write("\n")
+
+
+#  removeInitialComments - removes any (* *) at the top
+#                          of the definition module.
+
+def removeInitialComments(file, line):
+    while (str.find(line, "*)") == -1):
+        line = file.readline()
+
+
+#  removeableField - returns True if a comment field should be removed
+#  from the definition module.
+
+def removeableField(line):
+    field_list = ["Author", "Last edit", "LastEdit", "Last update",
+                  "Date", "Title", "Revision"]
+    for field in field_list:
+        if (str.find(line, field) != -1) and (str.find(line, ":") != -1):
+            return True
+    ignore_list = ["System", "SYSTEM"]
+    for ignore_field in ignore_list:
+        if str.find(line, ignore_field) != -1:
+            if str.find(line, ":") != -1:
+                if str.find(line, "Description:") == -1:
+                    return True
+    return False
+
+
+#  removeFields - removes Author/Date/Last edit/SYSTEM/Revision
+#                 fields from a comment within the start of a
+#                 definition module.
+
+def removeFields(file, line):
+    while (str.find(line, "*)") == -1):
+        if not removeableField(line):
+            output.write(str.replace(str.replace(str.rstrip(line),
+                                                 "{", "@{"), "}", "@}") + "\n")
+        line = file.readline()
+    output.write(str.rstrip(line) + "\n")
+
+
+#  checkIndex - create an index entry for a PROCEDURE, TYPE, CONST or VAR.
+
+def checkIndex(line):
+    global inVar, inType, inConst
+
+    words = str.split(line)
+    procedure = ""
+    if (len(words) > 1) and (words[0] == "PROCEDURE"):
+        inConst = False
+        inType = False
+        inVar = False
+        if (words[1] == "__BUILTIN__") and (len(words) > 2):
+            procedure = words[2]
+        else:
+            procedure = words[1]
+
+    if (len(line) > 1) and (line[0:2] == "(*"):
+        inConst = False
+        inType = False
+        inVar = False
+    elif line == "VAR":
+        inConst = False
+        inVar = True
+        inType = False
+        return
+    elif line == "TYPE":
+        inConst = False
+        inType = True
+        inVar = False
+        return
+    elif line == "CONST":
+        inConst = True
+        inType = False
+        inVar = False
+    if inVar:
+        words = str.split(line, ",")
+        for word in words:
+            word = str.lstrip(word)
+            if word != "":
+                if str.find(word, ":") == -1:
+                    output.write("@findex " + word + " (var)\n")
+                elif len(word) > 0:
+                    var = str.split(word, ":")
+                    if len(var) > 0:
+                        output.write("@findex " + var[0] + " (var)\n")
+
+    if inType:
+        words = str.lstrip(line)
+        if str.find(words, "=") != -1:
+            word = str.split(words, "=")
+            if (len(word[0]) > 0) and (word[0][0] != "_"):
+                output.write("@findex " + str.rstrip(word[0]) + " (type)\n")
+        else:
+            word = str.split(words)
+            if (len(word) > 1) and (word[1] == ";"):
+                # hidden type
+                if (len(word[0]) > 0) and (word[0][0] != "_"):
+                    output.write("@findex " + str.rstrip(word[0]))
+                    output.write(" (type)\n")
+
+    if inConst:
+        words = str.split(line, ";")
+        for word in words:
+            word = str.lstrip(word)
+            if word != "":
+                if str.find(word, "=") != -1:
+                    var = str.split(word, "=")
+                    if len(var) > 0:
+                        output.write("@findex " + var[0] + " (const)\n")
+
+    if procedure != "":
+        name = str.split(procedure, "(")
+        if name[0] != "":
+            proc = name[0]
+            if proc[-1] == ";":
+                proc = proc[:-1]
+            if proc != "":
+                output.write("@findex " + proc + "\n")
+
+
+#  parseDefinition - reads a definition module and creates
+#                    indices for procedures, constants,
+#                    variables and types.
+
+def parseDefinition(dir, source, build, file, needPage):
+    output.write("\n")
+    f = open(findFile(dir, build, source, file), "r")
+    initState()
+    line = f.readline()
+    while (str.find(line, "(*") != -1):
+        removeInitialComments(f, line)
+        line = f.readline()
+
+    while (str.find(line, "DEFINITION") == -1):
+        line = f.readline()
+
+    output.write("@example\n")
+    output.write(str.rstrip(line) + "\n")
+    line = f.readline()
+    if len(str.rstrip(line)) == 0:
+        output.write(str.replace(str.replace(str.rstrip(line),
+                                             "{", "@{"), "}", "@}") + "\n")
+        line = f.readline()
+        if (str.find(line, "(*") != -1):
+            removeFields(f, line)
+        else:
+            output.write(str.rstrip(line) + "\n")
+    else:
+        output.write(str.rstrip(line) + "\n")
+
+    line = f.readline()
+    while line:
+        line = str.rstrip(line)
+        checkIndex(line)
+        output.write(str.replace(str.replace(line, "{", "@{"), "}", "@}"))
+        output.write("\n")
+        line = f.readline()
+    output.write("@end example\n")
+    if needPage:
+        output.write("@page\n")
+    f.close()
+
+
+def parseModules(up, dir, build, source, listOfModules):
+    previous = ""
+    i = 0
+    if len(listOfModules) > 1:
+        nxt = dir + "/" + listOfModules[1][:-4]
+    else:
+        nxt = ""
+    while i < len(listOfModules):
+        emitNode(dir + "/" + listOfModules[i][:-4], nxt, previous, up)
+        emitSubSection(dir + "/" + listOfModules[i][:-4])
+        parseDefinition(dir, source, build, listOfModules[i], True)
+        output.write("\n")
+        previous = dir + "/" + listOfModules[i][:-4]
+        i = i + 1
+        if i+1 < len(listOfModules):
+            nxt = dir + "/" + listOfModules[i+1][:-4]
+        else:
+            nxt = ""
+
+
+#  doCat - displays the contents of file, name, to stdout
+
+def doCat(name):
+    file = open(name, "r")
+    line = file.readline()
+    while line:
+        output.write(str.rstrip(line) + "\n")
+        line = file.readline()
+    file.close()
+
+
+#  moduleMenu - generates a simple menu for all definition modules
+#               in dir
+
+def moduleMenu(dir, build, source):
+    output.write("@menu\n")
+    listOfFiles = []
+    if os.path.exists(os.path.join(source, dir)):
+        listOfFiles += os.listdir(os.path.join(source, dir))
+    if os.path.exists(os.path.join(source, dir)):
+        listOfFiles += os.listdir(os.path.join(build, dir))
+    listOfFiles = list(dict.fromkeys(listOfFiles).keys())
+    listOfFiles.sort()
+    for file in listOfFiles:
+        if foundFile(dir, build, source, file):
+            if (len(file) > 4) and (file[-4:] == ".def"):
+                output.write("* " + dir + "/" + file[:-4] + "::" + file + "\n")
+    output.write("@end menu\n")
+    output.write("\n")
+
+
+#  checkDirectory - returns True if dir exists in either build or source.
+
+def checkDirectory(dir, build, source):
+    if os.path.isdir(build) and os.path.exists(os.path.join(build, dir)):
+        return True
+    elif os.path.isdir(source) and os.path.exists(os.path.join(source, dir)):
+        return True
+    else:
+        return False
+
+
+#  foundFile - return True if file is found in build/dir/file or
+#  source/dir/file.
+
+def foundFile(dir, build, source, file):
+    name = os.path.join(os.path.join(build, dir), file)
+    if os.path.exists(name):
+        return True
+    name = os.path.join(os.path.join(source, dir), file)
+    if os.path.exists(name):
+        return True
+    return False
+
+
+#  findFile - return the path to file searching in build/dir/file
+#  first then source/dir/file.
+
+def findFile(dir, build, source, file):
+    name1 = os.path.join(os.path.join(build, dir), file)
+    if os.path.exists(name1):
+        return name1
+    name2 = os.path.join(os.path.join(source, dir), file)
+    if os.path.exists(name2):
+        return name2
+    sys.stderr.write("file cannot be found in either " + name1)
+    sys.stderr.write(" or " + name2 + "\n")
+    os.sys.exit(1)
+
+
+#  displayModules - walks though the files in dir and parses
+#                   definition modules and includes README.texi
+
+def displayModules(up, dir, build, source):
+    if checkDirectory(dir, build, source):
+        if foundFile(dir, build, source, "README.texi"):
+            doCat(findFile(dir, build, source, "README.texi"))
+
+        moduleMenu(dir, build, source)
+        listOfFiles = []
+        if os.path.exists(os.path.join(source, dir)):
+            listOfFiles += os.listdir(os.path.join(source, dir))
+        if os.path.exists(os.path.join(source, dir)):
+            listOfFiles += os.listdir(os.path.join(build, dir))
+        listOfFiles = list(dict.fromkeys(listOfFiles).keys())
+        listOfFiles.sort()
+        listOfModules = []
+        for file in listOfFiles:
+            if foundFile(dir, build, source, file):
+                if (len(file) > 4) and (file[-4:] == ".def"):
+                    listOfModules += [file]
+        listOfModules.sort()
+        parseModules(up, dir, build, source, listOfModules)
+    else:
+        line = "directory " + dir + " not found in either "
+        line += build + " or " + source
+        sys.stderr.write(line + "\n")
+
+
+def displayCopyright():
+    output.write("@c Copyright (C) 2000-2022 Free Software Foundation, Inc.\n")
+    output.write("@c This file is part of GNU Modula-2.\n")
+    output.write("""
+@c Permission is granted to copy, distribute and/or modify this document
+@c under the terms of the GNU Free Documentation License, Version 1.2 or
+@c any later version published by the Free Software Foundation.
+""")
+
+
+def collectArgs():
+    parser = argparse.ArgumentParser()
+    parser.add_argument("-v", "--verbose", help="generate progress messages",
+                        action="store_true")
+    parser.add_argument("-b", "--builddir", help="set the build directory",
+                        default=".", action="store")
+    parser.add_argument("-f", "--inputfile", help="set the input file",
+                        default=None, action="store")
+    parser.add_argument("-o", "--outputfile", help="set the output file",
+                        default=None, action="store")
+    parser.add_argument("-s", "--sourcedir", help="set the source directory",
+                        default=".", action="store")
+    parser.add_argument("-t", "--texinfo",
+                        help="generate texinfo documentation",
+                        default=False, action="store_true")
+    parser.add_argument("-u", "--up", help="set the up node",
+                        default="", action="store")
+    parser.add_argument("-x", "--sphinx", help="generate sphinx documentation",
+                        default=False, action="store_true")
+    args = parser.parse_args()
+    return args
+
+
+def main():
+    global args, output
+    args = collectArgs()
+    if args.outputfile is None:
+        output = sys.stdout
+    else:
+        output = open(args.outputfile, "w")
+    if args.inputfile is None:
+        displayCopyright()
+        displayMenu()
+        displayLibraryClass()
+    else:
+        parseDefinition(".", args.sourcedir, args.builddir,
+                        args.inputfile, False)
+    if not (args.outputfile is None):
+        output.close()
+
+
+main()
diff --git a/gcc/m2/tools-src/def2texi.py b/gcc/m2/tools-src/def2texi.py
deleted file mode 100755
index 1d1040f5006..00000000000
--- a/gcc/m2/tools-src/def2texi.py
+++ /dev/null
@@ -1,423 +0,0 @@
-#!/usr/bin/env python3
-
-# def2texi.py creates texi library documentation for all exported procedures.
-# Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-# Copyright (C) 2000-2022 Free Software Foundation, Inc.
-# 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.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Modula-2; see the file COPYING.  If not, write to the
-# Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-
-import sys
-import os
-import glob
-import getopt
-
-libraryClassifications = [['gm2-libs','Base libraries',
-                           'Basic M2F compatible libraries'],
-                          ['gm2-libs-pim','PIM and Logitech 3.0 Compatible',
-                           'PIM and Logitech 3.0 compatible libraries'],
-                          ['gm2-libs-coroutines','PIM coroutine support',
-                           'PIM compatible process support'],
-                          ['gm2-libs-iso','M2 ISO Libraries',
-                           'ISO defined libraries']]
-
-def initState ():
-    global inVar, inType, inConst
-    inVar, inType, inConst = False, False, False
-
-
-#
-#  displayLibraryClass - displays a node for a library directory and invokes
-#                        a routine to summarize each module
-#
-
-def displayLibraryClass():
-    global buildDir, up
-    previous = ""
-
-    next=libraryClassifications[1][1]
-    i = 0
-    l = libraryClassifications[i]
-
-    while True:
-        print("@node " + l[1] + ", " + next + ", " + previous + ", " + up)
-        print("@section " + l[1])
-        print("")
-        displayModules(l[1], l[0], buildDir, sourceDir)
-        print("")
-        print("@c ---------------------------------------------------------------------")
-        previous = l[1]
-        i += 1
-        if i == len(libraryClassifications):
-            break
-        l = libraryClassifications[i]
-        if i+1 == len(libraryClassifications):
-            next = ""
-        else:
-            next = libraryClassifications[i+1][1]
-
-#
-#  displayMenu - displays the top level menu for library documentation
-#
-
-def displayMenu():
-    print("@menu")
-    for l in libraryClassifications:
-        print("* " + l[1] + "::" + l[2])
-    print("@end menu")
-
-    print("\n")
-    print("@c =====================================================================")
-    print("\n")
-
-
-#
-#  removeInitialComments - removes any (* *) at the top of the definition module
-#
-
-def removeInitialComments (file, line):
-    while (str.find(line, "*)") == -1):
-        line = file.readline()
-
-#
-#  removeFields - removes Author/Date/Last edit/SYSTEM/Revision fields from a comment within the start
-#                 of a definition module
-#
-
-def removeFields (file, line):
-    while (str.find(line, "*)") == -1):
-        if (str.find(line, "Author") != -1) and (str.find(line, ":") != -1):
-            line = file.readline()
-        elif (str.find(line, "Last edit") != -1) and (str.find(line, ":") != -1):
-            line = file.readline()
-        elif (str.find(line, "LastEdit") != -1) and (str.find(line, ":") != -1):
-            line = file.readline()
-        elif (str.find(line, "Last update") != -1) and (str.find(line, ":") != -1):
-            line = file.readline()
-        elif (str.find(line, "Date") != -1) and (str.find(line, ":") != -1):
-            line = file.readline()
-        elif (str.find(line, "Title") != -1) and (str.find(line, ":") != -1):
-            line = file.readline()
-        elif (str.find(line, "Revision") != -1) and (str.find(line, ":") != -1):
-            line = file.readline()
-        elif (str.find(line, "System") != -1) and (str.find(line, ":") != -1) and (str.find(line, "Description:") == -1):
-            line = file.readline()
-        elif (str.find(line, "SYSTEM") != -1) and (str.find(line, ":") != -1) and (str.find(line, "Description:") == -1):
-            line = file.readline()
-        else:
-           print(str.replace(str.replace(str.rstrip(line),
-                                            "{", "@{"), "}", "@}"))
-           line = file.readline()
-    print(str.rstrip(line))
-
-
-#
-#  checkIndex
-#
-
-def checkIndex (line):
-    global inVar, inType, inConst
-
-    words = str.split(line)
-    procedure = ""
-    if (len(words)>1) and (words[0] == "PROCEDURE"):
-        inConst = False
-        inType = False
-        inVar = False
-        if (words[1] == "__BUILTIN__") and (len(words)>2):
-            procedure = words[2]
-        else:
-            procedure = words[1]
-
-    if (len(line)>1) and (line[0:2] == '(*'):
-        inConst = False
-        inType = False
-        inVar = False
-    elif line == "VAR":
-        inConst = False
-        inVar = True
-        inType = False
-        return
-    elif line == "TYPE":
-        inConst = False
-        inType = True
-        inVar = False
-        return
-    elif line == "CONST":
-        inConst = True
-        inType = False
-        inVar = False
-
-    if inVar:
-        words = str.split(line, ',')
-        for word in words:
-            word = str.lstrip(word)
-            if word != "":
-                if str.find(word, ':') == -1:
-                    print("@findex " + word + " (var)")
-                elif len(word)>0:
-                    var = str.split(word, ':')
-                    if len(var)>0:
-                        print("@findex " + var[0] + " (var)")
-
-    if inType:
-        words = str.lstrip(line)
-        if str.find(words, '=') != -1:
-            word = str.split(words, "=")
-            if (len(word[0])>0) and (word[0][0] != '_'):
-                print("@findex " + str.rstrip(word[0]) + " (type)")
-        else:
-            word = str.split(words)
-            if (len(word)>1) and (word[1] == ';'):
-                # hidden type
-                if (len(word[0])>0) and (word[0][0] != '_'):
-                    print("@findex " + str.rstrip(word[0]) + " (type)")
-
-    if inConst:
-        words = str.split(line, ';')
-        for word in words:
-            word = str.lstrip(word)
-            if word != "":
-                if str.find(word, '=') != -1:
-                    var = str.split(word, '=')
-                    if len(var)>0:
-                        print("@findex " + var[0] + " (const)")
-
-    if procedure != "":
-        name = str.split(procedure, "(")
-        if name[0] != "":
-            proc = name[0]
-            if proc[-1] == ";":
-                proc = proc[:-1]
-            if proc != "":
-                print("@findex " + proc)
-
-
-#
-#  parseDefinition
-#
-
-def parseDefinition (dir, source, build, file, needPage):
-    print("")
-    f = open(findFile(dir, build, source, file), 'r')
-    initState()
-    line = f.readline()
-#   while (str.find(line, "(*") != -1):
-    while (str.find(line, "(*") != -1):
-        removeInitialComments(f, line)
-        line = f.readline()
-
-    while (str.find(line, "DEFINITION") == -1):
-        line = f.readline()
-
-    print("@example")
-    print(str.rstrip(line))
-    line = f.readline()
-    if len(str.rstrip(line)) == 0:
-        print(str.replace(str.replace(str.rstrip(line),
-                                            "{", "@{"), "}", "@}"))
-        line = f.readline()
-        if (str.find(line, "(*") != -1):
-            removeFields(f, line)
-        else:
-            print(str.rstrip(line))
-    else:
-        print(str.rstrip(line))
-
-    line = f.readline()
-    while line:
-        line = str.rstrip(line)
-        checkIndex(line)
-        print(str.replace(str.replace(line, "{", "@{"), "}", "@}"))
-        line = f.readline()
-    print("@end example")
-    if needPage:
-        print("@page")
-    f.close()
-
-def parseModules (up, dir, build, source, listOfModules):
-    previous = ""
-    i = 0
-    if len(listOfModules)>1:
-        next = dir + "/" + listOfModules[1][:-4]
-    else:
-        next = ""
-
-    while i<len(listOfModules):
-       print("@node " + dir + "/" + listOfModules[i][:-4] + ", " + next + ", " + previous + ", " + up)
-       print("@subsection " + dir + "/" + listOfModules[i][:-4])
-       parseDefinition(dir, source, build, listOfModules[i], True)
-       print("\n")
-       previous = dir + "/" + listOfModules[i][:-4]
-       i = i + 1
-       if i+1<len(listOfModules):
-           next = dir + "/" + listOfModules[i+1][:-4]
-       else:
-           next = ""
-
-
-#
-#  doCat - displays the contents of file, name, to stdout
-#
-
-def doCat (name):
-    file = open(name, 'r')
-    line = file.readline()
-    while line:
-        print(str.rstrip(line))
-        line = file.readline()
-    file.close()
-
-
-#
-#  moduleMenu - generates a simple menu for all definition modules
-#               in dir
-#
-
-def moduleMenu (dir, build, source):
-    print("@menu")
-    listOfFiles = []
-    if os.path.exists(os.path.join(source, dir)):
-        listOfFiles += os.listdir(os.path.join(source, dir))
-    if os.path.exists(os.path.join(source, dir)):
-        listOfFiles += os.listdir(os.path.join(build, dir))
-    listOfFiles = list(dict.fromkeys(listOfFiles).keys())
-    listOfFiles.sort()
-    for file in listOfFiles:
-        if foundFile(dir, build, source, file):
-            if (len(file)>4) and (file[-4:] == '.def'):
-                print("* " + dir + "/" + file[:-4] + "::" + file)
-    print("@end menu")
-    print("\n")
-
-
-#
-#  checkDirectory - returns True if dir exists in either build or source.
-#
-
-def checkDirectory (dir, build, source):
-    if os.path.isdir(build) and os.path.exists(os.path.join(build, dir)):
-        return True
-    elif os.path.isdir(source) and os.path.exists(os.path.join(source, dir)):
-        return True
-    else:
-        return False
-
-
-#
-#  foundFile - return True if file is found in build/dir/file or source/dir/file.
-#
-
-def foundFile (dir, build, source, file):
-    name = os.path.join(os.path.join(build, dir), file)
-    if os.path.exists(name):
-        return True
-    name = os.path.join(os.path.join(source, dir), file)
-    if os.path.exists(name):
-        return True
-    return False
-
-
-#
-#  findFile - return the path to file searching in build/dir/file first then source/dir/file.
-#
-
-def findFile (dir, build, source, file):
-    name1 = os.path.join(os.path.join(build, dir), file)
-    if os.path.exists(name1):
-        return name1
-    name2 = os.path.join(os.path.join(source, dir), file)
-    if os.path.exists(name2):
-        return name2
-    print("file cannot be found in either " + name1 + " or " + name2)
-    os.sys.exit(1)
-
-
-#
-#  displayModules - walks though the files in dir and parses
-#                   definition modules and includes README.texi
-#
-
-def displayModules(up, dir, build, source):
-    if checkDirectory(dir, build, source):
-        if foundFile(dir, build, source, "README.texi"):
-            doCat(findFile(dir, build, source, "README.texi"))
-
-        moduleMenu(dir, build, source)
-        listOfFiles = []
-        if os.path.exists(os.path.join(source, dir)):
-            listOfFiles += os.listdir(os.path.join(source, dir))
-        if os.path.exists(os.path.join(source, dir)):
-            listOfFiles += os.listdir(os.path.join(build, dir))
-        listOfFiles = list(dict.fromkeys(listOfFiles).keys())
-        listOfFiles.sort()
-        listOfModules = []
-        for file in listOfFiles:
-            if foundFile(dir, build, source, file):
-                if (len(file)>4) and (file[-4:] == '.def'):
-                    listOfModules += [file]
-        listOfModules.sort()
-        parseModules(up, dir, build, source, listOfModules)
-    else:
-        print("directory " + dir + " not found in either " + build + " or " + source)
-
-
-def displayCopyright ():
-    print("@c Copyright (C) 2000-2022 Free Software Foundation, Inc.")
-    print("@c This file is part of GNU Modula-2.")
-    print("""
-@c Permission is granted to copy, distribute and/or modify this document
-@c under the terms of the GNU Free Documentation License, Version 1.2 or
-@c any later version published by the Free Software Foundation.
-""")
-
-def Usage():
-    print("def2texi.py [-h][-bbuilddir][-uupnode][-ffilename]")
-
-def collectArgs():
-    buildDir="."
-    sourceDir="."
-    filename=""
-    up=""
-    try:
-        optlist, list = getopt.getopt(sys.argv[1:],':hb:f:s:u:')
-    except getopt.GetoptError:
-        Usage()
-        os.sys.exit(1)
-    for opt in optlist:
-        if opt[0] == '-h':
-            Usage()
-        if opt[0] == '-b':
-            buildDir = opt[1]
-        if opt[0] == '-f':
-            filename = opt[1]
-        if opt[0] == '-s':
-            sourceDir = opt[1]
-        if opt[0] == '-u':
-            up = opt[1]
-    return buildDir, sourceDir, filename, up
-
-
-buildDir, sourceDir, filename, up = collectArgs()
-
-if filename == "":
-    displayCopyright()
-    displayMenu()
-    displayLibraryClass()
-else:
-    parseDefinition('.', sourceDir, buildDir, filename, False)
diff --git a/libgm2/configure b/libgm2/configure
index 5949e87eb4e..889c0926a15 100755
--- a/libgm2/configure
+++ b/libgm2/configure
@@ -7687,6 +7687,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -12218,6 +12223,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
@@ -12674,7 +12698,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12677 "configure"
+#line 12701 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12780,7 +12804,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12783 "configure"
+#line 12807 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -14345,8 +14369,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         ;;
 
       vxworks*)
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
+        # For VxWorks ports, we assume the use of a GNU linker with
+        # standard elf conventions.
+        ld_shlibs_CXX=yes
         ;;
 
       *)
@@ -15897,6 +15922,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-10-21 15:38 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-21 15:38 [gcc/devel/modula-2] gcc/m2/tools-src/def2doc.py rewritten to use argparse Gaius Mulley

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).