This is a tidyup for PR modula2/120189 to improve the description
and include all source code in the Building a shared library section.

gcc/ChangeLog:

        PR modula2/120189
        * doc/gm2.texi (Building a shared library): Rewrite the
        description of the shared library and include complete code into
        the example.

gcc/testsuite/ChangeLog:

        PR modula2/120189
        * gm2/examples/cppcallingm2/run/pass/README: New test.
        * gm2/examples/cppcallingm2/run/pass/a.def: New test.
        * gm2/examples/cppcallingm2/run/pass/a.mod: New test.
        * gm2/examples/cppcallingm2/run/pass/b.def: New test.
        * gm2/examples/cppcallingm2/run/pass/b.mod: New test.
        * gm2/examples/cppcallingm2/run/pass/c.def: New test.
        * gm2/examples/cppcallingm2/run/pass/c.mod: New test.
        * gm2/examples/cppcallingm2/run/pass/test.cc: New test.

Signed-off-by: Gaius Mulley <[email protected]>
---
 gcc/doc/gm2.texi                              | 72 +++++++++++++++++--
 .../gm2/examples/cppcallingm2/run/pass/README |  1 +
 .../gm2/examples/cppcallingm2/run/pass/a.def  |  3 +
 .../gm2/examples/cppcallingm2/run/pass/a.mod  |  9 +++
 .../gm2/examples/cppcallingm2/run/pass/b.def  |  3 +
 .../gm2/examples/cppcallingm2/run/pass/b.mod  | 11 +++
 .../gm2/examples/cppcallingm2/run/pass/c.def  |  3 +
 .../gm2/examples/cppcallingm2/run/pass/c.mod  | 10 +++
 .../examples/cppcallingm2/run/pass/test.cc    | 54 ++++++++++++++
 9 files changed, 162 insertions(+), 4 deletions(-)
 create mode 100644 gcc/testsuite/gm2/examples/cppcallingm2/run/pass/README
 create mode 100644 gcc/testsuite/gm2/examples/cppcallingm2/run/pass/a.def
 create mode 100644 gcc/testsuite/gm2/examples/cppcallingm2/run/pass/a.mod
 create mode 100644 gcc/testsuite/gm2/examples/cppcallingm2/run/pass/b.def
 create mode 100644 gcc/testsuite/gm2/examples/cppcallingm2/run/pass/b.mod
 create mode 100644 gcc/testsuite/gm2/examples/cppcallingm2/run/pass/c.def
 create mode 100644 gcc/testsuite/gm2/examples/cppcallingm2/run/pass/c.mod
 create mode 100644 gcc/testsuite/gm2/examples/cppcallingm2/run/pass/test.cc

diff --git a/gcc/doc/gm2.texi b/gcc/doc/gm2.texi
index e4a0e963563..4e2721bd1cb 100644
--- a/gcc/doc/gm2.texi
+++ b/gcc/doc/gm2.texi
@@ -2303,10 +2303,74 @@ intersect.
 @section Building a shared library
 
 This section describes building a tiny shared library implemented in
-Modula-2 and built with @file{libtool}.  Suppose a project consists of
-three definition modules and three implementation modules
-@file{a.def}, @file{a.mod}, @file{b.def}, @file{b.mod} and
-@file{c.mod}.  The first step is to compile the modules using position
+Modula-2 and built with @file{libtool}.  Consider a project consisting
+of three definition modules and three implementation modules
+@file{a.def}, @file{a.mod}, @file{b.def}, @file{b.mod}, @file{c.def}
+and @file{c.mod}.
+
+@example
+DEFINITION MODULE a ;
+
+END a.
+@end example
+
+@example
+IMPLEMENTATION MODULE a ;
+
+FROM libc IMPORT printf ;
+
+BEGIN
+   printf ("init: module a\n")
+FINALLY
+   printf ("finish: module a\n")
+END a.
+@end example
+
+Module @code{b} is almost identical, but it imports module @code{a}.
+
+@example
+DEFINITION MODULE b ;
+
+END b.
+@end example
+
+@example
+IMPLEMENTATION MODULE b ;
+
+IMPORT a ;
+FROM libc IMPORT printf ;
+
+
+BEGIN
+   printf ("init: module b\n")
+FINALLY
+   printf ("finish: module b\n")
+END b.
+@end example
+
+Likewise Module @code{c} is almost identical, but it imports from
+module @code{b}.
+
+@example
+DEFINITION MODULE c ;
+
+END c.
+@end example
+
+@example
+IMPLEMENTATION MODULE c ;
+
+IMPORT b ;
+FROM libc IMPORT printf ;
+
+BEGIN
+   printf ("init: module c\n")
+FINALLY
+   printf ("finish: module c\n")
+END c.
+@end example
+
+The first step is to compile the modules using position
 independent code.  This can be achieved by the following three
 commands:
 
