From b424a57253aafe26c07a50fecfd2a61999b06475 Mon Sep 17 00:00:00 2001 From: Francois-Xavier Coudert Date: Thu, 17 Nov 2005 13:51:41 +0100 Subject: [PATCH] re PR fortran/20811 (gfortran include problem (regression from g77)) PR fortran/20811 * scanner.c (gfc_open_included_file): Add an extra include_cwd argument. Only include files in the current working directory if its value is true. * gfortran.h: Change prototype for gfc_open_included_file. (load_file): Don't search for include files in the current working directory. * options.c (gfc_post_options): Add the directory of the source file to the list of paths for included files. * module.c (gfc_use_module): Look for module files in the current directory. From-SVN: r107120 --- gcc/fortran/ChangeLog | 14 ++++++++++++++ gcc/fortran/gfortran.h | 2 +- gcc/fortran/module.c | 2 +- gcc/fortran/options.c | 17 +++++++++++++++++ gcc/fortran/scanner.c | 16 ++++++++++------ 5 files changed, 43 insertions(+), 8 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 7e22961..6ed025b 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,17 @@ +2005-11-17 Francois-Xavier Coudert + + PR fortran/20811 + * scanner.c (gfc_open_included_file): Add an extra include_cwd + argument. Only include files in the current working directory if + its value is true. + * gfortran.h: Change prototype for gfc_open_included_file. + (load_file): Don't search for include files in the current working + directory. + * options.c (gfc_post_options): Add the directory of the source file + to the list of paths for included files. + * module.c (gfc_use_module): Look for module files in the current + directory. + 2005-11-16 Alan Modra PR fortran/24096 diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index a0d0e8c..95794a5 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -1548,7 +1548,7 @@ void gfc_scanner_init_1 (void); void gfc_add_include_path (const char *); void gfc_release_include_path (void); -FILE *gfc_open_included_file (const char *); +FILE *gfc_open_included_file (const char *, bool); int gfc_at_end (void); int gfc_at_eof (void); diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c index 6f978aa..8f1ab73 100644 --- a/gcc/fortran/module.c +++ b/gcc/fortran/module.c @@ -3741,7 +3741,7 @@ gfc_use_module (void) strcpy (filename, module_name); strcat (filename, MODULE_EXTENSION); - module_fp = gfc_open_included_file (filename); + module_fp = gfc_open_included_file (filename, true); if (module_fp == NULL) gfc_fatal_error ("Can't open module file '%s' for reading at %C: %s", filename, strerror (errno)); diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c index ebce409..a39876b 100644 --- a/gcc/fortran/options.c +++ b/gcc/fortran/options.c @@ -172,6 +172,8 @@ bool gfc_post_options (const char **pfilename) { const char *filename = *pfilename; + char *source_path; + int i; /* Verify the input file name. */ if (!filename || strcmp (filename, "-") == 0) @@ -181,6 +183,21 @@ gfc_post_options (const char **pfilename) gfc_source_file = filename; + /* Adds the path where the source file is to the list of include files. */ + + i = strlen(gfc_source_file); + while (i > 0 && !IS_DIR_SEPARATOR(gfc_source_file[i])) + i--; + if (i != 0) + { + source_path = alloca (i + 1); + memcpy (source_path, gfc_source_file, i); + source_path[i] = 0; + gfc_add_include_path (source_path); + } + else + gfc_add_include_path ("."); + /* Decide which form the file will be read in as. */ if (gfc_option.source_form != FORM_UNKNOWN) diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c index 738e172..8835761 100644 --- a/gcc/fortran/scanner.c +++ b/gcc/fortran/scanner.c @@ -159,18 +159,22 @@ gfc_release_include_path (void) } /* Opens file for reading, searching through the include directories - given if necessary. */ + given if necessary. If the include_cwd argument is true, we try + to open the file in the current directory first. */ FILE * -gfc_open_included_file (const char *name) +gfc_open_included_file (const char *name, const bool include_cwd) { char *fullname; gfc_directorylist *p; FILE *f; - f = gfc_open_file (name); - if (f != NULL) - return f; + if (include_cwd) + { + f = gfc_open_file (name); + if (f != NULL) + return f; + } for (p = include_dirs; p; p = p->next) { @@ -1034,7 +1038,7 @@ load_file (const char *filename, bool initial) } else { - input = gfc_open_included_file (filename); + input = gfc_open_included_file (filename, false); if (input == NULL) { gfc_error_now ("Can't open included file '%s'", filename); -- 2.7.4