Paul Smith c59cc4f932 [SV 64185] Clarify handling of directive lines starting with TAB
It's clear that this change causes too many problems to be made
without warning.  Revert the change disallowing conditional lines to
start with TAB.

Instead, generate warnings whenever a directive line begins with a
TAB character.  Make this change for all directives, not just
conditional directives: define, undefine, export, unexport, vpath,
load, include, etc.

* NEWS: Update the backward-compatibility warning.
* src/read.c (eval): Track whether the line starts with a TAB.
If so then whenever we recognize a directive, emit a warning.
Revert the previous change for this bug.
(parse_var_assignment): Accept a file location if the line begins
with TAB; show a warning if we discover a directive.
(conditional_line): Warn about lines starting with TAB.
* tests/scripts/...: Add tests to verify warnings for initial TAB.
2025-08-26 08:13:55 -04:00

125 lines
3.0 KiB
Perl

# -*-perl-*-
$description = "Test vpath for particular classes of filenames.";
$details = "";
mkdir('work');
@files_to_touch = ("work${pathsep}main.c","work${pathsep}defs.h",
"work${pathsep}kbd.c","work${pathsep}command.h",
"work${pathsep}commands.c","work${pathsep}display.c",
"work${pathsep}buffer.h","work${pathsep}insert.c",
"work${pathsep}command.c");
&touch(@files_to_touch);
run_make_test(q!
vpath %.c foo
vpath %.c work
vpath %.h work
objects = main.o kbd.o commands.o display.o insert.o
edit: $(objects) ; @echo cc -o $@ $^
main.o : main.c defs.h ; @echo cc -c $(firstword $^)
kbd.o : kbd.c defs.h command.h ; @echo cc -c kbd.c
commands.o : command.c defs.h command.h ; @echo cc -c commands.c
display.o : display.c defs.h buffer.h ; @echo cc -c display.c
insert.o : insert.c defs.h buffer.h ; @echo cc -c insert.c
!,
'', "cc -c work${pathsep}main.c\ncc -c kbd.c\ncc -c commands.c\n"
."cc -c display.c\ncc -c insert.c\n"
."cc -o edit main.o kbd.o commands.o display.o insert.o\n");
unlink(@files_to_touch);
# TEST 2: after vpath lookup ensure we don't get incorrect circular dependency
# warnings due to change of struct file ptr. Savannah bug #13529.
mkdir('vpath-d', 0777);
run_make_test(q!
vpath %.te vpath-d/
.SECONDARY:
default: vpath-d/a vpath-d/b
vpath-d/a: fail.te
vpath-d/b : fail.te
vpath-d/fail.te:
!,
'', "#MAKE#: Nothing to be done for 'default'.\n");
rmdir('vpath-d');
# Test VPATH vs vpath
run_make_test(q!
VPATH = work:#PWD#
vpath %.c foo
vpath %.c work
vpath %.c #PWD#
vpath %.h work
vpath %.c
vpath
all: ; @echo ALL IS WELL
!,
'', "ALL IS WELL\n");
# Test interaction of -lfoo and vpath
my @dirs_to_make = qw(a1 b1 a2 b2 b3);
for my $d (@dirs_to_make) {
mkdir($d, 0777);
}
my @files_to_touch = ("a1${pathsep}lib1.a",
"a1${pathsep}libc.a",
"b1${pathsep}lib1.so",
"a2${pathsep}lib2.a",
"b2${pathsep}lib2.so",
"lib3.a",
"b3${pathsep}lib3.so");
&touch(@files_to_touch);
my $answer = "a1${pathsep}lib1.a a1${pathsep}libc.a " .
"a2${pathsep}lib2.a lib3.a\n";
if ($port_type eq 'VMS-DCL') {
$answer =~ s/ /,/g;
}
run_make_test('
vpath %.h b3
vpath %.a a1
vpath %.so b1
vpath % a2 b2
vpath % b3
all: -l1 -lc -l2 -l3; @echo $^
',
'', $answer);
unlink(@files_to_touch);
for my $d (@dirs_to_make) {
rmdir($d);
}
# Check that if we find find files with VPATH, we don't do pattern search
mkdir("vpa");
run_make_test(q!
VPATH = vpa
%.x: ; @echo pattern $@
vpa/foo.x: ; @echo vpath $@
!,
'foo.x', "vpath vpa/foo.x\n");
rmdir("vpa");
# Validate that vpath indented with TAB gives a warning
run_make_test(q!
#TAB#vpath %.h b3
all:;@echo hi
!,
'', "#MAKEFILE#:2: warning: vpath directive lines cannot start with TAB\nhi");
1;