diff --git a/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/README 
b/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/README
new file mode 100644
index 00000000000..17cd40eedbc
--- /dev/null
+++ b/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/README
@@ -0,0 +1 @@
+This source code appears in the documentation section Building a shared 
library.
diff --git a/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/a.def 
b/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/a.def
new file mode 100644
index 00000000000..0d634ac2d40
--- /dev/null
+++ b/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/a.def
@@ -0,0 +1,3 @@
+DEFINITION MODULE a ;
+
+END a.
diff --git a/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/a.mod 
b/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/a.mod
new file mode 100644
index 00000000000..d0fed0f65f6
--- /dev/null
+++ b/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/a.mod
@@ -0,0 +1,9 @@
+IMPLEMENTATION MODULE a ;
+
+FROM libc IMPORT printf ;
+
+BEGIN
+   printf ("init: module a\n")
+FINALLY
+   printf ("finish: module a\n")
+END a.
diff --git a/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/b.def 
b/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/b.def
new file mode 100644
index 00000000000..aff0fcc6478
--- /dev/null
+++ b/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/b.def
@@ -0,0 +1,3 @@
+DEFINITION MODULE b ;
+
+END b.
diff --git a/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/b.mod 
b/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/b.mod
new file mode 100644
index 00000000000..8f99701b5e6
--- /dev/null
+++ b/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/b.mod
@@ -0,0 +1,11 @@
+IMPLEMENTATION MODULE b ;
+
+IMPORT a ;
+FROM libc IMPORT printf ;
+
+
+BEGIN
+   printf ("init: module b\n")
+FINALLY
+   printf ("finish: module b\n")
+END b.
diff --git a/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/c.def 
b/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/c.def
new file mode 100644
index 00000000000..2d84b6dcbb1
--- /dev/null
+++ b/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/c.def
@@ -0,0 +1,3 @@
+DEFINITION MODULE c ;
+
+END c.
diff --git a/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/c.mod 
b/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/c.mod
new file mode 100644
index 00000000000..4cdfdd9bec7
--- /dev/null
+++ b/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/c.mod
@@ -0,0 +1,10 @@
+IMPLEMENTATION MODULE c ;
+
+IMPORT b ;
+FROM libc IMPORT printf ;
+
+BEGIN
+   printf ("init: module c\n")
+FINALLY
+   printf ("finish: module c\n")
+END c.
diff --git a/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/test.cc 
b/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/test.cc
new file mode 100644
index 00000000000..5f1fd2a76e4
--- /dev/null
+++ b/gcc/testsuite/gm2/examples/cppcallingm2/run/pass/test.cc
@@ -0,0 +1,54 @@
+#include <stdio.h>
+#include <m2/m2iso/m2rts.h>
+
+#define USER_LIB NULL
+
+/* Add the runtime dependency for this file on modules a, b and c.  */
+
+void
+dep (void)
+{
+  m2iso_M2RTS_RequestDependant (__FILE__, USER_LIB, "c", USER_LIB);
+  m2iso_M2RTS_RequestDependant (__FILE__, USER_LIB, "b", USER_LIB);
+  m2iso_M2RTS_RequestDependant (__FILE__, USER_LIB, "a", USER_LIB);
+}
+
+void
+init (int, char *[], char *[])
+{
+  printf ("test.c:init\n");
+}
+
+void
+fini (int, char *[], char *[])
+{
+  printf ("test.c:fini\n");
+}
+
+void
+construct_scaffold (int argc, char *argv[], char *envp[])
+{
+  m2iso_M2RTS_RegisterModule (__FILE__, USER_LIB,
+                              init, fini, dep);
+  m2iso_M2RTS_ConstructModules (__FILE__, USER_LIB,
+                                DEFAULT_RUNTIME_MODULE_OVERRIDE,
+                                argc, argv, envp);
+}
+
+void
+deconstruct_scaffold (int argc, char *argv[], char *envp[])
+{
+  m2iso_M2RTS_DeconstructModules (__FILE__, USER_LIB,
+                                  argc, argv, envp);
+}
+
+int
+main (int argc, char *argv[], char *envp[])
+{
+  printf ("main starts\n");
+  construct_scaffold (argc, argv, envp);
+  printf ("main application goes here\n");
+  deconstruct_scaffold (argc, argv, envp);
+  printf ("main tidying up\n");
+  return 0;
+}
-- 
2.47.3

Reply via email to