diff options
author | Mike Frysinger <vapier@gentoo.org> | 2022-02-20 23:30:39 -0500 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2022-02-23 23:31:09 -0500 |
commit | c62e723015d00ade6a37fcb91ca0f39c87868665 (patch) | |
tree | 767f262ac4236db1f63bbc2ad4586b7b0bd42cb5 | |
parent | 13ae585a0184a4c0113fd4f3a19a0cedf1cfe5c2 (diff) | |
download | automake-c62e723015d00ade6a37fcb91ca0f39c87868665.tar.gz |
automake: allow required files to be in subdirs
Fixes automake bug https://bugs.gnu.org/20300.
The internal method for caching path lookups expects the $filename to
only be a filename. If it's actually a subdir/file itself, then the
cache logic gets confused, and it never matches. This manifests as
AC_REQUIRE_AUX_FILE([subdir/file]) claiming that the subdir/file path
doesn't exist even when it does.
Before we process any required files, since we already construct the
full path locally, reset the dir & file inputs to the final values.
* bin/automake.in: Split dir & file name back out from the constructed
required file path.
* t/auxdir-subsubdir.sh: New test.
* t/list-of-tests.mk: Add t/auxdir-subsubdir.sh.
-rw-r--r-- | bin/automake.in | 7 | ||||
-rw-r--r-- | t/auxdir-subsubdir.sh | 40 | ||||
-rw-r--r-- | t/list-of-tests.mk | 1 |
3 files changed, 48 insertions, 0 deletions
diff --git a/bin/automake.in b/bin/automake.in index 6d5588402..9747510f9 100644 --- a/bin/automake.in +++ b/bin/automake.in @@ -7623,6 +7623,13 @@ sub required_file_check_or_copy my ($where, $dir, $file) = @_; my $fullfile = "$dir/$file"; + # In cases where $file is actually a subdir/filename, split the full path back + # into dir & file names. The FileUtils (e.g. dir_has_case_matching_file) do + # not handle this scenario at all and expect $file to only be a filename. + # https://bugs.gnu.org/20300 + $dir = dirname ($fullfile); + $file = basename ($fullfile); + my $found_it = 0; my $dangling_sym = 0; diff --git a/t/auxdir-subsubdir.sh b/t/auxdir-subsubdir.sh new file mode 100644 index 000000000..18132ec4c --- /dev/null +++ b/t/auxdir-subsubdir.sh @@ -0,0 +1,40 @@ +#! /bin/sh +# Copyright (C) 2022 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +# Make sure auxdir with subdir aux files works. +# https://bugs.gnu.org/20300 + +. test-init.sh + +cat > configure.ac <<END +AC_INIT([$me], [1.0]) +AC_CONFIG_AUX_DIR([build-aux]) +AC_REQUIRE_AUX_FILE([top-file]) +AC_REQUIRE_AUX_FILE([subdir/file]) +AM_INIT_AUTOMAKE +AC_CONFIG_FILES(Makefile) +END + +touch Makefile.am + +mkdir -p build-aux/subdir +: >build-aux/top-file +: >build-aux/subdir/file + +$ACLOCAL +$AUTOMAKE --add-missing + +: diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk index 6bb6bef95..d959b68db 100644 --- a/t/list-of-tests.mk +++ b/t/list-of-tests.mk @@ -188,6 +188,7 @@ t/auxdir-computed.tap \ t/auxdir-misplaced.sh \ t/auxdir-nonexistent.sh \ t/auxdir-pr19311.sh \ +t/auxdir-subsubdir.sh \ t/auxdir-unportable.tap \ t/backcompat.sh \ t/backcompat2.sh \ |