diff options
author | Mike Frysinger <vapier@gentoo.org> | 2023-01-11 22:07:22 -0500 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2023-01-12 20:25:57 -0500 |
commit | 55f8fcfd08cbf15d65d61dd2db934b6c3171cf06 (patch) | |
tree | 7a41c1aa5852bdd04e44d7e54065951db1a0228c /bin | |
parent | 054b02ce444c6c65dc5cfa68e67741ce43e76b1b (diff) | |
download | automake-55f8fcfd08cbf15d65d61dd2db934b6c3171cf06.tar.gz |
dirstamp: switch to a pattern rule
We can leverage $(@D) to generate a single pattern rule for all dirstamp
rules. This saves many lines in the output -- normally we create 2 rules
(or 6 lines) per subdir, and projects that use subdirs tend to use them
quite a bit.
In the most extreme & unlikely case (1 subdir, no depdir support), the
line count is the same. In every other case, it's always a win.
Looking at a few real world projects, the line deltas:
* GNU libgloss: +3 -66
* GNU newlib: +3 -714
* GNU sim: +3 -138
There shouldn't be any concerns about portability with $(@D) because:
(0) This has been in POSIX (and beyond) for decades,
(1) We only generate this rule iff we know the dirstamp is in a subdir
(so we'd never have a case where $(@D) would expand to the cwd, and
that is where a few implementations are known to be buggy),
(2) We already rely on $(@D) in our depdir code, and have since 2014
(the Automake 1.16 release).
Diffstat (limited to 'bin')
-rw-r--r-- | bin/automake.in | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/bin/automake.in b/bin/automake.in index 1c13a3187..139d5ad93 100644 --- a/bin/automake.in +++ b/bin/automake.in @@ -7893,6 +7893,14 @@ sub require_build_directory $directory_map{$directory} = $dirstamp; $directory_map{$cdir} = $dirstamp; + # Generate the pattern rule only once. + if (! vardef ('am__dirstamp', TRUE)) + { + $output_rules .= ("%/\$(am__dirstamp):\n" + . "\t\@\$(MKDIR_P) \$(\@D)\n" + . "\t\@: >>\$\@\n"); + } + # Set a variable for the dirstamp basename. define_pretty_variable ('am__dirstamp', TRUE, INTERNAL, '$(am__leading_dot)dirstamp'); @@ -7900,10 +7908,6 @@ sub require_build_directory # Directory must be removed by 'make distclean'. $clean_files{$dirstamp} = DIST_CLEAN; - $output_rules .= ("$dirstamp:\n" - . "\t\@\$(MKDIR_P) $directory\n" - . "\t\@: >>$dirstamp\n"); - return $dirstamp; } |