diff mbox

[Ada] Convert Ada front-end to automatic dependencies

Message ID ydd4n88ujw2.fsf@lokon.CeBiTec.Uni-Bielefeld.DE
State New
Headers show

Commit Message

Rainer Orth Oct. 23, 2013, 2:44 p.m. UTC
Eric Botcazou <ebotcazou@adacore.com> writes:

> This finally converts the Ada front-end.
>
> Tested on x86_64-suse-linux, applied on the mainline.
>
>
> 2013-10-13  Nicolas Roche  <roche@adacore.com>
>             Eric Botcazou  <ebotcazou@adacore.com>
>
> 	* gcc-interface/Make-lang.in (ada/%.o): Replace individual rules with
> 	generic rule and add $(POSTCOMPILE).
> 	(ADA_DEPS): New.
> 	(.adb.o): Add @$(ADA_DEPS).
> 	(.ads.o): Likewise.
> 	(ada/a-except.o): Likewise.
> 	(ada/s-excdeb.): Likewise.
> 	(ada/s-assert.o): Likewise.
> 	(ada/a-tags.o): Likewise.
> 	(ada_generated_files): New variable.
> 	Use them as dependency order for GNAT1_ADA_OBJS and GNATBIND_OBJS.
> 	(ADA_DEPFILES): New variable.
> 	Include them.
> 	(ada_OBJS): Define.

This patch broke Solaris Ada bootstrap with SHELL=/bin/ksh on Solaris 10
and 11:

gcc -c -g   -gnatpg -gnatwns -gnata -W -Wall -nostdinc -I- -I. -Iada -I/vol/gcc/src/hg/trunk/local/gcc/ada -I/vol/gcc/src/hg/trunk/local/gcc/ada/gcc-interface /vol/gcc/src/hg/trunk/local/gcc/ada/ada.ads -o ada/ada.o
sed: -e expression #1, char 1: unterminated `s' command
ada/ada.o: 
/bin/ksh: ^D:  not found
/bin/ksh: ada/1:  not found
/bin/ksh: : cannot execute
/bin/ksh: gp | tr -d '\015' | tr '\n' ' ':  not found
make: *** [ada/ada.o] Error 127

If you have make print the commands in ADA_DEPS, you see

case ada/ada.o in *sdefault.o);; *)a="`echo ada/ada.o | sed -e 's/.o$/.ali/'`"; echo "ada/ada.o: `cat $a | sed -ne "s;^D \([a-z0-9_\.-]*\).*;ada/\1;gp" | tr -d '\015' | tr '\n' ' '`" > ada//.deps/ada.Po;; esac;

So this boils down to

case ada/ada.o in
  *sdefault.o)
    ;;
  *)
    a="`echo ada/ada.o | sed -e 's/.o$/.ali/'`"; \
    echo "ada/ada.o: `cat $a | sed -ne "s;^D \([a-z0-9_\.-]*\).*;ada/\1;gp" | tr -d '\015' | tr '\n' ' '`" > ada//.deps/ada.Po
    ;;
esac;

Obviously /bin/ksh (both the old ksh88 in Solaris 10 and ksh93 in
Solaris 11) interpret the echo line as

echo "ada/ada.o: `cat $a | sed -ne "s;
^D \([a-z0-9_\.-]*\).*;
ada/\1;
gp" | tr -d '\015' | tr '\n' ' '`" > ada//.deps/ada.Po

The following trivial patch avoids this and allows the
i386-pc-solaris2.1[01] and sparc-sun-solaris2.11 bootstraps to finish.

Ok for mainline?

	Rainer


2013-10-23  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	* gcc-interface/Make-lang.in (ADA_DEPS): Fix quoting.

Comments

Eric Botcazou Oct. 23, 2013, 5:24 p.m. UTC | #1
> The following trivial patch avoids this and allows the
> i386-pc-solaris2.1[01] and sparc-sun-solaris2.11 bootstraps to finish.
> 
> Ok for mainline?

Sure, thanks for fixing this.
diff mbox

Patch

diff --git a/gcc/ada/gcc-interface/Make-lang.in b/gcc/ada/gcc-interface/Make-lang.in
--- a/gcc/ada/gcc-interface/Make-lang.in
+++ b/gcc/ada/gcc-interface/Make-lang.in
@@ -110,7 +110,7 @@  ADA_DEPS=case $@ in \
             *sdefault.o);; \
             *)a="`echo $@ | sed -e 's/.o$$/.ali/'`"; \
                 echo "$@: `cat $$a | \
-                sed -ne "s;^D \([a-z0-9_\.-]*\).*;ada/\1;gp" | \
+                sed -ne 's;^D \([a-z0-9_\.-]*\).*;ada/\1;gp' | \
                 tr -d '\015' | tr '\n' ' '`" > $(dir $@)/$(DEPDIR)/$(patsubst %.o,%.Po,$(notdir $@));; \
          esac;