mirror of
https://github.com/postgres/postgres.git
synced 2025-05-25 00:04:05 -04:00
Avoid overwriting unchanged output files in genbki.pl and Gen_fmgrtab.pl.
If a particular output file already exists with the contents it should have, leave it alone, so that its mod timestamp is not advanced. In builds using --enable-depend, this can avoid the need to recompile .c files whose included files didn't actually change. It's not clear whether it saves much of anything for users of ccache; but the cost of doing the file comparisons seems to be negligible, so we might as well do it. For developers using the MSVC toolchain, this will create a regression: msvc/Solution.pm will sometimes run genbki.pl or Gen_fmgrtab.pl unnecessarily. I'll look into fixing that separately. Discussion: https://postgr.es/m/16925.1525376229@sss.pgh.pa.us
This commit is contained in:
parent
9bf28f96c7
commit
1f1cd9b5dd
@ -16,6 +16,9 @@ package Catalog;
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
|
use File::Compare;
|
||||||
|
|
||||||
|
|
||||||
# Parses a catalog header file into a data structure describing the schema
|
# Parses a catalog header file into a data structure describing the schema
|
||||||
# of the catalog.
|
# of the catalog.
|
||||||
sub ParseHeader
|
sub ParseHeader
|
||||||
@ -336,15 +339,29 @@ sub AddDefaultValues
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Rename temporary files to final names.
|
# Rename temporary files to final names.
|
||||||
# Call this function with the final file name and the .tmp extension
|
# Call this function with the final file name and the .tmp extension.
|
||||||
|
#
|
||||||
|
# If the final file already exists and has identical contents, don't
|
||||||
|
# overwrite it; this behavior avoids unnecessary recompiles due to
|
||||||
|
# updating the mod date on unchanged header files.
|
||||||
|
#
|
||||||
# Note: recommended extension is ".tmp$$", so that parallel make steps
|
# Note: recommended extension is ".tmp$$", so that parallel make steps
|
||||||
# can't use the same temp files
|
# can't use the same temp files.
|
||||||
sub RenameTempFile
|
sub RenameTempFile
|
||||||
{
|
{
|
||||||
my $final_name = shift;
|
my $final_name = shift;
|
||||||
my $extension = shift;
|
my $extension = shift;
|
||||||
my $temp_name = $final_name . $extension;
|
my $temp_name = $final_name . $extension;
|
||||||
rename($temp_name, $final_name) || die "rename: $temp_name: $!";
|
|
||||||
|
if (-f $final_name
|
||||||
|
&& compare($temp_name, $final_name) == 0)
|
||||||
|
{
|
||||||
|
unlink $temp_name || die "unlink: $temp_name: $!";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rename($temp_name, $final_name) || die "rename: $temp_name: $!";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Find a symbol defined in a particular header file and extract the value.
|
# Find a symbol defined in a particular header file and extract the value.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user