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. --- bin/automake.in | 7 +++++++ t/auxdir-subsubdir.sh | 39 +++++++++++++++++++++++++++++++++++++++ t/list-of-tests.mk | 1 + 3 files changed, 47 insertions(+) create mode 100644 t/auxdir-subsubdir.sh diff --git a/bin/automake.in b/bin/automake.in index 5a151455019e..5eba649d240c 100644 --- a/bin/automake.in +++ b/bin/automake.in @@ -7628,6 +7628,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 000000000000..21880f23591f --- /dev/null +++ b/t/auxdir-subsubdir.sh @@ -0,0 +1,39 @@ +#! /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. + +. 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 d8e50b080166..85de422193a0 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 \ -- 2.34.1