The change is OK, thanks.

> We suffer from an inconsistency in the names of uninstalled gnattools 
> executables in cross-compiler configurations.  The cause is a recipe we 
> have:
> 
> ada.all.cross:
>       for tool in $(ADA_TOOLS) ; do \
>         if [ -f $$tool$(exeext) ] ; \
>         then \
>           $(MV) $$tool$(exeext) $$tool-cross$(exeext); \
>         fi; \
>       done
> 
> the intent of which is to give the names of gnattools executables the 
> '-cross' suffix, consistently with the compiler drivers: 'gcc-cross', 
> 'g++-cross', etc.
> 
> A problem with the recipe is that this 'make' target is called too early 
> in the build process, before gnattools have been made.  Consequently no 
> renames happen and owing to that they are conditional on the presence of 
> the individual executables the recipe succeeds doing nothing.
> 
> However if a target is requested later on such as 'make pdf' that does 
> not cause gnattools executables to be rebuilt, then 'ada.all.cross' does 
> succeed in renaming the executables already present in the build tree.  
> Then if the 'gnat' testsuite is run later on which expects non-suffixed 
> 'gnatmake' executable, it does not find the 'gnatmake-cross' executable 
> in the build tree and may either catastrophically fail or incorrectly 
> use a system-installed copy of 'gnatmake'.
> 
> Of course if a target is requested such as `make all' that does cause 
> gnattools executables to be rebuilt, then both suffixed and non-suffixed 
> uninstalled executables result.
> 
> Fix the problem by moving the renaming of gnattools to a separate 'make' 
> recipe, pasted into a new 'gnattools-cross-mv' target and the existing 
> legacy 'cross-gnattools' target.  Then invoke the new target explicitly 
> from the 'gnattools-cross' recipe in gnattools/.
> 
> Update the test harness accordingly, so that suffixed gnattools are used 
> in cross-compilation testsuite runs.
> 
>       gcc/
>       * ada/gcc-interface/Make-lang.in (ada.all.cross): Move recipe 
>       to...
>       (GNATTOOLS_CROSS_MV): ... this new variable.
>       (cross-gnattools): Paste it here.
>       (gnattools-cross-mv): New target.
> 
>       gnattools/
>       * Makefile.in (gnattools-cross): Also build 'gnattools-cross-mv' 
>       in GCC_DIR.
> 
>       gcc/testsuite/
>       * lib/gnat.exp (local_find_gnatmake, find_gnatclean): Use 
>       '-cross' suffix where testing a cross-compiler.
> ---
>  gcc/ada/gcc-interface/Make-lang.in |   19 ++++++++++++-------
>  gcc/testsuite/lib/gnat.exp         |   22 ++++++++++++++++++----
>  gnattools/Makefile.in              |    1 +
>  3 files changed, 31 insertions(+), 11 deletions(-)
> 
> gcc-ada-all-cross-gnattools.diff
> Index: gcc/gcc/ada/gcc-interface/Make-lang.in
> ===================================================================
> --- gcc.orig/gcc/ada/gcc-interface/Make-lang.in
> +++ gcc/gcc/ada/gcc-interface/Make-lang.in
> @@ -780,6 +780,7 @@ gnattools: $(GCC_PARTS) $(CONFIG_H) pref
>  cross-gnattools: force
>       $(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools1-re
>       $(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools2
> +     $(GNATTOOLS_CROSS_MV)
>  
>  canadian-gnattools: force
>       $(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools1-re
> @@ -795,19 +796,23 @@ gnatlib gnatlib-sjlj gnatlib-zcx gnatlib
>          FORCE_DEBUG_ADAFLAGS="$(FORCE_DEBUG_ADAFLAGS)" \
>          $@
>  
> +gnattools-cross-mv:
> +     $(GNATTOOLS_CROSS_MV)
> +
> +GNATTOOLS_CROSS_MV=\
> +  for tool in $(ADA_TOOLS) ; do \
> +    if [ -f $$tool$(exeext) ] ; \
> +    then \
> +      $(MV) $$tool$(exeext) $$tool-cross$(exeext); \
> +    fi; \
> +  done
> +
>  # use only for native compiler
>  gnatlib_and_tools: gnatlib gnattools
>  
>  # Build hooks:
>  
>  ada.all.cross:
> -     for tool in $(ADA_TOOLS) ; do \
> -       if [ -f $$tool$(exeext) ] ; \
> -       then \
> -         $(MV) $$tool$(exeext) $$tool-cross$(exeext); \
> -       fi; \
> -     done
> -
>  ada.start.encap:
>  ada.rest.encap:
>  ada.man:
> Index: gcc/gcc/testsuite/lib/gnat.exp
> ===================================================================
> --- gcc.orig/gcc/testsuite/lib/gnat.exp
> +++ gcc/gcc/testsuite/lib/gnat.exp
> @@ -199,12 +199,19 @@ proc prune_gnat_output { text } {
>  # which prevent multilib from working, so define a new one.
>  
>  proc local_find_gnatmake {} {
> +    global target_triplet
>      global tool_root_dir
> +    global host_triplet
>  
>      if ![is_remote host] {
> -        set file [lookfor_file $tool_root_dir gnatmake]
> +     if { "$host_triplet" == "$target_triplet" } {
> +         set gnatmake gnatmake
> +     } else {
> +         set gnatmake gnatmake-cross
> +     }
> +     set file [lookfor_file $tool_root_dir $gnatmake]
>          if { $file == "" } {
> -         set file [lookfor_file $tool_root_dir gcc/gnatmake]
> +         set file [lookfor_file $tool_root_dir gcc/$gnatmake]
>          }
>          if { $file != "" } {
>           set root [file dirname $file]
> @@ -225,12 +232,19 @@ proc local_find_gnatmake {} {
>  }
>  
>  proc find_gnatclean {} {
> +    global target_triplet
>      global tool_root_dir
> +    global host_triplet
>  
>      if ![is_remote host] {
> -        set file [lookfor_file $tool_root_dir gnatclean]
> +     if { "$host_triplet" == "$target_triplet" } {
> +         set gnatclean gnatclean
> +     } else {
> +         set gnatclean gnatclean-cross
> +     }
> +     set file [lookfor_file $tool_root_dir $gnatclean]
>          if { $file == "" } {
> -         set file [lookfor_file $tool_root_dir gcc/gnatclean]
> +         set file [lookfor_file $tool_root_dir gcc/$gnatclean]
>          }
>          if { $file != "" } {
>           set gnatclean $file;
> Index: gcc/gnattools/Makefile.in
> ===================================================================
> --- gcc.orig/gnattools/Makefile.in
> +++ gcc/gnattools/Makefile.in
> @@ -223,6 +223,7 @@ gnattools-cross: $(GCC_DIR)/stamp-tools
>       # gnattools2
>       $(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
>         $(TOOLS_FLAGS_TO_PASS_CROSS) common-tools
> +     $(MAKE) -C $(GCC_DIR) gnattools-cross-mv
>  
>  # Other
>  # -----

Reply via email to