mirror of
https://git.savannah.gnu.org/git/make.git
synced 2024-12-27 06:27:51 +00:00
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:
parent
539f513773
commit
be6a8bc869
5 changed files with 89 additions and 23 deletions
|
@ -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
17
main.c
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue