gfortran: Fix in-build-tree testing [PR101305, PR101660]
authorTobias Burnus <tobias@codesourcery.com>
Tue, 10 Aug 2021 15:26:32 +0000 (17:26 +0200)
committerTobias Burnus <tobias@codesourcery.com>
Tue, 10 Aug 2021 15:26:32 +0000 (17:26 +0200)
ISO_Fortran_binding.h is written in the build dir - hence, a previous commit
added it as include directory for in-build-tree testing.  However,
it turned out that -I$specdir/libgfortran interferes with reading .mod files
as they are then no longer regareded as intrinsic modules.  Solution: Create
an extra include/ directory in the libgfortran build dir and copy
ISO_Fortran_binding.h to that directory.  As -B$specdir/libgfortran already
causes gfortran to read that include subdirectory, the -I flag is no longer
needed.

PR libfortran/101305
PR fortran/101660
PR testsuite/101847

libgfortran/ChangeLog:

* Makefile.am (ISO_Fortran_binding.h): Create include/ in the build dir
and copy the include file to it.
(clean-local): Add for removing the 'include' directory.
* Makefile.in: Regenerate.

gcc/testsuite/ChangeLog:

* lib/gfortran.exp (gfortran_init): Remove -I$specpath/libgfortran
from the string used to set GFORTRAN_UNDER_TEST.

gcc/testsuite/lib/gfortran.exp
libgfortran/Makefile.am
libgfortran/Makefile.in

index cae6738..43f4d4e 100644 (file)
@@ -184,7 +184,7 @@ proc gfortran_init { args } {
                    set specpath [get_multilibs]
                }
                set gfortran_init_set_GFORTRAN_UNDER_TEST 1
-               set GFORTRAN_UNDER_TEST [findfile $base_dir/../../gfortran "$base_dir/../../gfortran -B$base_dir/../../ -B$specpath/libgfortran/ -I$specpath/libgfortran" [findfile $base_dir/gfortran "$base_dir/gfortran -B$base_dir/" [transform gfortran]]]
+               set GFORTRAN_UNDER_TEST [findfile $base_dir/../../gfortran "$base_dir/../../gfortran -B$base_dir/../../ -B$specpath/libgfortran/" [findfile $base_dir/gfortran "$base_dir/gfortran -B$base_dir/" [transform gfortran]]]
            }
        }
     }
index 3546a3f..8d10432 100644 (file)
@@ -1076,6 +1076,9 @@ fpu-target.inc: fpu-target.h $(srcdir)/libgfortran.h
        grep '^#define GFC_FPE_' < $(top_srcdir)/../gcc/fortran/libgfortran.h > $@ || true
        grep '^#define GFC_FPE_' < $(srcdir)/libgfortran.h >> $@ || true
 
+# Place ISO_Fortran_binding.h also under include/ in the build directory such
+# that it can be used for in-built-tree testsuite runs without interference of
+# other files in the build dir - like intrinsic .mod files or other .h files.
 ISO_Fortran_binding.h: $(srcdir)/ISO_Fortran_binding-1-tmpl.h \
                       $(srcdir)/ISO_Fortran_binding-2-tmpl.h \
                       $(srcdir)/ISO_Fortran_binding-3-tmpl.h \
@@ -1085,6 +1088,9 @@ ISO_Fortran_binding.h: $(srcdir)/ISO_Fortran_binding-1-tmpl.h \
        $(COMPILE) -E -dD $(srcdir)/ISO_Fortran_binding-2-tmpl.h \
        | grep '^#define CFI_type' >> $@
        cat $(srcdir)/ISO_Fortran_binding-3-tmpl.h >> $@
+       $(MKDIR_P) include
+       -rm -f include/ISO_Fortran_binding.h
+       cp $@ include/ISO_Fortran_binding.h
 
 ## A 'normal' build shouldn't need to regenerate these
 ## so we only include them in maintainer mode
@@ -1245,6 +1251,9 @@ $(gfor_misc_specifics): m4/misc_specifics.m4 m4/head.m4
 ## end of maintainer mode only rules
 endif
 
+clean-local:
+       -rm -rf include
+
 EXTRA_DIST = $(m4_files)
 
 # target overrides
index a7d8e11..afe1ed1 100644 (file)
@@ -698,7 +698,6 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
-runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -7042,6 +7041,9 @@ fpu-target.inc: fpu-target.h $(srcdir)/libgfortran.h
        grep '^#define GFC_FPE_' < $(top_srcdir)/../gcc/fortran/libgfortran.h > $@ || true
        grep '^#define GFC_FPE_' < $(srcdir)/libgfortran.h >> $@ || true
 
+# Place ISO_Fortran_binding.h also under include/ in the build directory such
+# that it can be used for in-built-tree testsuite runs without interference of
+# other files in the build dir - like intrinsic .mod files or other .h files.
 ISO_Fortran_binding.h: $(srcdir)/ISO_Fortran_binding-1-tmpl.h \
                       $(srcdir)/ISO_Fortran_binding-2-tmpl.h \
                       $(srcdir)/ISO_Fortran_binding-3-tmpl.h \
@@ -7051,6 +7053,9 @@ ISO_Fortran_binding.h: $(srcdir)/ISO_Fortran_binding-1-tmpl.h \
        $(COMPILE) -E -dD $(srcdir)/ISO_Fortran_binding-2-tmpl.h \
        | grep '^#define CFI_type' >> $@
        cat $(srcdir)/ISO_Fortran_binding-3-tmpl.h >> $@
+       $(MKDIR_P) include
+       -rm -f include/ISO_Fortran_binding.h
+       cp $@ include/ISO_Fortran_binding.h
 
 @MAINTAINER_MODE_TRUE@$(i_all_c): m4/all.m4 $(I_M4_DEPS2)
 @MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 all.m4 > $@
@@ -7205,6 +7210,9 @@ ISO_Fortran_binding.h: $(srcdir)/ISO_Fortran_binding-1-tmpl.h \
 @MAINTAINER_MODE_TRUE@$(gfor_misc_specifics): m4/misc_specifics.m4 m4/head.m4
 @MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 misc_specifics.m4 > $@
 
+clean-local:
+       -rm -rf include
+
 # target overrides
 -include $(tmake_file)