tags 782801 +patch
thanks
This now fixed in upstream GIT, see
958f5f9e4ba752ca3e4045c09618579eae74f219 GNUTLS 3.4 compartibility.
7857ccafe14848d8378272421d2e49c3b351334b GNUTLS version 3.4.4 and newer
compartibility
After some googling I managed to find said upstream git repo

http://libre.adacore.com/tools/aws/

git clone --recursive http://forge.open-do.org/anonscm/git/aws/aws.gi

I was then able to extract the two commits mentioned above and apply them as patches to the Debian packaging with a little bit of tweaking.

Unfortunatley the result of doing so failed to build (in a raspbian stretch-staging chroot but I doubt that matters much) with

/libaws-3.2.0/debian/build_aws_obj_dynamic/ssl-thin__gnutls.o: In function `ssl__thin___elabs': /libaws-3.2.0/config/ssl/ssl-thin__gnutls.ads:1471: undefined reference to `_AWS_GNUTLS_SEC_PARAM_NORMAL'
collect2: error: ld returned 1 exit status
Turns out that the gnutls build path now has a wrappers.c (previously the openssl one did but the gnutls one didn't). Since debian/rules doesn't use the upstream buildsystem this required a little tweaking to debian/rules.

With that I got a succesful build in raspbian stretch-staging which I have uploaded to there. Debdiff attatched, no intent to NMU in debian.
diff -Nru libaws-3.2.0/debian/changelog libaws-3.2.0/debian/changelog
--- libaws-3.2.0/debian/changelog       2014-10-06 21:31:41.000000000 +0000
+++ libaws-3.2.0/debian/changelog       2016-01-30 00:04:32.000000000 +0000
@@ -1,3 +1,11 @@
+libaws (3.2.0-3+rpi1) stretch-staging; urgency=medium
+
+  * Add patches based on upstream commits to fix build with new gnutls
+   (Closes: 782801)
+  * Tweak debian/rules to build wrappers.c when building with gnutls.
+
+ -- Peter Michael Green <plugw...@raspbian.org>  Fri, 29 Jan 2016 23:40:28 
+0000
+
 libaws (3.2.0-3) unstable; urgency=medium
 
   * Move source package to section libs, raise -bin and -doc binary packages
diff -Nru libaws-3.2.0/debian/patches/gnutls3.4.4.diff 
libaws-3.2.0/debian/patches/gnutls3.4.4.diff
--- libaws-3.2.0/debian/patches/gnutls3.4.4.diff        1970-01-01 
00:00:00.000000000 +0000
+++ libaws-3.2.0/debian/patches/gnutls3.4.4.diff        2016-01-29 
22:12:29.000000000 +0000
@@ -0,0 +1,66 @@
+This patch is based on the git commit described below and was refreshed against
+the Debian package by Peter Michael Green.
+
+commit 7857ccafe14848d8378272421d2e49c3b351334b
+Author: Dmitriy Anisimkov <anisim...@ada-ru.org>
+Date:   Fri Sep 25 12:12:20 2015 +0600
+
+    GNUTLS version 3.4.4 and newer compartibility.
+    
+    * config/ssl/ssl-thin__gnutls.ads:
+    More session flags.
+    
+    * config/ssl/aws-net-ssl__gnutls.adb:
+    Use GNUTLS_NO_EXTENSIONS session flag when ticket support is not necessary.
+
+Index: libaws-3.2.0/config/ssl/aws-net-ssl__gnutls.adb
+===================================================================
+--- libaws-3.2.0.orig/config/ssl/aws-net-ssl__gnutls.adb
++++ libaws-3.2.0/config/ssl/aws-net-ssl__gnutls.adb
+@@ -1646,7 +1646,11 @@ package body AWS.Net.SSL is
+       Check_Config (Socket);
+ 
+       Check_Error_Code
+-        (gnutls_init (Socket.SSL'Access, GNUTLS_CLIENT), Socket);
++        (gnutls_init
++           (Socket.SSL'Access,
++            GNUTLS_CLIENT + (if Socket.Config.Ticket_Support then 0
++                             else GNUTLS_NO_EXTENSIONS)),
++         Socket);
+ 
+       if Socket.Config.Ticket_Support then
+          Check_Error_Code (gnutls_session_ticket_enable_client (Socket.SSL));
+@@ -1744,7 +1748,11 @@ package body AWS.Net.SSL is
+       end if;
+ 
+       Check_Error_Code
+-        (gnutls_init (Socket.SSL'Access, GNUTLS_SERVER), Socket);
++        (gnutls_init
++           (Socket.SSL'Access,
++            GNUTLS_SERVER + (if Socket.Config.Ticket_Support then 0
++                             else GNUTLS_NO_EXTENSIONS)),
++         Socket);
+ 
+       if Socket.Config.Ticket_Support then
+          Check_Error_Code
+Index: libaws-3.2.0/config/ssl/ssl-thin__gnutls.ads
+===================================================================
+--- libaws-3.2.0.orig/config/ssl/ssl-thin__gnutls.ads
++++ libaws-3.2.0/config/ssl/ssl-thin__gnutls.ads
+@@ -177,10 +177,12 @@ package SSL.Thin is
+    GNUTLS_CRD_PSK         : constant gnutls_credentials_type_t := 4;
+    GNUTLS_CRD_IA          : constant gnutls_credentials_type_t := 5;
+ 
+-   GNUTLS_SERVER   : constant C.unsigned := 1;
+-   GNUTLS_CLIENT   : constant C.unsigned := 2;
+-   GNUTLS_DATAGRAM : constant C.unsigned := 4;
+-   GNUTLS_NONBLOCK : constant C.unsigned := 8;
++   GNUTLS_SERVER               : constant C.unsigned := 1;
++   GNUTLS_CLIENT               : constant C.unsigned := 2;
++   GNUTLS_DATAGRAM             : constant C.unsigned := 4;
++   GNUTLS_NONBLOCK             : constant C.unsigned := 8;
++   GNUTLS_NO_EXTENSIONS        : constant C.unsigned := 16;
++   GNUTLS_NO_REPLAY_PROTECTION : constant C.unsigned := 32;
+ 
+    type gnutls_certificate_verify_flags is new C.int;
+    subtype certificate_verify_flags is gnutls_certificate_verify_flags;
diff -Nru libaws-3.2.0/debian/patches/gnutls3.4.diff 
libaws-3.2.0/debian/patches/gnutls3.4.diff
--- libaws-3.2.0/debian/patches/gnutls3.4.diff  1970-01-01 00:00:00.000000000 
+0000
+++ libaws-3.2.0/debian/patches/gnutls3.4.diff  2016-01-29 22:11:36.000000000 
+0000
@@ -0,0 +1,271 @@
+This patch is based on the git commit described below with modifications by
+plugwash to make it apply to the Debian package.
+
+commit 958f5f9e4ba752ca3e4045c09618579eae74f219
+Author: Dmitriy Anisimkov <anisim...@ada-ru.org>
+Date:   Wed Sep 23 19:09:32 2015 +0600
+
+    GNUTLS 3.4 compartibility.
+    
+    * config/ssl/ssl-thin__gnutls.ads:
+    (GNUTLS_SEC_PARAM_*): constants imported from C wrapper.
+    (gnutls_rsa_params_t): became subtype of gnutls_x509_privkey_t.
+    (gnutls_certificate_set_rsa_export_params): Removed.
+    (gnutls_rsa_params_init): Removed.
+    (gnutls_rsa_params_deinit): Removed.
+    (gnutls_rsa_params_cpy): Removed.
+    (gnutls_rsa_params_import_raw): Removed.
+    (gnutls_rsa_params_generate2): Removed.
+    (gnutls_rsa_params_export_raw): Removed.
+    (gnutls_rsa_params_import_pkcs1): Removed.
+    (gnutls_x509_privkey_generate): New bound routine.
+    
+    * ssl/ssl.gpr, config/ssl/gnutls/wrappers.c:
+    C wrapper for GNUTLS_SEC_PARAM_* constants.
+    
+    * config/ssl/aws-net-ssl__gnutls.adb:
+    (Generate_RSA): Use gnutls_x509_privkey_generate instead of
+     obsolete gnutls_rsa_params_generate2.
+
+Index: libaws-3.2.0/config/ssl/aws-net-ssl__gnutls.adb
+===================================================================
+--- libaws-3.2.0.orig/config/ssl/aws-net-ssl__gnutls.adb
++++ libaws-3.2.0/config/ssl/aws-net-ssl__gnutls.adb
+@@ -859,14 +859,14 @@ package body AWS.Net.SSL is
+          return;
+       end if;
+ 
+-      Check_Error_Code (TSSL.gnutls_rsa_params_init (New_One'Access));
++      Check_Error_Code (TSSL.gnutls_x509_privkey_init (New_One'Access));
+       Check_Error_Code
+-        (TSSL.gnutls_rsa_params_generate2
+-           (New_One,
++        (TSSL.gnutls_x509_privkey_generate
++           (New_One, TSSL.GNUTLS_PK_RSA,
+             TSSL.gnutls_sec_param_to_pk_bits
+-              (TSSL.GNUTLS_PK_RSA, TSSL.GNUTLS_SEC_PARAM_NORMAL)));
++              (TSSL.GNUTLS_PK_RSA, TSSL.GNUTLS_SEC_PARAM_NORMAL), 0));
+ 
+-      TSSL.gnutls_rsa_params_deinit (RSA_Params (1));
++      TSSL.gnutls_x509_privkey_deinit (RSA_Params (1));
+ 
+       RSA_Params (1) := RSA_Params (0);
+       RSA_Params (0) := New_One;
+Index: libaws-3.2.0/config/ssl/gnutls/wrappers.c
+===================================================================
+--- /dev/null
++++ libaws-3.2.0/config/ssl/gnutls/wrappers.c
+@@ -0,0 +1,46 @@
++/***************************************************************************
++ *                             Ada Web Server                              *
++ *                                                                         *
++ *                      Copyright (C) 2015, AdaCore                        *
++ *                                                                         *
++ * This library 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 2 of the License, or (at   *
++ * your option) any later version.                                         *
++ *                                                                         *
++ * This library 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 this library; if not, write to the Free Software Foundation, *
++ * Inc., 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.                                     *
++ ***************************************************************************/
++
++/* This wrappers is neccessary because the constants GNUTLS_SEC_PARAM_* 
changed
++ * in GNUTLS version 3.4. We could use this constants directly when decide to
++ * complete support of the GNUTLS versions earlier then 3.4.
++ */
++
++#include <gnutls/gnutls.h>
++#define AWS_EXPORT(c) extern const int _AWS_##c; \
++   const int _AWS_##c = c;
++
++AWS_EXPORT(GNUTLS_SEC_PARAM_INSECURE);
++AWS_EXPORT(GNUTLS_SEC_PARAM_EXPORT);
++AWS_EXPORT(GNUTLS_SEC_PARAM_VERY_WEAK);
++AWS_EXPORT(GNUTLS_SEC_PARAM_WEAK);
++AWS_EXPORT(GNUTLS_SEC_PARAM_UNKNOWN);
++AWS_EXPORT(GNUTLS_SEC_PARAM_LOW);
++AWS_EXPORT(GNUTLS_SEC_PARAM_LEGACY);
++AWS_EXPORT(GNUTLS_SEC_PARAM_NORMAL);
++AWS_EXPORT(GNUTLS_SEC_PARAM_HIGH);
++AWS_EXPORT(GNUTLS_SEC_PARAM_ULTRA);
+Index: libaws-3.2.0/config/ssl/ssl-thin__gnutls.ads
+===================================================================
+--- libaws-3.2.0.orig/config/ssl/ssl-thin__gnutls.ads
++++ libaws-3.2.0/config/ssl/ssl-thin__gnutls.ads
+@@ -335,29 +335,32 @@ package SSL.Thin is
+    GNUTLS_SIGN_RSA_MD2 : constant gnutls_sign_algorithm_t := 4;
+    GNUTLS_SIGN_UNKNOWN : constant gnutls_sign_algorithm_t := 255;
+ 
+-   type gnutls_sec_param_t is
+-     (GNUTLS_SEC_PARAM_INSECURE,
+-      GNUTLS_SEC_PARAM_EXPORT,
+-      GNUTLS_SEC_PARAM_VERY_WEAK,
+-      GNUTLS_SEC_PARAM_WEAK,
+-      GNUTLS_SEC_PARAM_UNKNOWN,
+-      GNUTLS_SEC_PARAM_LOW,
+-      GNUTLS_SEC_PARAM_LEGACY,
+-      GNUTLS_SEC_PARAM_NORMAL,
+-      GNUTLS_SEC_PARAM_HIGH,
+-      GNUTLS_SEC_PARAM_ULTRA);
+-   for gnutls_sec_param_t use
+-     (GNUTLS_SEC_PARAM_INSECURE  => -20,
+-      GNUTLS_SEC_PARAM_EXPORT    => -15,
+-      GNUTLS_SEC_PARAM_VERY_WEAK => -12,
+-      GNUTLS_SEC_PARAM_WEAK      => -10,
+-      GNUTLS_SEC_PARAM_UNKNOWN   => 0,
+-      GNUTLS_SEC_PARAM_LOW       => 1,
+-      GNUTLS_SEC_PARAM_LEGACY    => 2,
+-      GNUTLS_SEC_PARAM_NORMAL    => 3,
+-      GNUTLS_SEC_PARAM_HIGH      => 4,
+-      GNUTLS_SEC_PARAM_ULTRA     => 5);
+-   for gnutls_sec_param_t'Size use C.int'Size;
++   type gnutls_sec_param_t is new C.int;
++   GNUTLS_SEC_PARAM_UNKNOWN   : constant gnutls_sec_param_t with Import,
++      Convention => C, External_Name => "_AWS_GNUTLS_SEC_PARAM_UNKNOWN";
++   GNUTLS_SEC_PARAM_INSECURE  : constant gnutls_sec_param_t with Import,
++      Convention => C, External_Name => "_AWS_GNUTLS_SEC_PARAM_INSECURE";
++   GNUTLS_SEC_PARAM_EXPORT    : constant gnutls_sec_param_t with Import,
++      Convention => C, External_Name => "_AWS_GNUTLS_SEC_PARAM_EXPORT";
++   GNUTLS_SEC_PARAM_VERY_WEAK : constant gnutls_sec_param_t with Import,
++      Convention => C, External_Name => "_AWS_GNUTLS_SEC_PARAM_VERY_WEAK";
++   GNUTLS_SEC_PARAM_WEAK      : constant gnutls_sec_param_t with Import,
++      Convention => C, External_Name => "_AWS_GNUTLS_SEC_PARAM_WEAK";
++   GNUTLS_SEC_PARAM_LOW       : constant gnutls_sec_param_t with Import,
++      Convention => C, External_Name => "_AWS_GNUTLS_SEC_PARAM_LOW";
++   GNUTLS_SEC_PARAM_LEGACY    : constant gnutls_sec_param_t with Import,
++      Convention => C, External_Name => "_AWS_GNUTLS_SEC_PARAM_LEGACY";
++   GNUTLS_SEC_PARAM_MEDIUM    : constant gnutls_sec_param_t with Import,
++      Convention => C, External_Name => "_AWS_GNUTLS_SEC_PARAM_NORMAL";
++   --  MEDIUM parameter imported as NORMAL for compartibility with different
++   --  GNUTLS versions. MEDIUM appeared at GNUTLS version 3.3.
++   GNUTLS_SEC_PARAM_HIGH      : constant gnutls_sec_param_t with Import,
++      Convention => C, External_Name => "_AWS_GNUTLS_SEC_PARAM_HIGH";
++   GNUTLS_SEC_PARAM_ULTRA     : constant gnutls_sec_param_t with Import,
++      Convention => C, External_Name => "_AWS_GNUTLS_SEC_PARAM_ULTRA";
++
++   GNUTLS_SEC_PARAM_NORMAL : constant gnutls_sec_param_t :=
++      GNUTLS_SEC_PARAM_MEDIUM;
+ 
+    type gnutls_params_type_t is new C.int;
+    GNUTLS_PARAMS_RSA_EXPORT : constant gnutls_params_type_t := 1;
+@@ -384,7 +387,6 @@ package SSL.Thin is
+ 
+    type gnutls_session_t is access all STRUCT_DSTRUCT;
+    type gnutls_dh_params_t is access all STRUCT_DSTRUCT;
+-   type gnutls_rsa_params_t is access all STRUCT_DSTRUCT;
+    type gnutls_ecdh_params_t is access all STRUCT_DSTRUCT;
+    type gnutls_certificate_credentials_t is access all STRUCT_DSTRUCT;
+    type gnutls_anon_server_credentials_t is access all STRUCT_DSTRUCT;
+@@ -403,6 +405,7 @@ package SSL.Thin is
+    type gnutls_privkey_t is access all STRUCT_DSTRUCT;
+    type gnutls_priority_t is access all STRUCT_DSTRUCT;
+ 
++   subtype gnutls_rsa_params_t is gnutls_x509_privkey_t;
+    type gnutls_retr_st is record
+       cert_type  : gnutls_certificate_type_t;
+       cert_x509  : a_gnutls_x509_crt_t;
+@@ -951,11 +954,6 @@ package SSL.Thin is
+       p2  : gnutls_dh_params_t)
+      with Import, Convention => C;
+ 
+-   procedure gnutls_certificate_set_rsa_export_params
+-     (res        : gnutls_certificate_credentials_t;
+-      rsa_params : gnutls_rsa_params_t)
+-     with Import, Convention => C;
+-
+    procedure gnutls_certificate_set_verify_flags
+      (res   : gnutls_certificate_credentials_t;
+       flags : C.unsigned)
+@@ -1050,6 +1048,12 @@ package SSL.Thin is
+      (key : access gnutls_x509_privkey_t) return C.int
+      with Import, Convention => C;
+ 
++   function gnutls_x509_privkey_generate
++     (key   : gnutls_x509_privkey_t;
++      algo  : gnutls_pk_algorithm_t;
++      bits  : C.unsigned;
++      flags : C.unsigned) return C.int with Import, Convention => C;
++
+    procedure gnutls_x509_privkey_deinit (key : gnutls_x509_privkey_t)
+      with Import, Convention => C;
+ 
+@@ -1201,50 +1205,6 @@ package SSL.Thin is
+       src : gnutls_dh_params_t) return C.int
+      with Import, Convention => C;
+ 
+-   function gnutls_rsa_params_init
+-     (rsa_params : access gnutls_rsa_params_t) return C.int
+-     with Import, Convention => C;
+-
+-   procedure gnutls_rsa_params_deinit (rsa_params : gnutls_rsa_params_t)
+-     with Import, Convention => C;
+-
+-   function gnutls_rsa_params_cpy
+-     (dst : gnutls_rsa_params_t;
+-      src : gnutls_rsa_params_t) return C.int
+-     with Import, Convention => C;
+-
+-   function gnutls_rsa_params_import_raw
+-     (rsa_params : gnutls_rsa_params_t;
+-      m          : a_gnutls_datum_t;
+-      e          : a_gnutls_datum_t;
+-      d          : a_gnutls_datum_t;
+-      p          : a_gnutls_datum_t;
+-      q          : a_gnutls_datum_t;
+-      u          : a_gnutls_datum_t) return C.int
+-     with Import, Convention => C;
+-
+-   function gnutls_rsa_params_generate2
+-     (params : gnutls_rsa_params_t;
+-      bits   : C.unsigned) return C.int
+-     with Import, Convention => C;
+-
+-   function gnutls_rsa_params_export_raw
+-     (params : gnutls_rsa_params_t;
+-      m      : a_gnutls_datum_t;
+-      e      : a_gnutls_datum_t;
+-      d      : a_gnutls_datum_t;
+-      p      : a_gnutls_datum_t;
+-      q      : a_gnutls_datum_t;
+-      u      : a_gnutls_datum_t;
+-      bits   : access C.unsigned) return C.int
+-     with Import, Convention => C;
+-
+-   function gnutls_rsa_params_import_pkcs1
+-     (params       : gnutls_rsa_params_t;
+-      pkcs1_params : a_gnutls_datum_t;
+-      format       : gnutls_x509_crt_fmt_t) return C.int
+-     with Import, Convention => C;
+-
+    function gnutls_transport_get_ptr
+      (session : gnutls_session_t) return gnutls_transport_ptr_t
+      with Import, Convention => C;
+Index: libaws-3.2.0/ssl/ssl.gpr
+===================================================================
+--- libaws-3.2.0.orig/ssl/ssl.gpr
++++ libaws-3.2.0/ssl/ssl.gpr
+@@ -28,8 +28,8 @@ library project SSL is
+          for Languages use ("Ada", "Project file");
+          for Source_Dirs use (".", "../config/ssl");
+       when "gnutls" =>
+-         for Languages use ("Ada", "Project file");
+-         for Source_Dirs use (".", "../config/ssl");
++         for Languages use ("Ada", "Project file", "C");
++         for Source_Dirs use (".", "../config/ssl", "../config/ssl/gnutls");
+       when others =>
+          for Languages use ("Ada", "Project file", "C");
+          for Source_Dirs use (".", "../config/ssl", "../config/ssl/openssl");
diff -Nru libaws-3.2.0/debian/patches/series libaws-3.2.0/debian/patches/series
--- libaws-3.2.0/debian/patches/series  2014-10-06 21:20:44.000000000 +0000
+++ libaws-3.2.0/debian/patches/series  2016-01-29 22:08:33.000000000 +0000
@@ -4,6 +4,9 @@
 noisy_style_warnings.diff
 build_flags_doc_gen.diff
 
+gnutls3.4.diff
+gnutls3.4.4.diff
+
 # These patches may be useful if we ever attempt to use upstream build
 # system (see libaws-doc.TODO).
 # no_silent_makefile.diff
diff -Nru libaws-3.2.0/debian/rules libaws-3.2.0/debian/rules
--- libaws-3.2.0/debian/rules   2014-10-06 21:20:44.000000000 +0000
+++ libaws-3.2.0/debian/rules   2016-01-30 00:05:39.000000000 +0000
@@ -89,17 +89,20 @@
 ######################################################################
 # Compile C sources from config/ssl/openssl (currently, only
 # wrappers.c) as described in build_aws.gpr.
-AWS_C_SRC_DIR   := config/ssl/openssl
+ifeq ($(SSL),openssl)
+ AWS_C_SRC_DIR   := config/ssl/openssl
+else
+ AWS_C_SRC_DIR   := config/ssl/gnutls
+endif
 AWS_C_OBJ_DIR_D := debian/build_aws_obj_dynamic
 AWS_C_OBJ_DIR_S := debian/build_aws_obj_static
 AWS_C_SRCS   := $(wildcard $(AWS_C_SRC_DIR)/*.c)
 AWS_C_OBJS_D := $(patsubst 
$(AWS_C_SRC_DIR)/%.c,$(AWS_C_OBJ_DIR_D)/%.o,$(AWS_C_SRCS))
 AWS_C_OBJS_S := $(patsubst 
$(AWS_C_SRC_DIR)/%.c,$(AWS_C_OBJ_DIR_S)/%.o,$(AWS_C_SRCS))
 
-ifeq ($(SSL),openssl)
- build-aws-dynamic: $(AWS_C_OBJS_D)
- build-aws-static : $(AWS_C_OBJS_S)
-endif
+build-aws-dynamic: $(AWS_C_OBJS_D)
+build-aws-static : $(AWS_C_OBJS_S)
+
 $(AWS_C_OBJS_D): $(AWS_C_OBJ_DIR_D)/%.o: $(AWS_C_SRC_DIR)/%.c
        $(CC) -c -fPIC $(CFLAGS) $(CPPFLAGS) $< -o $@
 $(AWS_C_OBJS_S): $(AWS_C_OBJ_DIR_S)/%.o: $(AWS_C_SRC_DIR)/%.c

Reply via email to