[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#879985: gcc-8: add support of ada back



Package: src:gcc-8
Version: 8-20171023-1

gcc-8 introduce a configuration option EH_MECHANISM for gnat.
Our previous patch for sjlj doesn't include this.
So the libada-sjlj failed to build.


The patch `gcc-8-gnat.diff' include:

1. sync the configure.ac/Makefile.in file in libada-sjlj from libada.
    the previous ones have be outdated.
2. The key point of the failure is:
      -      $(MAKE) $(FLAGS_TO_PASS) EH_MECHANISM="" RTSDIR="$(RTSDIR)" \
      +      $(MAKE) $(FLAGS_TO_PASS) EH_MECHANISM="-gcc" RTSDIR="$(RTSDIR)" \

   we need to pass EH_MECHANISM="-gcc".
   if note some adb/ads files will not be included.

3. re-enable `with_ada' and `with_gnatsjlj'


The diff file `sjlj.diff' is the difference of libada and libada-sjlj.
It is here just for reference, to help for the sync libada to libada-sjlj.

-- 
YunQiang Su
diff --git a/debian/patches/ada-sjlj.diff b/debian/patches/ada-sjlj.diff
index 1b50a03..32fde70 100644
--- a/debian/patches/ada-sjlj.diff
+++ b/debian/patches/ada-sjlj.diff
@@ -6,9 +6,9 @@ Index: b/src/libada-sjlj/Makefile.in
 ===================================================================
 --- /dev/null
 +++ b/src/libada-sjlj/Makefile.in
-@@ -0,0 +1,201 @@
+@@ -0,0 +1,203 @@
 +# Makefile for libada.
-+#   Copyright (C) 2003-2015 Free Software Foundation, Inc.
++#   Copyright (C) 2003-2017 Free Software Foundation, Inc.
 +#
 +# This file is free software; you can redistribute it and/or modify
 +# it under the terms of the GNU General Public License as published by
@@ -69,15 +69,15 @@ Index: b/src/libada-sjlj/Makefile.in
 +PICFLAG = @PICFLAG@
 +GNATLIBFLAGS= -W -Wall -gnatpg -nostdinc
 +GNATLIBCFLAGS= -g -O2
-+GNATLIBCFLAGS_FOR_C = -W -Wall $(GNATLIBCFLAGS) \
-+	-fexceptions -DIN_RTS @have_getipinfo@
++GNATLIBCFLAGS_FOR_C = -W -Wall $(GNATLIBCFLAGS) $(CFLAGS_FOR_TARGET) \
++	-fexceptions -DIN_RTS @have_getipinfo@ @have_capability@
 +
 +host_subdir = @host_subdir@
 +GCC_DIR=$(MULTIBUILDTOP)../../$(host_subdir)/gcc
 +
 +target_noncanonical:=@target_noncanonical@
-+gcc_version := $(shell @get_gcc_base_ver@ $(srcdir)/../gcc/BASE-VER)
-+libsubdir := $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)$(MULTISUBDIR)
++version := $(shell @get_gcc_base_ver@ $(srcdir)/../gcc/BASE-VER)
++libsubdir := $(libdir)/gcc/$(target_noncanonical)/$(version)$(MULTISUBDIR)
 +ADA_RTS_DIR=$(GCC_DIR)/ada/rts$(subst /,_,$(MULTISUBDIR))
 +ADA_RTS_SUBDIR=./rts$(subst /,_,$(MULTISUBDIR))
 +
@@ -87,10 +87,10 @@ Index: b/src/libada-sjlj/Makefile.in
 +# by recursive make invocations in gcc/ada/Makefile.in
 +LIBADA_FLAGS_TO_PASS = \
 +        "MAKEOVERRIDES=" \
-+        "LDFLAGS=$(LDFLAGS)" \
++        "LDFLAGS=$(LDFLAGS) -Wl,--as-needed -Wl,-z,defs" \
 +        "LN_S=$(LN_S)" \
 +        "SHELL=$(SHELL)" \
-+        "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS)" \
++        "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS) -gnatn" \
 +        "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS)" \
 +        "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS)" \
 +        "PICFLAG_FOR_TARGET=$(PICFLAG)" \
@@ -132,7 +132,7 @@ Index: b/src/libada-sjlj/Makefile.in
 +	$(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) ./bldtools/oscons/xoscons
 +
 +install-gnatlib: $(GCC_DIR)/ada/Makefile
-+	$(MAKE) -C $(GCC_DIR)/ada $(AM_MAKEFLAGS) $(LIBADA_FLAGS_TO_PASS) install-gnatlib-sjlj
++	$(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) install-gnatlib-sjlj
 +
 +# Check uninstalled version.
 +check:
@@ -199,8 +199,10 @@ Index: b/src/libada-sjlj/Makefile.in
 +configure_deps = \
 +	$(srcdir)/configure.ac \
 +	$(srcdir)/../config/acx.m4 \
++	$(srcdir)/../config/multi.m4 \
 +	$(srcdir)/../config/override.m4 \
-+	$(srcdir)/../config/multi.m4
++	$(srcdir)/../config/picflag.m4 \
++	$(srcdir)/../config/unwind_ipinfo.m4
 +
 +$(srcdir)/configure: @MAINT@ $(configure_deps)
 +	cd $(srcdir) && $(AUTOCONF)
@@ -212,9 +214,9 @@ Index: b/src/libada-sjlj/configure.ac
 ===================================================================
 --- /dev/null
 +++ b/src/libada-sjlj/configure.ac
-@@ -0,0 +1,152 @@
+@@ -0,0 +1,156 @@
 +# Configure script for libada.
-+#   Copyright (C) 2003-2016 Free Software Foundation, Inc.
++#   Copyright (C) 2003-2017 Free Software Foundation, Inc.
 +#
 +# This file is free software; you can redistribute it and/or modify it
 +# under the terms of the GNU General Public License as published by
@@ -341,12 +343,8 @@ Index: b/src/libada-sjlj/configure.ac
 +AC_PROG_AWK
 +AC_PROG_LN_S
 +
-+# Determine what GCC version number to use in filesystem paths.
-+GCC_BASE_VER
-+
 +# Determine what to build for 'gnatlib'
-+if test ${enable_shared} = yes ; then
-+  # Note that build=target is almost certainly the wrong test; FIXME
++if test ${enable_shared} = yes; then
 +  default_gnatlib_target="gnatlib-shared"
 +else
 +  default_gnatlib_target="gnatlib-plain"
@@ -355,11 +353,19 @@ Index: b/src/libada-sjlj/configure.ac
 +
 +# Check for _Unwind_GetIPInfo
 +GCC_CHECK_UNWIND_GETIPINFO
-+have_getipinfo=
 +if test x$have_unwind_getipinfo = xyes; then
 +  have_getipinfo=-DHAVE_GETIPINFO
++else
++  have_getipinfo=
 +fi
-+AC_SUBST(have_getipinfo)
++AC_SUBST([have_getipinfo])
++
++# Check for <sys/capability.h>
++AC_CHECK_HEADER([sys/capability.h], have_capability=-DHAVE_CAPABILITY, have_capability=)
++AC_SUBST([have_capability])
++
++# Determine what GCC version number to use in filesystem paths.
++GCC_BASE_VER
 +
 +# Output: create a Makefile.
 +AC_CONFIG_FILES([Makefile])
@@ -419,7 +425,7 @@ Index: b/src/gcc/ada/gcc-interface/Makefile.in
  
  # Link flags used to build gnat tools.  By default we prefer to statically
  # link with libgcc to avoid a dependency on shared libgcc (which is tricky
-@@ -2272,6 +2272,26 @@ install-gnatlib: ../stamp-gnatlib-$(RTSD
+@@ -2268,6 +2268,26 @@ install-gnatlib: ../stamp-gnatlib-$(RTSD
  	cd $(DESTDIR)$(ADA_INCLUDE_DIR); $(CHMOD) a-wx *.adb
  	cd $(DESTDIR)$(ADA_INCLUDE_DIR); $(CHMOD) a-wx *.ads
  
@@ -446,16 +452,16 @@ Index: b/src/gcc/ada/gcc-interface/Makefile.in
  ../stamp-gnatlib2-$(RTSDIR):
  	$(RM) $(RTSDIR)/s-*.ali
  	$(RM) $(RTSDIR)/s-*$(objext)
-@@ -2553,7 +2573,7 @@ gnatlib-shared:
+@@ -2549,7 +2569,7 @@ gnatlib-shared:
  # commenting the pragma instead of deleting the line, as the latter might
  # result in getting multiple blank lines, hence possible style check errors.
  gnatlib-sjlj:
 -	$(MAKE) $(FLAGS_TO_PASS) EH_MECHANISM="" \
-+	$(MAKE) $(FLAGS_TO_PASS) EH_MECHANISM="" RTSDIR="$(RTSDIR)" \
++	$(MAKE) $(FLAGS_TO_PASS) EH_MECHANISM="-gcc" RTSDIR="$(RTSDIR)" \
  	THREAD_KIND="$(THREAD_KIND)" ../stamp-gnatlib1-$(RTSDIR)
  	sed \
  	  -e 's/Frontend_Exceptions.*/Frontend_Exceptions       : constant Boolean := True;/' \
-@@ -2562,6 +2582,7 @@ gnatlib-sjlj:
+@@ -2558,6 +2578,7 @@ gnatlib-sjlj:
  	  $(RTSDIR)/system.ads > $(RTSDIR)/s.ads
  	$(MV) $(RTSDIR)/s.ads $(RTSDIR)/system.ads
  	$(MAKE) $(FLAGS_TO_PASS) \
@@ -463,7 +469,7 @@ Index: b/src/gcc/ada/gcc-interface/Makefile.in
  	     EH_MECHANISM="" \
  	     GNATLIBFLAGS="$(GNATLIBFLAGS)" \
  	     GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
-@@ -2613,6 +2634,8 @@ b_gnatm.o : b_gnatm.adb
+@@ -2609,6 +2630,8 @@ b_gnatm.o : b_gnatm.adb
  
  ADA_INCLUDE_DIR = $(libsubdir)/adainclude
  ADA_RTL_OBJ_DIR = $(libsubdir)/adalib
@@ -491,7 +497,7 @@ Index: b/src/gcc/ada/gcc-interface/Make-lang.in
 ===================================================================
 --- a/src/gcc/ada/gcc-interface/Make-lang.in
 +++ b/src/gcc/ada/gcc-interface/Make-lang.in
-@@ -844,6 +844,7 @@ ada.install-common:
+@@ -846,6 +846,7 @@ ada.install-common:
  
  install-gnatlib:
  	$(MAKE) -C ada $(COMMON_FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) install-gnatlib$(LIBGNAT_TARGET)
diff --git a/debian/rules.defs b/debian/rules.defs
index bc1a0a5..e5a9741 100644
--- a/debian/rules.defs
+++ b/debian/rules.defs
@@ -700,7 +700,7 @@ ifeq ($(DEB_STAGE)-$(filter libgnat, $(with_rtlibs)),rtlibs-)
   with_ada := disabled for rtlibs stage
 endif
 
-with_ada := not yet built for GCC 8
+with_ada := yes
 
 #ifneq ($(single_package),yes)
 #  with_separate_gnat := yes
@@ -733,7 +733,7 @@ endif
 ifeq ($(with_ada),yes)
   enabled_languages += ada
   with_libgnat := yes
-  # FIXME for GCC 8: with_gnatsjlj := yes
+  with_gnatsjlj := yes
 endif
 
 # C++ -------------------------
diff -urN src/libada/Makefile.in src/libada-sjlj/Makefile.in
--- src/libada/Makefile.in	2017-10-27 19:27:35.617024083 +0800
+++ src/libada-sjlj/Makefile.in	2017-10-27 19:27:35.773030900 +0800
@@ -94,11 +94,12 @@
         "exeext=.exeext.should.not.be.used " \
 	'CC=the.host.compiler.should.not.be.needed' \
 	"GCC_FOR_TARGET=$(CC)" \
-        "CFLAGS=$(CFLAGS)"
+        "CFLAGS=$(CFLAGS)" \
+	"RTSDIR=rts-sjlj"
 
 # Rules to build gnatlib.
 .PHONY: gnatlib gnatlib-plain gnatlib-sjlj gnatlib-zcx gnatlib-shared osconstool
-gnatlib: @default_gnatlib_target@
+gnatlib: gnatlib-sjlj
 
 gnatlib-plain: osconstool $(GCC_DIR)/ada/Makefile
 	test -f stamp-libada || \
@@ -112,7 +113,7 @@
 gnatlib-sjlj gnatlib-zcx gnatlib-shared: osconstool $(GCC_DIR)/ada/Makefile
 	test -f stamp-libada || \
 	$(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) $@ \
-	&& touch stamp-libada
+	&& touch stamp-libada-sjlj
 	-rm -rf adainclude
 	-rm -rf adalib
 	$(LN_S_RECURSIVE) $(ADA_RTS_DIR) adainclude
@@ -122,7 +123,7 @@
 	$(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) ./bldtools/oscons/xoscons
 
 install-gnatlib: $(GCC_DIR)/ada/Makefile
-	$(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) install-gnatlib
+	$(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) install-gnatlib-sjlj
 
 # Check uninstalled version.
 check:

Reply to: