invoke.texi: Document -fada-spec-parent.
authorThomas Quinot <quinot@adacore.com>
Tue, 18 Sep 2012 14:26:06 +0000 (14:26 +0000)
committerArnaud Charlet <charlet@gcc.gnu.org>
Tue, 18 Sep 2012 14:26:06 +0000 (16:26 +0200)
* doc/invoke.texi: Document -fada-spec-parent.
c-family/
* c.opt (-fada-spec-parent): Define new command line switch.
* c-ada-spec.c (get_ada_package): When -fada-spec-parent
is specified, generate binding spec as a child of the specified unit.

From-SVN: r191427

gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c-ada-spec.c
gcc/c-family/c.opt
gcc/doc/invoke.texi

index 73b828d..951467b 100644 (file)
@@ -1,3 +1,7 @@
+2012-09-18 Thomas Quinot  <quinot@adacore.com>       
+
+       * doc/invoke.texi: Document -fada-spec-parent.
+
 2012-09-18  Jakub Jelinek  <jakub@redhat.com>
 
        PR tree-optimization/54610
index 8b3cd2a..fd2bab9 100644 (file)
@@ -1,3 +1,9 @@
+2012-09-18 Thomas Quinot  <quinot@adacore.com>
+
+       * c.opt (-fada-spec-parent): Define new command line switch.
+       * c-ada-spec.c (get_ada_package): When -fada-spec-parent
+       is specified, generate binding spec as a child of the specified unit.
+
 2012-09-13  Paolo Carlini  <paolo.carlini@oracle.com>
            Manuel López-Ibáñez  <manu@gcc.gnu.org>
 
index cc6f260..435b0c9 100644 (file)
@@ -817,15 +817,26 @@ get_ada_package (const char *file)
   char *res;
   const char *s;
   int i;
+  size_t plen;
 
   s = strstr (file, "/include/");
   if (s)
     base = s + 9;
   else
     base = lbasename (file);
-  res = XNEWVEC (char, strlen (base) + 1);
 
-  for (i = 0; *base; base++, i++)
+  if (ada_specs_parent == NULL)
+    plen = 0;
+  else
+    plen = strlen (ada_specs_parent) + 1;
+
+  res = XNEWVEC (char, plen + strlen (base) + 1);
+  if (ada_specs_parent != NULL) {
+    strcpy (res, ada_specs_parent);
+    res[plen - 1] = '.';
+  }
+
+  for (i = plen; *base; base++, i++)
     switch (*base)
       {
        case '+':
@@ -837,14 +848,14 @@ get_ada_package (const char *file)
        case '_':
        case '/':
        case '\\':
-         res [i] = (i == 0 || res [i - 1] == '_') ? 'u' : '_';
+         res[i] = (i == 0 || res[i - 1] == '.' || res[i - 1] == '_') ? 'u' : '_';
          break;
 
        default:
-         res [i] = *base;
+         res[i] = *base;
          break;
       }
-  res [i] = '\0';
+  res[i] = '\0';
 
   return res;
 }
@@ -3250,7 +3261,10 @@ dump_ads (const char *source_file,
   ads_name = xstrdup (pkg_name);
 
   for (s = ads_name; *s; s++)
-    *s = TOLOWER (*s);
+    if (*s == '.')
+      *s = '-';
+    else
+      *s = TOLOWER (*s);
 
   ads_name = reconcat (ads_name, ads_name, ".ads", NULL);
 
index 39d70ad..6aa53a5 100644 (file)
@@ -729,6 +729,10 @@ faccess-control
 C++ ObjC++ Var(flag_access_control) Init(1)
 Enforce class member access control semantics
 
+fada-spec-parent=
+C ObjC C++ ObjC++ RejectNegative Joined Var(ada_specs_parent)
+-fada-spec-parent=unit  Dump Ada specs as child units of given parent
+
 fall-virtual
 C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
 
index 5ee85d4..748e792 100644 (file)
@@ -166,7 +166,7 @@ in the following sections.
 -pipe  -pass-exit-codes  @gol
 -x @var{language}  -v  -###  --help@r{[}=@var{class}@r{[},@dots{}@r{]]}  --target-help  @gol
 --version -wrapper @@@var{file} -fplugin=@var{file} -fplugin-arg-@var{name}=@var{arg}  @gol
--fdump-ada-spec@r{[}-slim@r{]} -fdump-go-spec=@var{file}}
+-fdump-ada-spec@r{[}-slim@r{]} -fada-spec-parent=@var{arg} -fdump-go-spec=@var{file}}
 
 @item C Language Options
 @xref{C Dialect Options,,Options Controlling C Dialect}.