mirror of
https://github.com/openssl/openssl.git
synced 2024-11-23 10:03:32 +08:00
Configuration: produce include/openssl/configuration.h when configuring
The goal is to avoid having too much of the OpenSSL source rebuilt because include/openssl/configuration.h, or even because it was a Makefile target that was called upon (some make implementations consider the use of a target as an update of that target, even if it wasn't really updated). To resolve this, we move the production of include/openssl/configuration.h to configdata.pm, and only update it if there were any actual changes. Fixes #16377 Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Todd Short <todd.short@me.com> (Merged from https://github.com/openssl/openssl/pull/16378)
This commit is contained in:
parent
764cf5b263
commit
2522889620
@ -2854,8 +2854,11 @@ if (-f $configdata_outname) {
|
||||
# like nothing happened
|
||||
unlink "$configdata_outname.new";
|
||||
|
||||
# We still run configdata.pm if the build file (Makefile) is missing
|
||||
$run_configdata = !( -f $target{build_file} );
|
||||
# We still run configdata.pm if one of the build file (Makefile) or
|
||||
# the configuration header file are missing
|
||||
$run_configdata =
|
||||
!( -f $target{build_file} )
|
||||
|| !( -f catfile('include', 'openssl', 'configuration.h') );
|
||||
}
|
||||
} else {
|
||||
$update_configdata = 1;
|
||||
|
@ -22,7 +22,6 @@ DEPEND[]=include/openssl/asn1.h \
|
||||
include/openssl/cmp.h \
|
||||
include/openssl/cms.h \
|
||||
include/openssl/conf.h \
|
||||
include/openssl/configuration.h \
|
||||
include/openssl/crmf.h \
|
||||
include/openssl/crypto.h \
|
||||
include/openssl/ct.h \
|
||||
@ -49,7 +48,6 @@ GENERATE[include/openssl/bio.h]=include/openssl/bio.h.in
|
||||
GENERATE[include/openssl/cmp.h]=include/openssl/cmp.h.in
|
||||
GENERATE[include/openssl/cms.h]=include/openssl/cms.h.in
|
||||
GENERATE[include/openssl/conf.h]=include/openssl/conf.h.in
|
||||
GENERATE[include/openssl/configuration.h]=include/openssl/configuration.h.in
|
||||
GENERATE[include/openssl/crmf.h]=include/openssl/crmf.h.in
|
||||
GENERATE[include/openssl/crypto.h]=include/openssl/crypto.h.in
|
||||
GENERATE[include/openssl/ct.h]=include/openssl/ct.h.in
|
||||
|
@ -77,6 +77,7 @@ unless (caller) {
|
||||
use Getopt::Long;
|
||||
use File::Spec::Functions;
|
||||
use File::Basename;
|
||||
use File::Compare qw(compare_text);
|
||||
use File::Copy;
|
||||
use Pod::Usage;
|
||||
|
||||
@ -131,10 +132,11 @@ use lib '{- $config{builddir} -}';
|
||||
use platform;
|
||||
_____
|
||||
|
||||
my $tmpl;
|
||||
open BUILDFILE, ">$buildfile.new"
|
||||
or die "Trying to create $buildfile.new: $!";
|
||||
my $tmpl = OpenSSL::Template->new(TYPE => 'FILE',
|
||||
SOURCE => $buildfile_template);
|
||||
$tmpl = OpenSSL::Template->new(TYPE => 'FILE',
|
||||
SOURCE => $buildfile_template);
|
||||
$tmpl->fill_in(FILENAME => $_,
|
||||
OUTPUT => \*BUILDFILE,
|
||||
HASH => \%gendata,
|
||||
@ -149,6 +151,56 @@ _____
|
||||
or die "Trying to rename $buildfile.new to $buildfile: $!";
|
||||
print 'Created ',$buildfile,"\n";
|
||||
|
||||
my $configuration_h =
|
||||
catfile('include', 'openssl', 'configuration.h');
|
||||
my $configuration_h_in =
|
||||
catfile($config{sourcedir}, 'include', 'openssl', 'configuration.h.in');
|
||||
open CONFIGURATION_H, ">${configuration_h}.new"
|
||||
or die "Trying to create ${configuration_h}.new: $!";
|
||||
$tmpl = OpenSSL::Template->new(TYPE => 'FILE',
|
||||
SOURCE => $configuration_h_in);
|
||||
$tmpl->fill_in(FILENAME => $_,
|
||||
OUTPUT => \*CONFIGURATION_H,
|
||||
HASH => \%gendata,
|
||||
PREPEND => $prepend,
|
||||
# To ensure that global variables and functions
|
||||
# defined in one template stick around for the
|
||||
# next, making them combinable
|
||||
PACKAGE => 'OpenSSL::safe')
|
||||
or die $Text::Template::ERROR;
|
||||
close CONFIGURATION_H;
|
||||
|
||||
# When using stat() on Windows, we can get it to perform better by
|
||||
# avoid some data. This doesn't affect the mtime field, so we're not
|
||||
# losing anything...
|
||||
${^WIN32_SLOPPY_STAT} = 1;
|
||||
|
||||
my $update_configuration_h = 0;
|
||||
if (-f $configuration_h) {
|
||||
my $configuration_h_mtime = (stat($configuration_h))[9];
|
||||
my $configuration_h_in_mtime = (stat($configuration_h_in))[9];
|
||||
|
||||
# If configuration.h.in was updated after the last configuration.h,
|
||||
# or if configuration.h.new differs configuration.h, we update
|
||||
# configuration.h
|
||||
if ($configuration_h_mtime < $configuration_h_in_mtime
|
||||
|| compare_text("${configuration_h}.new", $configuration_h) != 0) {
|
||||
$update_configuration_h = 1;
|
||||
} else {
|
||||
# If nothing has changed, let's just drop the new one and
|
||||
# pretend like nothing happened
|
||||
unlink "${configuration_h}.new"
|
||||
}
|
||||
} else {
|
||||
$update_configuration_h = 1;
|
||||
}
|
||||
|
||||
if ($update_configuration_h) {
|
||||
rename("${configuration_h}.new", $configuration_h)
|
||||
or die "Trying to rename ${configuration_h}.new to $configuration_h: $!";
|
||||
print 'Created ',$configuration_h,"\n";
|
||||
}
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user