Fix bug #10252: Remove any trailing slashes from -C arguments (WINDOWS32).

Add a regression test for "@" before a define/enddef vs. one inside.
This commit is contained in:
Paul Smith 2004-11-29 01:35:13 +00:00
parent 539f513773
commit be6a8bc869
5 changed files with 89 additions and 23 deletions

View file

@ -1,5 +1,8 @@
2004-11-28 Paul D. Smith <psmith@gnu.org>
* main.c (main) [WINDOWS32]: Remove any trailing slashes from -C
arguments. Fixes bug #10252.
Fix for bug #1276: Handle SHELL according to POSIX requirements.
* main.c (main): Set SHELL to v_noexport by default. Remember the

17
main.c
View file

@ -1273,16 +1273,27 @@ main (int argc, char **argv, char **envp)
for (i = 0; directories->list[i] != 0; ++i)
{
char *dir = directories->list[i];
char *expanded = 0;
if (dir[0] == '~')
{
char *expanded = tilde_expand (dir);
expanded = tilde_expand (dir);
if (expanded != 0)
dir = expanded;
}
#ifdef WINDOWS32
/* WINDOWS32 chdir() doesn't work if the directory has a trailing '/'
But allow -C/ just in case someone wants that. */
{
char *p = dir + strlen (dir) - 1;
while (p > dir && (p[0] == '/' || p[0] == '\\'))
--p;
p[1] = '\0';
}
#endif
if (chdir (dir) < 0)
pfatal_with_name (dir);
if (dir != directories->list[i])
free (dir);
if (expanded)
free (expanded);
}
#ifdef WINDOWS32

View file

@ -1,5 +1,8 @@
2004-11-28 Paul D. Smith <psmith@gnu.org>
* scripts/options/dash-C [WINDOWS32]: Add a test for bug #10252;
this doesn't really test anything useful in UNIX but...
* scripts/variables/SHELL: New file: test proper handling of SHELL
according to POSIX rules. Fixes bug #1276.

View file

@ -1,28 +1,24 @@
$description = "The following test creates a makefile to test the -C dir \n"
."option in make. This option tells make to change to \n"
."directory dir before reading the makefile.";
# -*-perl-*-
$details = "This test is similar to the clean test except that this test\n"
."creates the file to delete in the work directory instead of\n"
."the current directory. Make is called from another directory\n"
."using the -C workdir option so that it can both find the \n"
."makefile and the file to delete in the work directory. ";
$description = "Test the -C option to GNU make.";
$example = $workdir . $pathsep . "EXAMPLE_FILE";
$details = "\
This test is similar to the clean test except that this test creates the file
to delete in the work directory instead of the current directory. Make is
called from another directory using the -C workdir option so that it can both
find the makefile and the file to delete in the work directory.";
$example = $workdir . $pathsep . "EXAMPLE";
open(MAKEFILE,"> $makefile");
# The Contents of the MAKEFILE ...
print MAKEFILE "all: \n";
print MAKEFILE "\t\@echo This makefile did not clean the dir ... good\n";
print MAKEFILE "clean: \n";
print MAKEFILE "\t$delete_command EXAMPLE_FILE\n";
# END of Contents of MAKEFILE
print MAKEFILE <<EOF;
all: ; \@echo This makefile did not clean the dir ... good
clean: ; $delete_command EXAMPLE\$(ext)
EOF
close(MAKEFILE);
# TEST #1
# -------
&touch($example);
&run_make_with_options("${testname}.mk",
@ -39,7 +35,35 @@ if (-f $example) {
# Create the answer to what should be produced by this Makefile
$answer = "$make_name: Entering directory `$wpath'\n"
. "$delete_command EXAMPLE_FILE\n"
. "$delete_command EXAMPLE\n"
. "$make_name: Leaving directory `$wpath'\n";
&compare_output($answer,&get_logfile(1));
# TEST #2
# -------
# Do it again with trailing "/"; this should work the same
$example .= "slash";
&touch($example);
&run_make_with_options("${testname}.mk",
"-C $workdir/ clean ext=slash",
&get_logfile);
chdir $workdir;
$wpath = &get_this_pwd;
chdir $pwd;
if (-f $example) {
$test_passed = 0;
}
# Create the answer to what should be produced by this Makefile
$answer = "$make_name: Entering directory `$wpath'\n"
. "$delete_command EXAMPLEslash\n"
. "$make_name: Leaving directory `$wpath'\n";
&compare_output($answer,&get_logfile(1));

View file

@ -155,4 +155,29 @@ world');
run_make_test(undef, 'V1=@ V2=@', 'hello
world');
# TEST #10
# -------
# Test the basics; a "@" internally to the variable applies to only one line.
# A "@" before the variable applies to the entire variable.
run_make_test('
define FOO
@echo hello
echo world
endef
define BAR
echo hello
echo world
endef
all: foo bar
foo: ; $(FOO)
bar: ; @$(BAR)
', '', 'hello
echo world
world
hello
world
');
1;