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: