mirror of https://github.com/openssl/openssl
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
|
# like nothing happened
|
||||||
unlink "$configdata_outname.new";
|
unlink "$configdata_outname.new";
|
||||||
|
|
||||||
# We still run configdata.pm if the build file (Makefile) is missing
|
# We still run configdata.pm if one of the build file (Makefile) or
|
||||||
$run_configdata = !( -f $target{build_file} );
|
# the configuration header file are missing
|
||||||
|
$run_configdata =
|
||||||
|
!( -f $target{build_file} )
|
||||||
|
|| !( -f catfile('include', 'openssl', 'configuration.h') );
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$update_configdata = 1;
|
$update_configdata = 1;
|
||||||
|
|
|
@ -22,7 +22,6 @@ DEPEND[]=include/openssl/asn1.h \
|
||||||
include/openssl/cmp.h \
|
include/openssl/cmp.h \
|
||||||
include/openssl/cms.h \
|
include/openssl/cms.h \
|
||||||
include/openssl/conf.h \
|
include/openssl/conf.h \
|
||||||
include/openssl/configuration.h \
|
|
||||||
include/openssl/crmf.h \
|
include/openssl/crmf.h \
|
||||||
include/openssl/crypto.h \
|
include/openssl/crypto.h \
|
||||||
include/openssl/ct.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/cmp.h]=include/openssl/cmp.h.in
|
||||||
GENERATE[include/openssl/cms.h]=include/openssl/cms.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/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/crmf.h]=include/openssl/crmf.h.in
|
||||||
GENERATE[include/openssl/crypto.h]=include/openssl/crypto.h.in
|
GENERATE[include/openssl/crypto.h]=include/openssl/crypto.h.in
|
||||||
GENERATE[include/openssl/ct.h]=include/openssl/ct.h.in
|
GENERATE[include/openssl/ct.h]=include/openssl/ct.h.in
|
||||||
|
|
|
@ -77,6 +77,7 @@ unless (caller) {
|
||||||
use Getopt::Long;
|
use Getopt::Long;
|
||||||
use File::Spec::Functions;
|
use File::Spec::Functions;
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
|
use File::Compare qw(compare_text);
|
||||||
use File::Copy;
|
use File::Copy;
|
||||||
use Pod::Usage;
|
use Pod::Usage;
|
||||||
|
|
||||||
|
@ -131,10 +132,11 @@ use lib '{- $config{builddir} -}';
|
||||||
use platform;
|
use platform;
|
||||||
_____
|
_____
|
||||||
|
|
||||||
|
my $tmpl;
|
||||||
open BUILDFILE, ">$buildfile.new"
|
open BUILDFILE, ">$buildfile.new"
|
||||||
or die "Trying to create $buildfile.new: $!";
|
or die "Trying to create $buildfile.new: $!";
|
||||||
my $tmpl = OpenSSL::Template->new(TYPE => 'FILE',
|
$tmpl = OpenSSL::Template->new(TYPE => 'FILE',
|
||||||
SOURCE => $buildfile_template);
|
SOURCE => $buildfile_template);
|
||||||
$tmpl->fill_in(FILENAME => $_,
|
$tmpl->fill_in(FILENAME => $_,
|
||||||
OUTPUT => \*BUILDFILE,
|
OUTPUT => \*BUILDFILE,
|
||||||
HASH => \%gendata,
|
HASH => \%gendata,
|
||||||
|
@ -149,6 +151,56 @@ _____
|
||||||
or die "Trying to rename $buildfile.new to $buildfile: $!";
|
or die "Trying to rename $buildfile.new to $buildfile: $!";
|
||||||
print 'Created ',$buildfile,"\n";
|
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);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue