diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 7e22961c1db1046490adfb41f276d22ff0ed2756..6ed025bddd86758a5420c7141ce23d99ed071549 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,17 @@ +2005-11-17 Francois-Xavier Coudert <coudert@clipper.ens.fr> + + 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 <amodra@bigpond.net.au> PR fortran/24096 diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index a0d0e8c66951ba8c34bc0b1a1dc21ae809511daf..95794a5ca7bbe64eee485a6d5e6f8dbcaec86697 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 6f978aa293e1e610e2889daca2bf51c5145e8fe8..8f1ab7301f447f01b144adf282640f62bb5ec98d 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 ebce409ba94d3d923ba547b55c0575bfee92becc..a39876b80b5f48553d63d25d6ba96c85d95eee64 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 738e17280a0603c951cb7ae57ca87b37d28a14ce..883576166ffa6ad9bc953d7bdf590a45c2594c2b 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);