mirror of
https://git.savannah.gnu.org/git/make.git
synced 2024-11-24 12:19:02 +00:00
[SV 63516] [DOS] Support include files with drivespecs
* src/makeint.h (HAVE_DRIVESPEC): Create a macro to check. * src/main.c (.FEATURES): Add "dospaths" as a feature. * src/read.c (eval_makefile) [DOS]: If the included makefile name starts with a drivespec, don't search the include directories. * doc/make.texi (Include): Document this behavior. * tests/scripts/features/include: Add a test.
This commit is contained in:
parent
c0023150f1
commit
5d1b757517
5 changed files with 39 additions and 16 deletions
|
@ -1279,19 +1279,16 @@ makefile as has been traditionally done with other versions of
|
|||
@findex /usr/gnu/include
|
||||
@findex /usr/local/include
|
||||
@findex /usr/include
|
||||
If the specified name does not start with a slash, and the file is not
|
||||
found in the current directory, several other directories are searched.
|
||||
If the specified name does not start with a slash (or a drive letter and colon
|
||||
when GNU Make is compiled with MS-DOS / MS-Windows path support), and the file
|
||||
is not found in the current directory, several other directories are searched.
|
||||
First, any directories you have specified with the @samp{-I} or
|
||||
@samp{--include-dir} options are searched
|
||||
(@pxref{Options Summary, ,Summary of Options}).
|
||||
Then the following directories (if they exist)
|
||||
are searched, in this order:
|
||||
@file{@var{prefix}/include} (normally @file{/usr/local/include}
|
||||
@samp{--include-dir} options are searched (@pxref{Options Summary, ,Summary of
|
||||
Options}). Then the following directories (if they exist) are searched, in
|
||||
this order: @file{@var{prefix}/include} (normally @file{/usr/local/include}
|
||||
@footnote{GNU Make compiled for MS-DOS and MS-Windows behaves as if
|
||||
@var{prefix} has been defined to be the root of the DJGPP tree
|
||||
hierarchy.})
|
||||
@file{/usr/gnu/include},
|
||||
@file{/usr/local/include}, @file{/usr/include}.
|
||||
@var{prefix} has been defined to be the root of the DJGPP tree hierarchy.})
|
||||
@file{/usr/gnu/include}, @file{/usr/local/include}, @file{/usr/include}.
|
||||
|
||||
The @code{.INCLUDE_DIRS} variable will contain the current list of
|
||||
directories that make will search for included files. @xref{Special
|
||||
|
|
|
@ -1455,6 +1455,9 @@ main (int argc, char **argv, char **envp)
|
|||
#ifdef MAKE_LOAD
|
||||
" load"
|
||||
#endif
|
||||
#ifdef HAVE_DOS_PATHS
|
||||
" dospaths"
|
||||
#endif
|
||||
#ifdef MAKE_MAINTAINER_MODE
|
||||
" maintainer"
|
||||
#endif
|
||||
|
|
|
@ -414,6 +414,7 @@ extern int unixy_shell;
|
|||
#define NONE_SET(_v,_m) (! ANY_SET ((_v),(_m)))
|
||||
#define ALL_SET(_v,_m) (((_v)&(_m)) == (_m))
|
||||
|
||||
/* Bitmasks for the STOPCHAR array. */
|
||||
#define MAP_NUL 0x0001
|
||||
#define MAP_BLANK 0x0002 /* space, TAB */
|
||||
#define MAP_NEWLINE 0x0004
|
||||
|
@ -463,14 +464,13 @@ extern int unixy_shell;
|
|||
# define MAP_PATHSEP MAP_SEMI
|
||||
#elif PATH_SEPARATOR_CHAR == ','
|
||||
# define MAP_PATHSEP MAP_COMMA
|
||||
|
||||
#else
|
||||
# error "Unknown PATH_SEPARATOR_CHAR"
|
||||
#endif
|
||||
|
||||
#define STOP_SET(_v,_m) ANY_SET(stopchar_map[(unsigned char)(_v)],(_m))
|
||||
|
||||
/* True if C is a directory separator on the current system. */
|
||||
#define ISDIRSEP(c) STOP_SET((c),MAP_DIRSEP)
|
||||
/* True if C is whitespace but not newline. */
|
||||
#define ISBLANK(c) STOP_SET((c),MAP_BLANK)
|
||||
/* True if C is whitespace including newlines. */
|
||||
|
@ -480,6 +480,18 @@ extern int unixy_shell;
|
|||
/* Move S past all whitespace (including newlines). */
|
||||
#define NEXT_TOKEN(s) while (ISSPACE (*(s))) ++(s)
|
||||
|
||||
/* True if C is a directory separator on the current system. */
|
||||
#define ISDIRSEP(c) STOP_SET((c),MAP_DIRSEP)
|
||||
|
||||
/* True if S starts with a drive specifier. */
|
||||
#if defined(HAVE_DOS_PATHS)
|
||||
# define HAS_DRIVESPEC(_s) ((((_s)[0] >= 'a' && (_s)[0] <= 'z') \
|
||||
|| ((_s)[0] >= 'A' && (_s)[0] <= 'Z')) \
|
||||
&& (_s)[1] == ':')
|
||||
#else
|
||||
# define HAS_DRIVESPEC(_s) 0
|
||||
#endif
|
||||
|
||||
/* We can't run setrlimit when using posix_spawn. */
|
||||
#if defined(HAVE_SYS_RESOURCE_H) && defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT) && !defined(USE_POSIX_SPAWN)
|
||||
# define SET_STACK_SIZE
|
||||
|
|
|
@ -373,8 +373,9 @@ eval_makefile (const char *filename, unsigned short flags)
|
|||
/* If the makefile wasn't found and it's either a makefile from the
|
||||
'MAKEFILES' variable or an included makefile, search the included
|
||||
makefile search path for this makefile. */
|
||||
if (ebuf.fp == NULL && deps->error == ENOENT && (flags & RM_INCLUDED)
|
||||
&& *filename != '/' && include_directories)
|
||||
if (ebuf.fp == NULL && deps->error == ENOENT && include_directories
|
||||
&& ANY_SET (flags, RM_INCLUDED)
|
||||
&& !HAS_DRIVESPEC (filename) && !ISDIRSEP (*filename))
|
||||
{
|
||||
const char **dir;
|
||||
for (dir = include_directories; *dir != NULL; ++dir)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# -*-mode: perl; rm-trailing-spaces: nil-*-
|
||||
# -*-mode: perl-*-
|
||||
|
||||
$description = "Test various forms of the GNU make 'include' command.";
|
||||
|
||||
|
@ -462,4 +462,14 @@ run_make_with_options(undef, ['-E', '%:;@echo $@', '-E', 'all:;', '-E', '-includ
|
|||
$answer = "bizbaz\nbazbiz\nfoobar\nbarfoo\n$defaults\n#MAKE#: 'all' is up to date.\n";
|
||||
&compare_output(subst_make_string($answer), &get_logfile(1));
|
||||
|
||||
# SV 63516
|
||||
if (exists $FEATURES{'dospaths'}) {
|
||||
run_make_test(q!
|
||||
include C:__foobar
|
||||
%bar: ; @echo $@
|
||||
all: ;
|
||||
!,
|
||||
'', "C:__foobar\n#MAKE#: 'all' is up to date.");
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
Loading…
Reference in a new issue