2
votes

I recently updated to a new version of the GNAT compiler.. I am trying to compile the GNADE source (http://gnade.sourceforge.net/)

Is there some sort of flag that I need to set or some way to debug this?

I am seeing this error (When it used to compile fine under GNATPro 6.22):

gnatmake -g -O0 -fstack-check -pipe -gnatE -gnatU -gnatwl -gnatf   -gnatE -gnat05   -p  -PLibBuildGNADE.gpr
gcc -c -fPIC -g -O0 -fstack-check -pipe -gnatE -gnatU -gnatwl -gnatf -gnatE -gnat05 -I- -gnatA /home/user1/GNADE/src/gnu-db-sqlcli-generic_attr-boolean_attribute.adb
cannot generate code for file gnu-db-sqlcli-generic_attr-boolean_attribute.adb (missing subunits)

Here is the spec source (gnu-db-sqlcli-generic_attr-boolean_attribute.ads)

-------------------------------------------------------------------------------
--                                                                           --
--                      GNADE  : GNu Ada Database Environment                --
--                                                                           --
--  Author          : Juergen Pfeifer <[email protected]>
--
--  Copyright (C) 2000-2001 Juergen Pfeifer
--                                                                           --
--  GNADE is free software;  you can redistribute it  and/or modify it under --
--  terms of the  GNU General Public License as published  by the Free Soft- --
--  ware  Foundation;  either version 2,  or (at your option) any later ver- --
--  sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
--  OUT 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  distributed with GNAT;  see file COPYING.  If not, write --
--  to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
--  MA 02111-1307, USA.                                                      --
--                                                                           --
--  As a special exception,  if other files  instantiate  generics from this --
--  unit, or you link  this unit with other files  to produce an executable, --
--  this  unit  does not  by itself cause  the resulting  executable  to  be --
--  covered  by the  GNU  General  Public  License.  This exception does not --
--  however invalidate  any other reasons why  the executable file  might be --
--  covered by the  GNU Public License.                                      --
--                                                                           --
--  GNADE is implemented to work with GNAT, the GNU Ada compiler.            --
--                                                                           --
-------------------------------------------------------------------------------
generic
   type Bool_Type is mod <>;
package GNU.DB.SQLCLI.Generic_Attr.Boolean_Attribute is

   type Attribute_Value_Pair_Boolean_Scalar is new Attribute_Value_Pair
     with
      record
         Value : Boolean;
      end record;
   function To_String (Object : Attribute_Value_Pair_Boolean_Scalar)
                      return String;

   function GetAttr (Handle    : Context;
                     Attribute : T;
                     Data      : Aux;
                     MaxLength : SQLSMALLINT := 0;
                     ErrorCode : access SQLRETURN)
                    return Attribute_Value_Pair_Boolean_Scalar;

   procedure SetAttr (Handle    : in  Context;
                      AV_Pair   : in  Attribute_Value_Pair_Boolean_Scalar;
                      Data      : in  Aux;
                      ErrorCode : out SQLRETURN);

private
   Default_Len : constant Base := Base (Length_Indicator (Bool_Type'Size));

end GNU.DB.SQLCLI.Generic_Attr.Boolean_Attribute;

Here is the body source (gnu-db-sqlcli-generic_attr-boolean_attribute.adb)

-------------------------------------------------------------------------------
--                                                                           --
--                      GNADE  : GNu Ada Database Environment                --
--                                                                           --
--  Author          : Juergen Pfeifer <[email protected]>
--
--  Copyright (C) 2000-2003 Juergen Pfeifer
--                                                                           --
--  GNADE is free software;  you can redistribute it  and/or modify it under --
--  terms of the  GNU General Public License as published  by the Free Soft- --
--  ware  Foundation;  either version 2,  or (at your option) any later ver- --
--  sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
--  OUT 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  distributed with GNAT;  see file COPYING.  If not, write --
--  to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
--  MA 02111-1307, USA.                                                      --
--                                                                           --
--  As a special exception,  if other files  instantiate  generics from this --
--  unit, or you link  this unit with other files  to produce an executable, --
--  this  unit  does not  by itself cause  the resulting  executable  to  be --
--  covered  by the  GNU  General  Public  License.  This exception does not --
--  however invalidate  any other reasons why  the executable file  might be --
--  covered by the  GNU Public License.                                      --
--                                                                           --
--  GNADE is implemented to work with GNAT, the GNU Ada compiler.            --
--                                                                           --
-------------------------------------------------------------------------------
with Ada.Unchecked_Conversion;
with System.Address_To_Access_Conversions;

package body GNU.DB.SQLCLI.Generic_Attr.Boolean_Attribute is

   function To_String (Object : Attribute_Value_Pair_Boolean_Scalar)
                      return String is
   begin
      return Boolean'Image (Object.Value);
   end To_String;

   function GetAttr (Handle    : Context;
                     Attribute : T;
                     Data      : Aux;
                     MaxLength : SQLSMALLINT := 0;
                     ErrorCode : access SQLRETURN)
                    return Attribute_Value_Pair_Boolean_Scalar
   is
      pragma Unreferenced (MaxLength);
      package P is new System.Address_To_Access_Conversions (Bool_Type);

      Value : aliased Bool_Type;
      Len   : Base := Default_Len;
      Res   : Boolean := False;
   begin
      Get (Handle,
           Attribute,
           To_SQLPOINTER (P.To_Address
                          (P.Object_Pointer'(Value'Access))),
           Len,
           Data,
           ErrorCode);
      if Value /= 0 then
         Res := True;
      end if;
      return Attribute_Value_Pair_Boolean_Scalar'
        (Attribute => Attribute,
         Value     => Res);
   end GetAttr;

   procedure SetAttr (Handle    : in Context;
                      AV_Pair   : in Attribute_Value_Pair_Boolean_Scalar;
                      Data      : in Aux;
                      ErrorCode : out SQLRETURN)
   is
      function Cvt is new Ada.Unchecked_Conversion (SQLINTEGER, SQLPOINTER);
      Len : constant Base     := Default_Len;
      Val : aliased Bool_Type := 0;
   begin
      if AV_Pair.Value then
         Val := 1;
      end if;
      Set (Handle, AV_Pair.Attribute,
           Cvt (SQLINTEGER (Val)),
           Len,
           Data,
           ErrorCode);
   end SetAttr;


end GNU.DB.SQLCLI.Generic_Attr.Boolean_Attribute;
2

2 Answers

1
votes

On a whim, I passed in the '-x' flag to the compiler and it seemed to fix the issue.

1
votes

The -x flag you mentioned in your self-answer is described thusly:

Indicate that sources that are not part of any Project File may be compiled. Normally, when using Project Files, only sources that are part of a Project File may be compile. When this switch is used, a source outside of all Project Files may be compiled. The ALI file and the object file will be put in the object directory of the main Project. The compilation switches used will only be those specified on the command line. Even when `-x' is used, mains specified on the command line need to be sources of a project file.

So it looks like what was happening was that you are using project files, and had some units that you were using that you hadn't bothered to put into any of your project files. I'm guessing everything in GNU.DB?

I suppose the solution would be to either go ahead and put those extra sources in a project file somewhere, or continue to build with that -x flag.