From: Mike Frysinger Date: Mon, 21 Feb 2022 04:30:39 +0000 (-0500) Subject: automake: allow required files to be in subdirs X-Git-Tag: v1.16i~107 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c62e723015d00ade6a37fcb91ca0f39c87868665;p=thirdparty%2Fautomake.git 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. --- 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 . + +# Make sure auxdir with subdir aux files works. +# https://bugs.gnu.org/20300 + +. test-init.sh + +cat > configure.ac <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 \