Configure: Add read_eval_file, a general purpose perl file reader/evaluator
authorRichard Levitte <levitte@openssl.org>
Fri, 1 Dec 2017 14:29:05 +0000 (15:29 +0100)
committerRichard Levitte <levitte@openssl.org>
Tue, 12 Dec 2017 16:18:07 +0000 (17:18 +0100)
It will return the last expression from the input file.

We also use this in read_config, which slightly changes what's
expected of Configurations/*.conf.  They do not have to assign
%targets specifically.  On the other hand, the table of configs MUST
be the last expression in each of those files.

Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/4840)

Configurations/00-base-templates.conf
Configurations/10-main.conf
Configurations/50-djgpp.conf
Configurations/50-haiku.conf
Configurations/50-masm.conf
Configurations/90-team.conf
Configure

index f2d7f6aade1153293ecc6ace8deef71f7ccf8b60..ce59fbf2963e7da57e8a9f412907a79de06416d2 100644 (file)
@@ -1,5 +1,5 @@
 # -*- Mode: perl -*-
-%targets=(
+my %targets=(
     DEFAULTS => {
        template        => 1,
 
index 28cfd30021d83b8e5f442c1cb60841e8555c98d4..0b07e81fd8a516d20f83e63cf97293af13a0d46f 100644 (file)
@@ -144,7 +144,7 @@ sub vms_info {
     return $vms_info;
 }
 
-%targets = (
+my %targets = (
 
 #### Basic configs that should work on any 32-bit box
     "gcc" => {
index f532bd16f779a6b054a297ba0341cb02c817dce8..fa8e6625d8539fee82891c8f21bd79440c586b6d 100644 (file)
@@ -2,7 +2,7 @@
 # and rely entirely on the OpenSSL community to help is fine
 # tune and test.
 
-%targets = (
+my %targets = (
     "DJGPP" => {
         inherit_from     => [ asm("x86_asm") ],
         cc               => "gcc",
index aea5b2b5cb94766493ef135724317e6dbe33a5ca..b57e14871060ee7d19cb2121308051468e7cf11a 100644 (file)
@@ -1,4 +1,4 @@
-%targets = (
+my %targets = (
     "haiku-common" => {
         template         => 1,
         cc               => "cc",
index 0ec5e95084bf72f5879ea410db22d0996f036cd0..e2b54e345c8bf78264ac8df395e82e03691708a8 100644 (file)
@@ -7,7 +7,7 @@
 # proven to be daunting task. This is experimental target, for
 # production builds stick with [up-to-date version of] nasm.
 
-%targets = (
+my %targets = (
     "VC-WIN64A-masm" => {
         inherit_from    => [ "VC-WIN64-common", asm("x86_64_asm"),
                              sub { $disabled{shared} ? () : "x86_64_uplink" } ],
index beb6ad866152b4af96756c5733da59a823552b2e..4d57f3fe2f02c5e65d298e89b0aaa74d66fb9ff6 100644 (file)
@@ -1,7 +1,7 @@
 ## -*- mode: perl; -*-
 ## Build configuration targets for openssl-team members
 
-%targets = (
+my %targets = (
     "purify" => {
         cc               => "purify gcc",
         cflags           => "-g -Wall",
index db191213ad58d0a5a00e7f541699fa3bfe4d1aa8..2c601ad41aa03b2fed8c52941e02ef4e9c7752b8 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -2292,25 +2292,38 @@ sub add {
     sub { _add($separator, @_, @x) };
 }
 
+sub read_eval_file {
+    my $fname = shift;
+    my $content;
+    my @result;
+
+    open F, "< $fname" or die "Can't open '$fname': $!\n";
+    {
+        undef local $/;
+        $content = <F>;
+    }
+    close F;
+    {
+        local $@;
+
+        @result = ( eval $content );
+        warn $@ if $@;
+    }
+    return wantarray ? @result : $result[0];
+}
+
 # configuration reader, evaluates the input file as a perl script and expects
 # it to fill %targets with target configurations.  Those are then added to
 # %table.
 sub read_config {
     my $fname = shift;
-    open(CONFFILE, "< $fname")
-       or die "Can't open configuration file '$fname'!\n";
-    my $x = $/;
-    undef $/;
-    my $content = <CONFFILE>;
-    $/ = $x;
-    close(CONFFILE);
-    my %targets = ();
+    my %targets;
+
     {
        # Protect certain tables from tampering
-       local %table = %::table;
+       local %table = ();
 
-       eval $content;
-       warn $@ if $@;
+       %targets = read_eval_file($fname);
     }
 
     # For each target, check that it's configured with a hash table.