summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xConfigure7
-rw-r--r--build.info2
-rw-r--r--configdata.pm.in56
3 files changed, 59 insertions, 6 deletions
diff --git a/Configure b/Configure
index 648fc0694e..1992f907aa 100755
--- a/Configure
+++ b/Configure
@@ -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;
diff --git a/build.info b/build.info
index a70d1671f2..881dc907b5 100644
--- a/build.info
+++ b/build.info
@@ -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
diff --git a/configdata.pm.in b/configdata.pm.in
index cdaea868c1..840e23b6c1 100644
--- a/configdata.pm.in
+++ b/configdata.pm.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);
}