2016-04-20 02:10:43 +00:00
|
|
|
#! /usr/bin/env perl
|
2017-01-11 21:38:44 +00:00
|
|
|
# Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved.
|
2016-04-20 02:10:43 +00:00
|
|
|
#
|
|
|
|
# Licensed under the OpenSSL license (the "License"). You may not use
|
|
|
|
# this file except in compliance with the License. You can obtain a copy
|
|
|
|
# in the file LICENSE in the source distribution or at
|
|
|
|
# https://www.openssl.org/source/license.html
|
|
|
|
|
1998-12-21 10:52:47 +00:00
|
|
|
#
|
|
|
|
# generate a .def file
|
|
|
|
#
|
|
|
|
# It does this by parsing the header files and looking for the
|
1999-04-26 00:23:10 +00:00
|
|
|
# prototyped functions: it then prunes the output.
|
1998-12-21 10:52:47 +00:00
|
|
|
#
|
2016-03-03 11:42:01 +00:00
|
|
|
# Intermediary files are created, call libcrypto.num and libssl.num,
|
2015-02-06 15:45:29 +00:00
|
|
|
# The format of these files is:
|
2000-09-07 08:43:08 +00:00
|
|
|
#
|
2015-12-14 09:22:58 +00:00
|
|
|
# routine-name nnnn vers info
|
2000-09-07 08:43:08 +00:00
|
|
|
#
|
2015-12-14 09:22:58 +00:00
|
|
|
# The "nnnn" and "vers" fields are the numeric id and version for the symbol
|
|
|
|
# respectively. The "info" part is actually a colon-separated string of fields
|
|
|
|
# with the following meaning:
|
2000-09-07 08:43:08 +00:00
|
|
|
#
|
|
|
|
# existence:platform:kind:algorithms
|
|
|
|
#
|
|
|
|
# - "existence" can be "EXIST" or "NOEXIST" depending on if the symbol is
|
2016-10-10 16:01:24 +00:00
|
|
|
# found somewhere in the source,
|
2000-09-07 08:43:08 +00:00
|
|
|
# - "platforms" is empty if it exists on all platforms, otherwise it contains
|
|
|
|
# comma-separated list of the platform, just as they are if the symbol exists
|
|
|
|
# for those platforms, or prepended with a "!" if not. This helps resolve
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
# symbol name variants for platforms where the names are too long for the
|
2000-09-07 08:43:08 +00:00
|
|
|
# compiler or linker, or if the systems is case insensitive and there is a
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
# clash, or the symbol is implemented differently (see
|
|
|
|
# EXPORT_VAR_AS_FUNCTION). This script assumes renaming of symbols is found
|
|
|
|
# in the file crypto/symhacks.h.
|
|
|
|
# The semantics for the platforms is that every item is checked against the
|
2002-07-10 17:34:54 +00:00
|
|
|
# environment. For the negative items ("!FOO"), if any of them is false
|
|
|
|
# (i.e. "FOO" is true) in the environment, the corresponding symbol can't be
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
# used. For the positive itms, if all of them are false in the environment,
|
|
|
|
# the corresponding symbol can't be used. Any combination of positive and
|
|
|
|
# negative items are possible, and of course leave room for some redundancy.
|
2000-09-07 08:43:08 +00:00
|
|
|
# - "kind" is "FUNCTION" or "VARIABLE". The meaning of that is obvious.
|
|
|
|
# - "algorithms" is a comma-separated list of algorithm names. This helps
|
|
|
|
# exclude symbols that are part of an algorithm that some user wants to
|
|
|
|
# exclude.
|
|
|
|
#
|
1998-12-21 10:52:47 +00:00
|
|
|
|
2016-01-11 23:17:12 +00:00
|
|
|
use lib ".";
|
|
|
|
use configdata;
|
2016-01-29 23:03:58 +00:00
|
|
|
use File::Spec::Functions;
|
2016-01-11 23:17:12 +00:00
|
|
|
|
2001-02-21 14:12:03 +00:00
|
|
|
my $debug=0;
|
|
|
|
|
2016-03-03 11:42:01 +00:00
|
|
|
my $crypto_num= catfile($config{sourcedir},"util","libcrypto.num");
|
|
|
|
my $ssl_num= catfile($config{sourcedir},"util","libssl.num");
|
2002-07-17 13:27:43 +00:00
|
|
|
my $libname;
|
1998-12-21 10:52:47 +00:00
|
|
|
|
1999-04-26 00:23:10 +00:00
|
|
|
my $do_update = 0;
|
2001-05-13 04:48:07 +00:00
|
|
|
my $do_rewrite = 1;
|
1999-04-26 00:23:10 +00:00
|
|
|
my $do_crypto = 0;
|
|
|
|
my $do_ssl = 0;
|
2000-01-07 03:17:47 +00:00
|
|
|
my $do_ctest = 0;
|
2000-08-17 21:26:22 +00:00
|
|
|
my $do_ctestall = 0;
|
2001-02-09 13:16:21 +00:00
|
|
|
my $do_checkexist = 0;
|
1999-04-26 00:23:10 +00:00
|
|
|
|
2000-09-07 08:43:08 +00:00
|
|
|
my $VMS=0;
|
|
|
|
my $W32=0;
|
2000-01-07 03:17:47 +00:00
|
|
|
my $NT=0;
|
2015-12-14 09:22:58 +00:00
|
|
|
my $linux=0;
|
1999-04-14 23:44:41 +00:00
|
|
|
# Set this to make typesafe STACK definitions appear in DEF
|
2000-06-01 05:13:52 +00:00
|
|
|
my $safe_stack_def = 0;
|
1999-05-13 10:28:14 +00:00
|
|
|
|
2014-12-20 02:11:09 +00:00
|
|
|
my @known_platforms = ( "__FreeBSD__", "PERL5",
|
2016-06-26 11:40:15 +00:00
|
|
|
"EXPORT_VAR_AS_FUNCTION", "ZLIB", "_WIN32"
|
2015-12-14 20:24:27 +00:00
|
|
|
);
|
2015-01-12 22:29:26 +00:00
|
|
|
my @known_ossl_platforms = ( "VMS", "WIN32", "WINNT", "OS2" );
|
2000-09-07 08:43:08 +00:00
|
|
|
my @known_algorithms = ( "RC2", "RC4", "RC5", "IDEA", "DES", "BF",
|
2000-12-29 00:05:14 +00:00
|
|
|
"CAST", "MD2", "MD4", "MD5", "SHA", "SHA0", "SHA1",
|
2015-02-04 23:50:00 +00:00
|
|
|
"SHA256", "SHA512", "RMD160",
|
2015-10-27 20:18:42 +00:00
|
|
|
"MDC2", "WHIRLPOOL", "RSA", "DSA", "DH", "EC", "EC2M",
|
2017-02-01 00:10:13 +00:00
|
|
|
"HMAC", "AES", "CAMELLIA", "SEED", "GOST", "ARIA",
|
2016-03-09 22:08:31 +00:00
|
|
|
"SCRYPT", "CHACHA", "POLY1305", "BLAKE2",
|
2017-01-11 21:38:44 +00:00
|
|
|
"SIPHASH",
|
2011-10-19 08:59:53 +00:00
|
|
|
# EC_NISTP_64_GCC_128
|
|
|
|
"EC_NISTP_64_GCC_128",
|
2000-12-29 00:05:14 +00:00
|
|
|
# Envelope "algorithms"
|
|
|
|
"EVP", "X509", "ASN1_TYPEDEFS",
|
|
|
|
# Helper "algorithms"
|
|
|
|
"BIO", "COMP", "BUFFER", "LHASH", "STACK", "ERR",
|
|
|
|
"LOCKING",
|
|
|
|
# External "algorithms"
|
2015-05-12 11:14:13 +00:00
|
|
|
"FP_API", "STDIO", "SOCK", "DGRAM",
|
2016-01-08 02:40:52 +00:00
|
|
|
"CRYPTO_MDEBUG",
|
2002-10-24 19:09:03 +00:00
|
|
|
# Engines
|
2015-09-09 19:29:44 +00:00
|
|
|
"STATIC_ENGINE", "ENGINE", "HW", "GMP",
|
2016-01-13 00:02:16 +00:00
|
|
|
# Entropy Gathering
|
|
|
|
"EGD",
|
2016-02-25 18:11:16 +00:00
|
|
|
# Certificate Transparency
|
|
|
|
"CT",
|
2015-07-23 16:30:06 +00:00
|
|
|
# RFC3779
|
|
|
|
"RFC3779",
|
2006-04-17 12:08:22 +00:00
|
|
|
# TLS
|
2016-11-15 13:53:33 +00:00
|
|
|
"PSK", "SRP", "HEARTBEATS",
|
2008-03-12 21:14:28 +00:00
|
|
|
# CMS
|
|
|
|
"CMS",
|
2016-04-08 12:02:41 +00:00
|
|
|
"OCSP",
|
2008-06-01 11:07:34 +00:00
|
|
|
# CryptoAPI Engine
|
|
|
|
"CAPIENG",
|
2016-03-09 21:54:16 +00:00
|
|
|
# SSL methods
|
|
|
|
"SSL3_METHOD", "TLS1_METHOD", "TLS1_1_METHOD", "TLS1_2_METHOD", "DTLS1_METHOD", "DTLS1_2_METHOD",
|
2011-02-12 17:38:40 +00:00
|
|
|
# NEXTPROTONEG
|
|
|
|
"NEXTPROTONEG",
|
2002-12-09 02:18:16 +00:00
|
|
|
# Deprecated functions
|
2016-01-09 13:40:02 +00:00
|
|
|
"DEPRECATEDIN_0_9_8",
|
|
|
|
"DEPRECATEDIN_1_0_0",
|
|
|
|
"DEPRECATEDIN_1_1_0",
|
2017-04-05 15:06:01 +00:00
|
|
|
"DEPRECATEDIN_1_2_0",
|
2011-12-25 14:46:15 +00:00
|
|
|
# SCTP
|
2014-10-15 00:23:07 +00:00
|
|
|
"SCTP",
|
|
|
|
# SRTP
|
|
|
|
"SRTP",
|
2012-07-01 22:12:03 +00:00
|
|
|
# SSL TRACE
|
2014-07-23 12:18:06 +00:00
|
|
|
"SSL_TRACE",
|
|
|
|
# Unit testing
|
2014-12-08 14:19:26 +00:00
|
|
|
"UNIT_TEST",
|
2016-03-07 21:59:13 +00:00
|
|
|
# User Interface
|
|
|
|
"UI",
|
2016-03-18 19:06:29 +00:00
|
|
|
#
|
|
|
|
"TS",
|
2014-12-08 14:19:26 +00:00
|
|
|
# OCB mode
|
2015-02-06 15:45:29 +00:00
|
|
|
"OCB",
|
2016-04-22 10:47:57 +00:00
|
|
|
"CMAC",
|
2015-02-06 15:45:29 +00:00
|
|
|
# APPLINK (win build feature?)
|
|
|
|
"APPLINK"
|
|
|
|
);
|
2000-09-07 08:43:08 +00:00
|
|
|
|
2016-01-07 03:19:09 +00:00
|
|
|
my %disabled_algorithms;
|
|
|
|
|
|
|
|
foreach (@known_algorithms) {
|
|
|
|
$disabled_algorithms{$_} = 0;
|
|
|
|
}
|
2016-01-10 13:33:31 +00:00
|
|
|
# disabled by default
|
|
|
|
$disabled_algorithms{"STATIC_ENGINE"} = 1;
|
2016-01-07 03:19:09 +00:00
|
|
|
|
2017-04-06 12:11:19 +00:00
|
|
|
my $apiv = sprintf "%x%02x%02x", split(/\./, $config{api});
|
|
|
|
foreach (keys %disabled_algorithms) {
|
|
|
|
if (/^DEPRECATEDIN_(\d+)_(\d+)_(\d+)$/) {
|
|
|
|
my $depv = sprintf "%x%02x%02x", $1, $2, $3;
|
|
|
|
$disabled_algorithms{$_} = 1 if $apiv ge $depv;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-03-12 21:14:28 +00:00
|
|
|
my $zlib;
|
2005-04-19 13:24:44 +00:00
|
|
|
|
2016-01-11 23:17:12 +00:00
|
|
|
foreach (@ARGV, split(/ /, $config{options}))
|
1998-12-21 10:52:47 +00:00
|
|
|
{
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
$debug=1 if $_ eq "debug";
|
1999-03-03 02:01:26 +00:00
|
|
|
$W32=1 if $_ eq "32";
|
2015-01-12 22:29:26 +00:00
|
|
|
die "win16 not supported" if $_ eq "16";
|
1999-03-03 02:01:26 +00:00
|
|
|
if($_ eq "NT") {
|
|
|
|
$W32 = 1;
|
|
|
|
$NT = 1;
|
|
|
|
}
|
2015-12-14 09:22:58 +00:00
|
|
|
if ($_ eq "linux") {
|
|
|
|
$linux=1;
|
|
|
|
}
|
2017-02-28 19:00:42 +00:00
|
|
|
$VMS=1 if $_ eq "VMS";
|
2009-02-25 11:55:15 +00:00
|
|
|
if ($_ eq "zlib" || $_ eq "enable-zlib" || $_ eq "zlib-dynamic"
|
2008-03-12 21:14:28 +00:00
|
|
|
|| $_ eq "enable-zlib-dynamic") {
|
|
|
|
$zlib = 1;
|
|
|
|
}
|
|
|
|
|
2016-03-03 11:42:01 +00:00
|
|
|
$do_ssl=1 if $_ eq "libssl";
|
2002-07-17 13:27:43 +00:00
|
|
|
if ($_ eq "ssl") {
|
2016-10-10 16:01:24 +00:00
|
|
|
$do_ssl=1;
|
2002-07-17 13:27:43 +00:00
|
|
|
$libname=$_
|
|
|
|
}
|
2016-03-03 11:42:01 +00:00
|
|
|
$do_crypto=1 if $_ eq "libcrypto";
|
2002-07-17 13:27:43 +00:00
|
|
|
if ($_ eq "crypto") {
|
|
|
|
$do_crypto=1;
|
|
|
|
$libname=$_;
|
|
|
|
}
|
1999-02-11 01:39:30 +00:00
|
|
|
$do_update=1 if $_ eq "update";
|
2000-09-07 08:43:08 +00:00
|
|
|
$do_rewrite=1 if $_ eq "rewrite";
|
1999-12-24 17:26:33 +00:00
|
|
|
$do_ctest=1 if $_ eq "ctest";
|
2000-08-17 21:26:22 +00:00
|
|
|
$do_ctestall=1 if $_ eq "ctestall";
|
2001-02-09 13:16:21 +00:00
|
|
|
$do_checkexist=1 if $_ eq "exist";
|
2017-04-06 12:11:19 +00:00
|
|
|
if (/^(enable|disable|no)-(.*)$/) {
|
2016-01-07 03:19:09 +00:00
|
|
|
my $alg = uc $2;
|
2017-04-06 12:11:19 +00:00
|
|
|
$alg =~ tr/-/_/;
|
2016-01-07 03:19:09 +00:00
|
|
|
if (exists $disabled_algorithms{$alg}) {
|
|
|
|
$disabled_algorithms{$alg} = $1 eq "enable" ? 0 : 1;
|
|
|
|
}
|
1998-12-21 10:52:47 +00:00
|
|
|
}
|
|
|
|
|
2016-01-07 03:19:09 +00:00
|
|
|
}
|
1999-12-24 17:26:33 +00:00
|
|
|
|
2016-10-10 16:01:24 +00:00
|
|
|
if (!$libname) {
|
2002-07-17 13:27:43 +00:00
|
|
|
if ($do_ssl) {
|
2016-03-03 11:42:01 +00:00
|
|
|
$libname="LIBSSL";
|
2002-07-17 13:27:43 +00:00
|
|
|
}
|
|
|
|
if ($do_crypto) {
|
2016-03-03 11:42:01 +00:00
|
|
|
$libname="LIBCRYPTO";
|
2002-07-17 13:27:43 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2000-09-07 08:43:08 +00:00
|
|
|
# If no platform is given, assume WIN32
|
2016-03-17 16:53:11 +00:00
|
|
|
if ($W32 + $VMS + $linux == 0) {
|
2000-09-07 08:43:08 +00:00
|
|
|
$W32 = 1;
|
|
|
|
}
|
2016-01-07 19:49:53 +00:00
|
|
|
die "Please, only one platform at a time"
|
2016-03-17 16:53:11 +00:00
|
|
|
if ($W32 + $VMS + $linux > 1);
|
2000-09-07 08:43:08 +00:00
|
|
|
|
1998-12-21 10:52:47 +00:00
|
|
|
if (!$do_ssl && !$do_crypto)
|
|
|
|
{
|
2016-01-07 19:49:53 +00:00
|
|
|
print STDERR "usage: $0 ( ssl | crypto ) [ 16 | 32 | NT | OS2 | linux | VMS ]\n";
|
1998-12-21 10:52:47 +00:00
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
%ssl_list=&load_numbers($ssl_num);
|
1999-02-11 01:39:30 +00:00
|
|
|
$max_ssl = $max_num;
|
1998-12-21 10:52:47 +00:00
|
|
|
%crypto_list=&load_numbers($crypto_num);
|
1999-02-11 01:39:30 +00:00
|
|
|
$max_crypto = $max_num;
|
1998-12-21 10:52:47 +00:00
|
|
|
|
2015-03-26 20:33:18 +00:00
|
|
|
my $ssl="include/openssl/ssl.h";
|
|
|
|
$ssl.=" include/openssl/tls1.h";
|
|
|
|
$ssl.=" include/openssl/srtp.h";
|
1998-12-21 10:52:47 +00:00
|
|
|
|
2016-02-14 18:37:10 +00:00
|
|
|
# We use headers found in include/openssl and include/internal only.
|
|
|
|
# The latter is needed so libssl.so/.dll/.exe can link properly.
|
2015-03-26 20:33:18 +00:00
|
|
|
my $crypto ="include/openssl/crypto.h";
|
2015-05-14 12:54:49 +00:00
|
|
|
$crypto.=" include/internal/o_dir.h";
|
|
|
|
$crypto.=" include/internal/o_str.h";
|
2016-04-06 09:50:05 +00:00
|
|
|
$crypto.=" include/internal/err.h";
|
2015-03-26 20:33:18 +00:00
|
|
|
$crypto.=" include/openssl/des.h" ; # unless $no_des;
|
|
|
|
$crypto.=" include/openssl/idea.h" ; # unless $no_idea;
|
|
|
|
$crypto.=" include/openssl/rc4.h" ; # unless $no_rc4;
|
|
|
|
$crypto.=" include/openssl/rc5.h" ; # unless $no_rc5;
|
|
|
|
$crypto.=" include/openssl/rc2.h" ; # unless $no_rc2;
|
|
|
|
$crypto.=" include/openssl/blowfish.h" ; # unless $no_bf;
|
|
|
|
$crypto.=" include/openssl/cast.h" ; # unless $no_cast;
|
|
|
|
$crypto.=" include/openssl/whrlpool.h" ;
|
|
|
|
$crypto.=" include/openssl/md2.h" ; # unless $no_md2;
|
|
|
|
$crypto.=" include/openssl/md4.h" ; # unless $no_md4;
|
|
|
|
$crypto.=" include/openssl/md5.h" ; # unless $no_md5;
|
|
|
|
$crypto.=" include/openssl/mdc2.h" ; # unless $no_mdc2;
|
|
|
|
$crypto.=" include/openssl/sha.h" ; # unless $no_sha;
|
|
|
|
$crypto.=" include/openssl/ripemd.h" ; # unless $no_ripemd;
|
|
|
|
$crypto.=" include/openssl/aes.h" ; # unless $no_aes;
|
|
|
|
$crypto.=" include/openssl/camellia.h" ; # unless $no_camellia;
|
|
|
|
$crypto.=" include/openssl/seed.h"; # unless $no_seed;
|
1998-12-21 10:52:47 +00:00
|
|
|
|
2015-03-26 20:33:18 +00:00
|
|
|
$crypto.=" include/openssl/bn.h";
|
|
|
|
$crypto.=" include/openssl/rsa.h" ; # unless $no_rsa;
|
|
|
|
$crypto.=" include/openssl/dsa.h" ; # unless $no_dsa;
|
|
|
|
$crypto.=" include/openssl/dh.h" ; # unless $no_dh;
|
|
|
|
$crypto.=" include/openssl/ec.h" ; # unless $no_ec;
|
|
|
|
$crypto.=" include/openssl/hmac.h" ; # unless $no_hmac;
|
|
|
|
$crypto.=" include/openssl/cmac.h" ;
|
1998-12-21 10:52:47 +00:00
|
|
|
|
2015-03-26 20:33:18 +00:00
|
|
|
$crypto.=" include/openssl/engine.h"; # unless $no_engine;
|
|
|
|
$crypto.=" include/openssl/stack.h" ; # unless $no_stack;
|
|
|
|
$crypto.=" include/openssl/buffer.h" ; # unless $no_buffer;
|
|
|
|
$crypto.=" include/openssl/bio.h" ; # unless $no_bio;
|
2016-03-23 12:54:52 +00:00
|
|
|
$crypto.=" include/internal/dso.h" ; # unless $no_dso;
|
2015-03-26 20:33:18 +00:00
|
|
|
$crypto.=" include/openssl/lhash.h" ; # unless $no_lhash;
|
|
|
|
$crypto.=" include/openssl/conf.h";
|
|
|
|
$crypto.=" include/openssl/txt_db.h";
|
1998-12-21 10:52:47 +00:00
|
|
|
|
2015-03-26 20:33:18 +00:00
|
|
|
$crypto.=" include/openssl/evp.h" ; # unless $no_evp;
|
|
|
|
$crypto.=" include/openssl/objects.h";
|
|
|
|
$crypto.=" include/openssl/pem.h";
|
|
|
|
#$crypto.=" include/openssl/meth.h";
|
|
|
|
$crypto.=" include/openssl/asn1.h";
|
|
|
|
$crypto.=" include/openssl/asn1t.h";
|
|
|
|
$crypto.=" include/openssl/err.h" ; # unless $no_err;
|
|
|
|
$crypto.=" include/openssl/pkcs7.h";
|
|
|
|
$crypto.=" include/openssl/pkcs12.h";
|
|
|
|
$crypto.=" include/openssl/x509.h";
|
|
|
|
$crypto.=" include/openssl/x509_vfy.h";
|
|
|
|
$crypto.=" include/openssl/x509v3.h";
|
|
|
|
$crypto.=" include/openssl/ts.h";
|
|
|
|
$crypto.=" include/openssl/rand.h";
|
|
|
|
$crypto.=" include/openssl/comp.h" ; # unless $no_comp;
|
|
|
|
$crypto.=" include/openssl/ocsp.h";
|
|
|
|
$crypto.=" include/openssl/ui.h";
|
|
|
|
#$crypto.=" include/openssl/store.h";
|
|
|
|
$crypto.=" include/openssl/cms.h";
|
|
|
|
$crypto.=" include/openssl/srp.h";
|
|
|
|
$crypto.=" include/openssl/modes.h";
|
2015-02-17 13:29:01 +00:00
|
|
|
$crypto.=" include/openssl/async.h";
|
2016-02-25 18:11:16 +00:00
|
|
|
$crypto.=" include/openssl/ct.h";
|
2016-03-02 21:32:30 +00:00
|
|
|
$crypto.=" include/openssl/kdf.h";
|
1998-12-21 10:52:47 +00:00
|
|
|
|
2015-03-26 20:33:18 +00:00
|
|
|
my $symhacks="include/openssl/symhacks.h";
|
1999-02-11 01:39:30 +00:00
|
|
|
|
2016-03-03 11:42:01 +00:00
|
|
|
my @ssl_symbols = &do_defs("LIBSSL", $ssl, $symhacks);
|
|
|
|
my @crypto_symbols = &do_defs("LIBCRYPTO", $crypto, $symhacks);
|
1999-04-26 00:23:10 +00:00
|
|
|
|
1999-02-11 01:39:30 +00:00
|
|
|
if ($do_update) {
|
|
|
|
|
|
|
|
if ($do_ssl == 1) {
|
2000-09-07 08:43:08 +00:00
|
|
|
|
2016-03-03 11:42:01 +00:00
|
|
|
&maybe_add_info("LIBSSL",*ssl_list,@ssl_symbols);
|
2000-09-07 08:43:08 +00:00
|
|
|
if ($do_rewrite == 1) {
|
|
|
|
open(OUT, ">$ssl_num");
|
2016-03-03 11:42:01 +00:00
|
|
|
&rewrite_numbers(*OUT,"LIBSSL",*ssl_list,@ssl_symbols);
|
2000-09-07 08:43:08 +00:00
|
|
|
} else {
|
|
|
|
open(OUT, ">>$ssl_num");
|
|
|
|
}
|
2016-03-03 11:42:01 +00:00
|
|
|
&update_numbers(*OUT,"LIBSSL",*ssl_list,$max_ssl,@ssl_symbols);
|
1999-02-11 01:39:30 +00:00
|
|
|
close OUT;
|
|
|
|
}
|
|
|
|
|
|
|
|
if($do_crypto == 1) {
|
2000-09-07 08:43:08 +00:00
|
|
|
|
2016-03-03 11:42:01 +00:00
|
|
|
&maybe_add_info("LIBCRYPTO",*crypto_list,@crypto_symbols);
|
2000-09-07 08:43:08 +00:00
|
|
|
if ($do_rewrite == 1) {
|
|
|
|
open(OUT, ">$crypto_num");
|
2016-03-03 11:42:01 +00:00
|
|
|
&rewrite_numbers(*OUT,"LIBCRYPTO",*crypto_list,@crypto_symbols);
|
2000-09-07 08:43:08 +00:00
|
|
|
} else {
|
|
|
|
open(OUT, ">>$crypto_num");
|
|
|
|
}
|
2016-03-03 11:42:01 +00:00
|
|
|
&update_numbers(*OUT,"LIBCRYPTO",*crypto_list,$max_crypto,@crypto_symbols);
|
1999-02-11 01:39:30 +00:00
|
|
|
close OUT;
|
2016-10-10 16:01:24 +00:00
|
|
|
}
|
1999-12-24 17:26:33 +00:00
|
|
|
|
2001-02-09 13:16:21 +00:00
|
|
|
} elsif ($do_checkexist) {
|
|
|
|
&check_existing(*ssl_list, @ssl_symbols)
|
|
|
|
if $do_ssl == 1;
|
|
|
|
&check_existing(*crypto_list, @crypto_symbols)
|
|
|
|
if $do_crypto == 1;
|
2000-08-17 21:26:22 +00:00
|
|
|
} elsif ($do_ctest || $do_ctestall) {
|
1999-12-24 17:26:33 +00:00
|
|
|
|
|
|
|
print <<"EOF";
|
|
|
|
|
|
|
|
/* Test file to check all DEF file symbols are present by trying
|
|
|
|
* to link to all of them. This is *not* intended to be run!
|
|
|
|
*/
|
|
|
|
|
|
|
|
int main()
|
|
|
|
{
|
|
|
|
EOF
|
2016-03-03 11:42:01 +00:00
|
|
|
&print_test_file(*STDOUT,"LIBSSL",*ssl_list,$do_ctestall,@ssl_symbols)
|
1999-12-24 17:26:33 +00:00
|
|
|
if $do_ssl == 1;
|
|
|
|
|
2016-03-03 11:42:01 +00:00
|
|
|
&print_test_file(*STDOUT,"LIBCRYPTO",*crypto_list,$do_ctestall,@crypto_symbols)
|
1999-12-24 17:26:33 +00:00
|
|
|
if $do_crypto == 1;
|
|
|
|
|
|
|
|
print "}\n";
|
1999-02-11 01:39:30 +00:00
|
|
|
|
|
|
|
} else {
|
1999-05-08 10:42:06 +00:00
|
|
|
|
2002-07-17 13:27:43 +00:00
|
|
|
&print_def_file(*STDOUT,$libname,*ssl_list,@ssl_symbols)
|
1999-02-11 01:39:30 +00:00
|
|
|
if $do_ssl == 1;
|
|
|
|
|
2002-07-17 13:27:43 +00:00
|
|
|
&print_def_file(*STDOUT,$libname,*crypto_list,@crypto_symbols)
|
1999-02-11 01:39:30 +00:00
|
|
|
if $do_crypto == 1;
|
1999-05-08 10:42:06 +00:00
|
|
|
|
1999-02-11 01:39:30 +00:00
|
|
|
}
|
1998-12-21 10:52:47 +00:00
|
|
|
|
|
|
|
|
|
|
|
sub do_defs
|
1999-04-26 00:23:10 +00:00
|
|
|
{
|
2000-09-07 08:43:08 +00:00
|
|
|
my($name,$files,$symhacksfile)=@_;
|
2000-01-07 03:17:47 +00:00
|
|
|
my $file;
|
1999-04-26 00:23:10 +00:00
|
|
|
my @ret;
|
2000-09-07 08:43:08 +00:00
|
|
|
my %syms;
|
|
|
|
my %platform; # For anything undefined, we assume ""
|
|
|
|
my %kind; # For anything undefined, we assume "FUNCTION"
|
|
|
|
my %algorithm; # For anything undefined, we assume ""
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
my %variant;
|
|
|
|
my %variant_cnt; # To be able to allocate "name{n}" if "name"
|
|
|
|
# is the same name as the original.
|
2000-01-07 03:17:47 +00:00
|
|
|
my $cpp;
|
2000-12-29 00:05:14 +00:00
|
|
|
my %unknown_algorithms = ();
|
2014-12-17 13:17:26 +00:00
|
|
|
my $parens = 0;
|
1998-12-21 10:52:47 +00:00
|
|
|
|
2000-09-07 08:43:08 +00:00
|
|
|
foreach $file (split(/\s+/,$symhacksfile." ".$files))
|
1998-12-21 10:52:47 +00:00
|
|
|
{
|
2016-01-29 23:03:58 +00:00
|
|
|
my $fn = catfile($config{sourcedir},$file);
|
|
|
|
print STDERR "DEBUG: starting on $fn:\n" if $debug;
|
|
|
|
open(IN,"<$fn") || die "unable to open $fn:$!\n";
|
2000-01-07 03:17:47 +00:00
|
|
|
my $line = "", my $def= "";
|
1999-04-26 00:23:10 +00:00
|
|
|
my %tag = (
|
2001-02-21 14:12:03 +00:00
|
|
|
(map { $_ => 0 } @known_platforms),
|
|
|
|
(map { "OPENSSL_SYS_".$_ => 0 } @known_ossl_platforms),
|
2001-02-19 16:06:34 +00:00
|
|
|
(map { "OPENSSL_NO_".$_ => 0 } @known_algorithms),
|
2014-12-17 13:17:26 +00:00
|
|
|
(map { "OPENSSL_USE_".$_ => 0 } @known_algorithms),
|
2017-04-05 15:06:01 +00:00
|
|
|
(grep /^DEPRECATED_/, @known_algorithms),
|
1999-04-26 00:23:10 +00:00
|
|
|
NOPROTO => 0,
|
|
|
|
PERL5 => 0,
|
|
|
|
_WINDLL => 0,
|
|
|
|
CONST_STRICT => 0,
|
|
|
|
TRUE => 1,
|
|
|
|
);
|
2000-09-07 08:43:08 +00:00
|
|
|
my $symhacking = $file eq $symhacksfile;
|
2001-02-19 13:33:04 +00:00
|
|
|
my @current_platforms = ();
|
|
|
|
my @current_algorithms = ();
|
|
|
|
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
# params: symbol, alias, platforms, kind
|
|
|
|
# The reason to put this subroutine in a variable is that
|
|
|
|
# it will otherwise create it's own, unshared, version of
|
|
|
|
# %tag and %variant...
|
|
|
|
my $make_variant = sub
|
|
|
|
{
|
|
|
|
my ($s, $a, $p, $k) = @_;
|
|
|
|
my ($a1, $a2);
|
|
|
|
|
|
|
|
print STDERR "DEBUG: make_variant: Entered with ",$s,", ",$a,", ",(defined($p)?$p:""),", ",(defined($k)?$k:""),"\n" if $debug;
|
|
|
|
if (defined($p))
|
|
|
|
{
|
|
|
|
$a1 = join(",",$p,
|
|
|
|
grep(!/^$/,
|
|
|
|
map { $tag{$_} == 1 ? $_ : "" }
|
|
|
|
@known_platforms));
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
$a1 = join(",",
|
|
|
|
grep(!/^$/,
|
|
|
|
map { $tag{$_} == 1 ? $_ : "" }
|
|
|
|
@known_platforms));
|
|
|
|
}
|
|
|
|
$a2 = join(",",
|
|
|
|
grep(!/^$/,
|
|
|
|
map { $tag{"OPENSSL_SYS_".$_} == 1 ? $_ : "" }
|
|
|
|
@known_ossl_platforms));
|
|
|
|
print STDERR "DEBUG: make_variant: a1 = $a1; a2 = $a2\n" if $debug;
|
|
|
|
if ($a1 eq "") { $a1 = $a2; }
|
|
|
|
elsif ($a1 ne "" && $a2 ne "") { $a1 .= ",".$a2; }
|
|
|
|
if ($a eq $s)
|
|
|
|
{
|
|
|
|
if (!defined($variant_cnt{$s}))
|
|
|
|
{
|
|
|
|
$variant_cnt{$s} = 0;
|
|
|
|
}
|
|
|
|
$variant_cnt{$s}++;
|
|
|
|
$a .= "{$variant_cnt{$s}}";
|
|
|
|
}
|
2001-03-02 12:14:54 +00:00
|
|
|
my $toadd = $a.":".$a1.(defined($k)?":".$k:"");
|
|
|
|
my $togrep = $s.'(\{[0-9]+\})?:'.$a1.(defined($k)?":".$k:"");
|
|
|
|
if (!grep(/^$togrep$/,
|
|
|
|
split(/;/, defined($variant{$s})?$variant{$s}:""))) {
|
|
|
|
if (defined($variant{$s})) { $variant{$s} .= ";"; }
|
|
|
|
$variant{$s} .= $toadd;
|
|
|
|
}
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
print STDERR "DEBUG: make_variant: Exit with variant of ",$s," = ",$variant{$s},"\n" if $debug;
|
|
|
|
};
|
|
|
|
|
|
|
|
print STDERR "DEBUG: parsing ----------\n" if $debug;
|
1999-04-26 00:23:10 +00:00
|
|
|
while(<IN>) {
|
2014-12-17 13:17:26 +00:00
|
|
|
if($parens > 0) {
|
2016-01-09 13:40:02 +00:00
|
|
|
#Inside a DEPRECATEDIN
|
2015-03-24 14:02:51 +00:00
|
|
|
$stored_multiline .= $_;
|
Perl's chop / chomp considered bad, use a regexp instead
Once upon a time, there was chop, which somply chopped off the last
character of $_ or a given variable, and it was used to take off the
EOL character (\n) of strings.
... but then, you had to check for the presence of such character.
So came chomp, the better chop which checks for \n before chopping it
off. And this worked well, as long as Perl made internally sure that
all EOLs were converted to \n.
These days, though, there seems to be a mixture of perls, so lines
from files in the "wrong" environment might have \r\n as EOL, or just
\r (Mac OS, unless I'm misinformed).
So it's time we went for the more generic variant and use s|\R$||, the
better chomp which recognises all kinds of known EOLs and chops them
off.
A few chops were left alone, as they are use as surgical tools to
remove one last slash or one last comma.
NOTE: \R came with perl 5.10.0. It means that from now on, our
scripts will fail with any older version.
Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-02-11 20:47:30 +00:00
|
|
|
$stored_multiline =~ s|\R$||; # Better chomp
|
2016-01-09 13:40:02 +00:00
|
|
|
print STDERR "DEBUG: Continuing multiline DEPRECATEDIN: $stored_multiline\n" if $debug;
|
2015-03-24 14:02:51 +00:00
|
|
|
$parens = count_parens($stored_multiline);
|
|
|
|
if ($parens == 0) {
|
2016-01-09 13:40:02 +00:00
|
|
|
$def .= do_deprecated($stored_multiline,
|
|
|
|
\@current_platforms,
|
|
|
|
\@current_algorithms);
|
2015-03-24 14:02:51 +00:00
|
|
|
}
|
2014-12-17 13:17:26 +00:00
|
|
|
next;
|
|
|
|
}
|
2005-04-19 18:57:17 +00:00
|
|
|
if (/\/\* Error codes for the \w+ functions\. \*\//)
|
|
|
|
{
|
|
|
|
undef @tag;
|
|
|
|
last;
|
|
|
|
}
|
1999-04-26 00:23:10 +00:00
|
|
|
if ($line ne '') {
|
|
|
|
$_ = $line . $_;
|
|
|
|
$line = '';
|
1998-12-21 10:52:47 +00:00
|
|
|
}
|
1999-04-26 00:23:10 +00:00
|
|
|
|
|
|
|
if (/\\$/) {
|
Perl's chop / chomp considered bad, use a regexp instead
Once upon a time, there was chop, which somply chopped off the last
character of $_ or a given variable, and it was used to take off the
EOL character (\n) of strings.
... but then, you had to check for the presence of such character.
So came chomp, the better chop which checks for \n before chopping it
off. And this worked well, as long as Perl made internally sure that
all EOLs were converted to \n.
These days, though, there seems to be a mixture of perls, so lines
from files in the "wrong" environment might have \r\n as EOL, or just
\r (Mac OS, unless I'm misinformed).
So it's time we went for the more generic variant and use s|\R$||, the
better chomp which recognises all kinds of known EOLs and chops them
off.
A few chops were left alone, as they are use as surgical tools to
remove one last slash or one last comma.
NOTE: \R came with perl 5.10.0. It means that from now on, our
scripts will fail with any older version.
Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-02-11 20:47:30 +00:00
|
|
|
$line = $`; # keep what was before the backslash
|
1999-04-26 00:23:10 +00:00
|
|
|
next;
|
|
|
|
}
|
|
|
|
|
2006-01-02 12:13:07 +00:00
|
|
|
if(/\/\*/) {
|
|
|
|
if (not /\*\//) { # multiline comment...
|
|
|
|
$line = $_; # ... just accumulate
|
|
|
|
next;
|
|
|
|
} else {
|
|
|
|
s/\/\*.*?\*\///gs;# wipe it
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1999-04-26 00:23:10 +00:00
|
|
|
if ($cpp) {
|
2006-01-02 12:13:07 +00:00
|
|
|
$cpp++ if /^#\s*if/;
|
|
|
|
$cpp-- if /^#\s*endif/;
|
1999-04-26 00:23:10 +00:00
|
|
|
next;
|
Perl's chop / chomp considered bad, use a regexp instead
Once upon a time, there was chop, which somply chopped off the last
character of $_ or a given variable, and it was used to take off the
EOL character (\n) of strings.
... but then, you had to check for the presence of such character.
So came chomp, the better chop which checks for \n before chopping it
off. And this worked well, as long as Perl made internally sure that
all EOLs were converted to \n.
These days, though, there seems to be a mixture of perls, so lines
from files in the "wrong" environment might have \r\n as EOL, or just
\r (Mac OS, unless I'm misinformed).
So it's time we went for the more generic variant and use s|\R$||, the
better chomp which recognises all kinds of known EOLs and chops them
off.
A few chops were left alone, as they are use as surgical tools to
remove one last slash or one last comma.
NOTE: \R came with perl 5.10.0. It means that from now on, our
scripts will fail with any older version.
Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-02-11 20:47:30 +00:00
|
|
|
}
|
2016-02-26 14:10:17 +00:00
|
|
|
if (/^#.*ifdef.*cplusplus/) {
|
|
|
|
$cpp = 1;
|
|
|
|
next;
|
|
|
|
}
|
1999-04-26 00:23:10 +00:00
|
|
|
|
|
|
|
s/{[^{}]*}//gs; # ignore {} blocks
|
2002-10-24 19:09:03 +00:00
|
|
|
print STDERR "DEBUG: \$def=\"$def\"\n" if $debug && $def ne "";
|
2001-02-21 14:12:03 +00:00
|
|
|
print STDERR "DEBUG: \$_=\"$_\"\n" if $debug;
|
2017-04-05 15:06:01 +00:00
|
|
|
if (/^\#\s*if\s+OPENSSL_API_COMPAT\s*(\S)\s*(0x[0-9a-fA-F]{8})L\s*$/) {
|
|
|
|
my $op = $1;
|
|
|
|
my $v = hex($2);
|
|
|
|
if ($op ne '<' && $op ne '>=') {
|
|
|
|
die "$file unacceptable operator $op: $_\n";
|
|
|
|
}
|
|
|
|
my ($one, $major, $minor) =
|
|
|
|
( ($v >> 28) & 0xf,
|
|
|
|
($v >> 20) & 0xff,
|
|
|
|
($v >> 12) & 0xff );
|
|
|
|
my $t = "DEPRECATEDIN_${one}_${major}_${minor}";
|
|
|
|
push(@tag,"-");
|
|
|
|
push(@tag,$t);
|
|
|
|
$tag{$t}=($op eq '<' ? 1 : -1);
|
|
|
|
print STDERR "DEBUG: $file: found tag $t = $tag{$t}\n" if $debug;
|
|
|
|
} elsif (/^\#\s*ifndef\s+(.*)/) {
|
2001-02-21 14:12:03 +00:00
|
|
|
push(@tag,"-");
|
1998-12-21 10:52:47 +00:00
|
|
|
push(@tag,$1);
|
|
|
|
$tag{$1}=-1;
|
2001-02-21 14:12:03 +00:00
|
|
|
print STDERR "DEBUG: $file: found tag $1 = -1\n" if $debug;
|
2000-12-29 00:05:14 +00:00
|
|
|
} elsif (/^\#\s*if\s+!defined\(([^\)]+)\)/) {
|
2001-02-21 14:12:03 +00:00
|
|
|
push(@tag,"-");
|
|
|
|
if (/^\#\s*if\s+(!defined\(([^\)]+)\)(\s+\&\&\s+!defined\(([^\)]+)\))*)$/) {
|
|
|
|
my $tmp_1 = $1;
|
|
|
|
my $tmp_;
|
|
|
|
foreach $tmp_ (split '\&\&',$tmp_1) {
|
|
|
|
$tmp_ =~ /!defined\(([^\)]+)\)/;
|
|
|
|
print STDERR "DEBUG: $file: found tag $1 = -1\n" if $debug;
|
|
|
|
push(@tag,$1);
|
|
|
|
$tag{$1}=-1;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
print STDERR "Warning: $file: complicated expression: $_" if $debug; # because it is O...
|
|
|
|
print STDERR "DEBUG: $file: found tag $1 = -1\n" if $debug;
|
|
|
|
push(@tag,$1);
|
|
|
|
$tag{$1}=-1;
|
|
|
|
}
|
2005-02-05 17:22:14 +00:00
|
|
|
} elsif (/^\#\s*ifdef\s+(\S*)/) {
|
2001-02-21 14:12:03 +00:00
|
|
|
push(@tag,"-");
|
1998-12-21 10:52:47 +00:00
|
|
|
push(@tag,$1);
|
|
|
|
$tag{$1}=1;
|
2001-02-21 14:12:03 +00:00
|
|
|
print STDERR "DEBUG: $file: found tag $1 = 1\n" if $debug;
|
2000-12-29 00:05:14 +00:00
|
|
|
} elsif (/^\#\s*if\s+defined\(([^\)]+)\)/) {
|
2001-02-21 14:12:03 +00:00
|
|
|
push(@tag,"-");
|
|
|
|
if (/^\#\s*if\s+(defined\(([^\)]+)\)(\s+\|\|\s+defined\(([^\)]+)\))*)$/) {
|
|
|
|
my $tmp_1 = $1;
|
|
|
|
my $tmp_;
|
|
|
|
foreach $tmp_ (split '\|\|',$tmp_1) {
|
|
|
|
$tmp_ =~ /defined\(([^\)]+)\)/;
|
|
|
|
print STDERR "DEBUG: $file: found tag $1 = 1\n" if $debug;
|
|
|
|
push(@tag,$1);
|
|
|
|
$tag{$1}=1;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
print STDERR "Warning: $file: complicated expression: $_\n" if $debug; # because it is O...
|
|
|
|
print STDERR "DEBUG: $file: found tag $1 = 1\n" if $debug;
|
|
|
|
push(@tag,$1);
|
|
|
|
$tag{$1}=1;
|
|
|
|
}
|
2000-09-07 08:43:08 +00:00
|
|
|
} elsif (/^\#\s*error\s+(\w+) is disabled\./) {
|
2001-02-21 14:12:03 +00:00
|
|
|
my $tag_i = $#tag;
|
|
|
|
while($tag[$tag_i] ne "-") {
|
|
|
|
if ($tag[$tag_i] eq "OPENSSL_NO_".$1) {
|
|
|
|
$tag{$tag[$tag_i]}=2;
|
|
|
|
print STDERR "DEBUG: $file: chaged tag $1 = 2\n" if $debug;
|
|
|
|
}
|
|
|
|
$tag_i--;
|
2000-09-07 08:43:08 +00:00
|
|
|
}
|
1999-04-26 00:23:10 +00:00
|
|
|
} elsif (/^\#\s*endif/) {
|
2001-02-21 14:12:03 +00:00
|
|
|
my $tag_i = $#tag;
|
2004-05-19 17:03:59 +00:00
|
|
|
while($tag_i > 0 && $tag[$tag_i] ne "-") {
|
2001-02-21 14:12:03 +00:00
|
|
|
my $t=$tag[$tag_i];
|
|
|
|
print STDERR "DEBUG: \$t=\"$t\"\n" if $debug;
|
|
|
|
if ($tag{$t}==2) {
|
|
|
|
$tag{$t}=-1;
|
|
|
|
} else {
|
|
|
|
$tag{$t}=0;
|
|
|
|
}
|
|
|
|
print STDERR "DEBUG: $file: changed tag ",$t," = ",$tag{$t},"\n" if $debug;
|
|
|
|
pop(@tag);
|
|
|
|
if ($t =~ /^OPENSSL_NO_([A-Z0-9_]+)$/) {
|
|
|
|
$t=$1;
|
2014-12-17 13:17:26 +00:00
|
|
|
} elsif($t =~ /^OPENSSL_USE_([A-Z0-9_]+)$/) {
|
|
|
|
$t=$1;
|
2001-02-21 14:12:03 +00:00
|
|
|
} else {
|
|
|
|
$t="";
|
|
|
|
}
|
|
|
|
if ($t ne ""
|
|
|
|
&& !grep(/^$t$/, @known_algorithms)) {
|
|
|
|
$unknown_algorithms{$t} = 1;
|
|
|
|
#print STDERR "DEBUG: Added as unknown algorithm: $t\n" if $debug;
|
|
|
|
}
|
|
|
|
$tag_i--;
|
2000-09-07 08:43:08 +00:00
|
|
|
}
|
1998-12-21 10:52:47 +00:00
|
|
|
pop(@tag);
|
1999-04-26 00:23:10 +00:00
|
|
|
} elsif (/^\#\s*else/) {
|
2001-02-21 14:12:03 +00:00
|
|
|
my $tag_i = $#tag;
|
2016-02-26 14:10:17 +00:00
|
|
|
die "$file unmatched else\n" if $tag_i < 0;
|
2001-02-21 14:12:03 +00:00
|
|
|
while($tag[$tag_i] ne "-") {
|
|
|
|
my $t=$tag[$tag_i];
|
|
|
|
$tag{$t}= -$tag{$t};
|
|
|
|
print STDERR "DEBUG: $file: changed tag ",$t," = ",$tag{$t},"\n" if $debug;
|
|
|
|
$tag_i--;
|
|
|
|
}
|
1999-04-26 00:23:10 +00:00
|
|
|
} elsif (/^\#\s*if\s+1/) {
|
2001-02-21 14:12:03 +00:00
|
|
|
push(@tag,"-");
|
1999-04-26 00:23:10 +00:00
|
|
|
# Dummy tag
|
|
|
|
push(@tag,"TRUE");
|
|
|
|
$tag{"TRUE"}=1;
|
2001-02-21 14:12:03 +00:00
|
|
|
print STDERR "DEBUG: $file: found 1\n" if $debug;
|
1999-09-03 13:30:47 +00:00
|
|
|
} elsif (/^\#\s*if\s+0/) {
|
2001-02-21 14:12:03 +00:00
|
|
|
push(@tag,"-");
|
1999-09-03 13:30:47 +00:00
|
|
|
# Dummy tag
|
|
|
|
push(@tag,"TRUE");
|
|
|
|
$tag{"TRUE"}=-1;
|
2001-02-21 14:12:03 +00:00
|
|
|
print STDERR "DEBUG: $file: found 0\n" if $debug;
|
2016-02-26 14:10:17 +00:00
|
|
|
} elsif (/^\#\s*if\s+/) {
|
|
|
|
#Some other unrecognized "if" style
|
|
|
|
push(@tag,"-");
|
2000-09-07 08:43:08 +00:00
|
|
|
} elsif (/^\#\s*define\s+(\w+)\s+(\w+)/
|
2001-02-22 13:24:17 +00:00
|
|
|
&& $symhacking && $tag{'TRUE'} != -1) {
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
# This is for aliasing. When we find an alias,
|
|
|
|
# we have to invert
|
|
|
|
&$make_variant($1,$2);
|
|
|
|
print STDERR "DEBUG: $file: defined $1 = $2\n" if $debug;
|
2000-09-07 08:43:08 +00:00
|
|
|
}
|
|
|
|
if (/^\#/) {
|
2001-02-19 13:33:04 +00:00
|
|
|
@current_platforms =
|
|
|
|
grep(!/^$/,
|
2001-02-21 14:12:03 +00:00
|
|
|
map { $tag{$_} == 1 ? $_ :
|
|
|
|
$tag{$_} == -1 ? "!".$_ : "" }
|
2001-02-19 13:33:04 +00:00
|
|
|
@known_platforms);
|
2001-02-21 14:12:03 +00:00
|
|
|
push @current_platforms
|
|
|
|
, grep(!/^$/,
|
|
|
|
map { $tag{"OPENSSL_SYS_".$_} == 1 ? $_ :
|
|
|
|
$tag{"OPENSSL_SYS_".$_} == -1 ? "!".$_ : "" }
|
|
|
|
@known_ossl_platforms);
|
2014-12-17 13:17:26 +00:00
|
|
|
@current_algorithms = ();
|
2001-02-19 13:33:04 +00:00
|
|
|
@current_algorithms =
|
|
|
|
grep(!/^$/,
|
2001-02-19 16:06:34 +00:00
|
|
|
map { $tag{"OPENSSL_NO_".$_} == -1 ? $_ : "" }
|
2001-02-19 13:33:04 +00:00
|
|
|
@known_algorithms);
|
2014-12-17 13:17:26 +00:00
|
|
|
push @current_algorithms
|
|
|
|
, grep(!/^$/,
|
|
|
|
map { $tag{"OPENSSL_USE_".$_} == 1 ? $_ : "" }
|
|
|
|
@known_algorithms);
|
2017-04-05 15:06:01 +00:00
|
|
|
push @current_algorithms,
|
|
|
|
grep { /^DEPRECATEDIN_/ && $tag{$_} == 1 }
|
|
|
|
@known_algorithms;
|
2001-02-19 13:33:04 +00:00
|
|
|
$def .=
|
|
|
|
"#INFO:"
|
|
|
|
.join(',',@current_platforms).":"
|
|
|
|
.join(',',@current_algorithms).";";
|
1999-04-26 00:23:10 +00:00
|
|
|
next;
|
|
|
|
}
|
2001-02-22 13:24:17 +00:00
|
|
|
if ($tag{'TRUE'} != -1) {
|
2016-02-23 15:27:05 +00:00
|
|
|
if (/^\s*DEFINE_STACK_OF\s*\(\s*(\w*)\s*\)/
|
|
|
|
|| /^\s*DEFINE_STACK_OF_CONST\s*\(\s*(\w*)\s*\)/) {
|
2001-02-22 13:24:17 +00:00
|
|
|
next;
|
|
|
|
} elsif (/^\s*DECLARE_ASN1_ENCODE_FUNCTIONS\s*\(\s*(\w*)\s*,\s*(\w*)\s*,\s*(\w*)\s*\)/) {
|
|
|
|
$def .= "int d2i_$3(void);";
|
|
|
|
$def .= "int i2d_$3(void);";
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
# Variant for platforms that do not
|
|
|
|
# have to access globale variables
|
|
|
|
# in shared libraries through functions
|
|
|
|
$def .=
|
|
|
|
"#INFO:"
|
|
|
|
.join(',',"!EXPORT_VAR_AS_FUNCTION",@current_platforms).":"
|
|
|
|
.join(',',@current_algorithms).";";
|
2001-02-22 13:24:17 +00:00
|
|
|
$def .= "OPENSSL_EXTERN int $2_it;";
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
$def .=
|
|
|
|
"#INFO:"
|
|
|
|
.join(',',@current_platforms).":"
|
|
|
|
.join(',',@current_algorithms).";";
|
|
|
|
# Variant for platforms that have to
|
|
|
|
# access globale variables in shared
|
|
|
|
# libraries through functions
|
|
|
|
&$make_variant("$2_it","$2_it",
|
|
|
|
"EXPORT_VAR_AS_FUNCTION",
|
|
|
|
"FUNCTION");
|
2001-02-22 13:24:17 +00:00
|
|
|
next;
|
|
|
|
} elsif (/^\s*DECLARE_ASN1_FUNCTIONS_fname\s*\(\s*(\w*)\s*,\s*(\w*)\s*,\s*(\w*)\s*\)/) {
|
|
|
|
$def .= "int d2i_$3(void);";
|
|
|
|
$def .= "int i2d_$3(void);";
|
|
|
|
$def .= "int $3_free(void);";
|
|
|
|
$def .= "int $3_new(void);";
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
# Variant for platforms that do not
|
|
|
|
# have to access globale variables
|
|
|
|
# in shared libraries through functions
|
|
|
|
$def .=
|
|
|
|
"#INFO:"
|
|
|
|
.join(',',"!EXPORT_VAR_AS_FUNCTION",@current_platforms).":"
|
|
|
|
.join(',',@current_algorithms).";";
|
2001-02-22 13:24:17 +00:00
|
|
|
$def .= "OPENSSL_EXTERN int $2_it;";
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
$def .=
|
|
|
|
"#INFO:"
|
|
|
|
.join(',',@current_platforms).":"
|
|
|
|
.join(',',@current_algorithms).";";
|
|
|
|
# Variant for platforms that have to
|
|
|
|
# access globale variables in shared
|
|
|
|
# libraries through functions
|
|
|
|
&$make_variant("$2_it","$2_it",
|
|
|
|
"EXPORT_VAR_AS_FUNCTION",
|
|
|
|
"FUNCTION");
|
|
|
|
next;
|
2001-02-22 13:24:17 +00:00
|
|
|
} elsif (/^\s*DECLARE_ASN1_FUNCTIONS\s*\(\s*(\w*)\s*\)/ ||
|
|
|
|
/^\s*DECLARE_ASN1_FUNCTIONS_const\s*\(\s*(\w*)\s*\)/) {
|
|
|
|
$def .= "int d2i_$1(void);";
|
|
|
|
$def .= "int i2d_$1(void);";
|
|
|
|
$def .= "int $1_free(void);";
|
|
|
|
$def .= "int $1_new(void);";
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
# Variant for platforms that do not
|
|
|
|
# have to access globale variables
|
|
|
|
# in shared libraries through functions
|
|
|
|
$def .=
|
|
|
|
"#INFO:"
|
|
|
|
.join(',',"!EXPORT_VAR_AS_FUNCTION",@current_platforms).":"
|
|
|
|
.join(',',@current_algorithms).";";
|
2001-02-22 13:24:17 +00:00
|
|
|
$def .= "OPENSSL_EXTERN int $1_it;";
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
$def .=
|
|
|
|
"#INFO:"
|
|
|
|
.join(',',@current_platforms).":"
|
|
|
|
.join(',',@current_algorithms).";";
|
|
|
|
# Variant for platforms that have to
|
|
|
|
# access globale variables in shared
|
|
|
|
# libraries through functions
|
|
|
|
&$make_variant("$1_it","$1_it",
|
|
|
|
"EXPORT_VAR_AS_FUNCTION",
|
|
|
|
"FUNCTION");
|
2001-02-22 13:24:17 +00:00
|
|
|
next;
|
|
|
|
} elsif (/^\s*DECLARE_ASN1_ENCODE_FUNCTIONS_const\s*\(\s*(\w*)\s*,\s*(\w*)\s*\)/) {
|
|
|
|
$def .= "int d2i_$2(void);";
|
|
|
|
$def .= "int i2d_$2(void);";
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
# Variant for platforms that do not
|
|
|
|
# have to access globale variables
|
|
|
|
# in shared libraries through functions
|
|
|
|
$def .=
|
|
|
|
"#INFO:"
|
|
|
|
.join(',',"!EXPORT_VAR_AS_FUNCTION",@current_platforms).":"
|
|
|
|
.join(',',@current_algorithms).";";
|
2001-02-22 13:24:17 +00:00
|
|
|
$def .= "OPENSSL_EXTERN int $2_it;";
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
$def .=
|
|
|
|
"#INFO:"
|
|
|
|
.join(',',@current_platforms).":"
|
|
|
|
.join(',',@current_algorithms).";";
|
|
|
|
# Variant for platforms that have to
|
|
|
|
# access globale variables in shared
|
|
|
|
# libraries through functions
|
|
|
|
&$make_variant("$2_it","$2_it",
|
|
|
|
"EXPORT_VAR_AS_FUNCTION",
|
|
|
|
"FUNCTION");
|
2001-02-22 13:24:17 +00:00
|
|
|
next;
|
2003-03-20 17:58:33 +00:00
|
|
|
} elsif (/^\s*DECLARE_ASN1_ALLOC_FUNCTIONS\s*\(\s*(\w*)\s*\)/) {
|
|
|
|
$def .= "int $1_free(void);";
|
|
|
|
$def .= "int $1_new(void);";
|
|
|
|
next;
|
2001-02-22 13:24:17 +00:00
|
|
|
} elsif (/^\s*DECLARE_ASN1_FUNCTIONS_name\s*\(\s*(\w*)\s*,\s*(\w*)\s*\)/) {
|
|
|
|
$def .= "int d2i_$2(void);";
|
|
|
|
$def .= "int i2d_$2(void);";
|
|
|
|
$def .= "int $2_free(void);";
|
|
|
|
$def .= "int $2_new(void);";
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
# Variant for platforms that do not
|
|
|
|
# have to access globale variables
|
|
|
|
# in shared libraries through functions
|
|
|
|
$def .=
|
|
|
|
"#INFO:"
|
|
|
|
.join(',',"!EXPORT_VAR_AS_FUNCTION",@current_platforms).":"
|
|
|
|
.join(',',@current_algorithms).";";
|
2001-02-22 13:24:17 +00:00
|
|
|
$def .= "OPENSSL_EXTERN int $2_it;";
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
$def .=
|
|
|
|
"#INFO:"
|
|
|
|
.join(',',@current_platforms).":"
|
|
|
|
.join(',',@current_algorithms).";";
|
|
|
|
# Variant for platforms that have to
|
|
|
|
# access globale variables in shared
|
|
|
|
# libraries through functions
|
|
|
|
&$make_variant("$2_it","$2_it",
|
|
|
|
"EXPORT_VAR_AS_FUNCTION",
|
|
|
|
"FUNCTION");
|
2001-02-22 13:24:17 +00:00
|
|
|
next;
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
} elsif (/^\s*DECLARE_ASN1_ITEM\s*\(\s*(\w*)\s*\)/) {
|
|
|
|
# Variant for platforms that do not
|
|
|
|
# have to access globale variables
|
|
|
|
# in shared libraries through functions
|
|
|
|
$def .=
|
|
|
|
"#INFO:"
|
|
|
|
.join(',',"!EXPORT_VAR_AS_FUNCTION",@current_platforms).":"
|
|
|
|
.join(',',@current_algorithms).";";
|
2001-02-22 13:24:17 +00:00
|
|
|
$def .= "OPENSSL_EXTERN int $1_it;";
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
$def .=
|
|
|
|
"#INFO:"
|
|
|
|
.join(',',@current_platforms).":"
|
|
|
|
.join(',',@current_algorithms).";";
|
|
|
|
# Variant for platforms that have to
|
|
|
|
# access globale variables in shared
|
|
|
|
# libraries through functions
|
|
|
|
&$make_variant("$1_it","$1_it",
|
|
|
|
"EXPORT_VAR_AS_FUNCTION",
|
|
|
|
"FUNCTION");
|
2001-02-22 13:24:17 +00:00
|
|
|
next;
|
2002-10-04 20:24:50 +00:00
|
|
|
} elsif (/^\s*DECLARE_ASN1_NDEF_FUNCTION\s*\(\s*(\w*)\s*\)/) {
|
2002-10-05 01:38:58 +00:00
|
|
|
$def .= "int i2d_$1_NDEF(void);";
|
2001-02-22 13:24:17 +00:00
|
|
|
} elsif (/^\s*DECLARE_ASN1_SET_OF\s*\(\s*(\w*)\s*\)/) {
|
|
|
|
next;
|
2005-11-06 20:33:33 +00:00
|
|
|
} elsif (/^\s*DECLARE_ASN1_PRINT_FUNCTION\s*\(\s*(\w*)\s*\)/) {
|
|
|
|
$def .= "int $1_print_ctx(void);";
|
|
|
|
next;
|
|
|
|
} elsif (/^\s*DECLARE_ASN1_PRINT_FUNCTION_name\s*\(\s*(\w*)\s*,\s*(\w*)\s*\)/) {
|
|
|
|
$def .= "int $2_print_ctx(void);";
|
|
|
|
next;
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
} elsif (/^\s*DECLARE_PKCS12_STACK_OF\s*\(\s*(\w*)\s*\)/) {
|
|
|
|
next;
|
2001-02-22 13:24:17 +00:00
|
|
|
} elsif (/^DECLARE_PEM_rw\s*\(\s*(\w*)\s*,/ ||
|
2005-07-24 21:45:45 +00:00
|
|
|
/^DECLARE_PEM_rw_cb\s*\(\s*(\w*)\s*,/ ||
|
|
|
|
/^DECLARE_PEM_rw_const\s*\(\s*(\w*)\s*,/ ) {
|
2001-02-22 13:24:17 +00:00
|
|
|
$def .=
|
|
|
|
"#INFO:"
|
2015-01-12 22:29:26 +00:00
|
|
|
.join(',',@current_platforms).":"
|
2016-08-05 08:57:47 +00:00
|
|
|
.join(',',"STDIO",@current_algorithms).";";
|
2001-02-22 13:24:17 +00:00
|
|
|
$def .= "int PEM_read_$1(void);";
|
|
|
|
$def .= "int PEM_write_$1(void);";
|
|
|
|
$def .=
|
|
|
|
"#INFO:"
|
|
|
|
.join(',',@current_platforms).":"
|
|
|
|
.join(',',@current_algorithms).";";
|
|
|
|
# Things that are everywhere
|
|
|
|
$def .= "int PEM_read_bio_$1(void);";
|
|
|
|
$def .= "int PEM_write_bio_$1(void);";
|
|
|
|
next;
|
|
|
|
} elsif (/^DECLARE_PEM_write\s*\(\s*(\w*)\s*,/ ||
|
2011-12-23 14:58:30 +00:00
|
|
|
/^DECLARE_PEM_write_const\s*\(\s*(\w*)\s*,/ ||
|
2001-02-22 13:24:17 +00:00
|
|
|
/^DECLARE_PEM_write_cb\s*\(\s*(\w*)\s*,/ ) {
|
|
|
|
$def .=
|
|
|
|
"#INFO:"
|
2015-01-12 22:29:26 +00:00
|
|
|
.join(',',@current_platforms).":"
|
2016-08-05 08:57:47 +00:00
|
|
|
.join(',',"STDIO",@current_algorithms).";";
|
2001-02-22 13:24:17 +00:00
|
|
|
$def .= "int PEM_write_$1(void);";
|
|
|
|
$def .=
|
|
|
|
"#INFO:"
|
|
|
|
.join(',',@current_platforms).":"
|
|
|
|
.join(',',@current_algorithms).";";
|
|
|
|
# Things that are everywhere
|
|
|
|
$def .= "int PEM_write_bio_$1(void);";
|
|
|
|
next;
|
|
|
|
} elsif (/^DECLARE_PEM_read\s*\(\s*(\w*)\s*,/ ||
|
|
|
|
/^DECLARE_PEM_read_cb\s*\(\s*(\w*)\s*,/ ) {
|
|
|
|
$def .=
|
|
|
|
"#INFO:"
|
2015-01-12 22:29:26 +00:00
|
|
|
.join(',',@current_platforms).":"
|
2016-08-05 08:57:47 +00:00
|
|
|
.join(',',"STDIO",@current_algorithms).";";
|
2001-02-22 13:24:17 +00:00
|
|
|
$def .= "int PEM_read_$1(void);";
|
|
|
|
$def .=
|
|
|
|
"#INFO:"
|
|
|
|
.join(',',@current_platforms).":"
|
2016-08-05 08:57:47 +00:00
|
|
|
.join(',',"STDIO",@current_algorithms).";";
|
2001-02-22 13:24:17 +00:00
|
|
|
# Things that are everywhere
|
|
|
|
$def .= "int PEM_read_bio_$1(void);";
|
|
|
|
next;
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
} elsif (/^OPENSSL_DECLARE_GLOBAL\s*\(\s*(\w*)\s*,\s*(\w*)\s*\)/) {
|
|
|
|
# Variant for platforms that do not
|
|
|
|
# have to access globale variables
|
|
|
|
# in shared libraries through functions
|
|
|
|
$def .=
|
|
|
|
"#INFO:"
|
|
|
|
.join(',',"!EXPORT_VAR_AS_FUNCTION",@current_platforms).":"
|
|
|
|
.join(',',@current_algorithms).";";
|
|
|
|
$def .= "OPENSSL_EXTERN int _shadow_$2;";
|
|
|
|
$def .=
|
|
|
|
"#INFO:"
|
|
|
|
.join(',',@current_platforms).":"
|
|
|
|
.join(',',@current_algorithms).";";
|
|
|
|
# Variant for platforms that have to
|
|
|
|
# access globale variables in shared
|
|
|
|
# libraries through functions
|
|
|
|
&$make_variant("_shadow_$2","_shadow_$2",
|
|
|
|
"EXPORT_VAR_AS_FUNCTION",
|
|
|
|
"FUNCTION");
|
2016-01-09 13:40:02 +00:00
|
|
|
} elsif (/^\s*DEPRECATEDIN/) {
|
2014-12-17 13:17:26 +00:00
|
|
|
$parens = count_parens($_);
|
2015-03-24 14:02:51 +00:00
|
|
|
if ($parens == 0) {
|
2016-01-09 13:40:02 +00:00
|
|
|
$def .= do_deprecated($_,
|
|
|
|
\@current_platforms,
|
|
|
|
\@current_algorithms);
|
2015-03-24 14:02:51 +00:00
|
|
|
} else {
|
|
|
|
$stored_multiline = $_;
|
Perl's chop / chomp considered bad, use a regexp instead
Once upon a time, there was chop, which somply chopped off the last
character of $_ or a given variable, and it was used to take off the
EOL character (\n) of strings.
... but then, you had to check for the presence of such character.
So came chomp, the better chop which checks for \n before chopping it
off. And this worked well, as long as Perl made internally sure that
all EOLs were converted to \n.
These days, though, there seems to be a mixture of perls, so lines
from files in the "wrong" environment might have \r\n as EOL, or just
\r (Mac OS, unless I'm misinformed).
So it's time we went for the more generic variant and use s|\R$||, the
better chomp which recognises all kinds of known EOLs and chops them
off.
A few chops were left alone, as they are use as surgical tools to
remove one last slash or one last comma.
NOTE: \R came with perl 5.10.0. It means that from now on, our
scripts will fail with any older version.
Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-02-11 20:47:30 +00:00
|
|
|
$stored_multiline =~ s|\R$||;
|
2016-01-09 13:40:02 +00:00
|
|
|
print STDERR "DEBUG: Found multiline DEPRECATEDIN starting with: $stored_multiline\n" if $debug;
|
2015-03-24 14:02:51 +00:00
|
|
|
next;
|
|
|
|
}
|
2001-02-22 13:24:17 +00:00
|
|
|
} elsif ($tag{'CONST_STRICT'} != 1) {
|
2000-09-07 08:43:08 +00:00
|
|
|
if (/\{|\/\*|\([^\)]*$/) {
|
1999-04-26 00:23:10 +00:00
|
|
|
$line = $_;
|
|
|
|
} else {
|
|
|
|
$def .= $_;
|
|
|
|
}
|
1998-12-21 10:52:47 +00:00
|
|
|
}
|
|
|
|
}
|
2001-02-22 13:24:17 +00:00
|
|
|
}
|
1998-12-21 10:52:47 +00:00
|
|
|
close(IN);
|
2016-02-26 14:10:17 +00:00
|
|
|
die "$file: Unmatched tags\n" if $#tag >= 0;
|
1999-04-26 00:23:10 +00:00
|
|
|
|
2000-09-07 08:43:08 +00:00
|
|
|
my $algs;
|
|
|
|
my $plays;
|
|
|
|
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
print STDERR "DEBUG: postprocessing ----------\n" if $debug;
|
1999-04-26 00:23:10 +00:00
|
|
|
foreach (split /;/, $def) {
|
2000-09-07 08:43:08 +00:00
|
|
|
my $s; my $k = "FUNCTION"; my $p; my $a;
|
1999-04-26 00:23:10 +00:00
|
|
|
s/^[\n\s]*//g;
|
|
|
|
s/[\n\s]*$//g;
|
2000-09-07 08:43:08 +00:00
|
|
|
next if(/\#undef/);
|
1999-04-26 00:23:10 +00:00
|
|
|
next if(/typedef\W/);
|
2000-09-07 08:43:08 +00:00
|
|
|
next if(/\#define/);
|
|
|
|
|
2006-01-02 12:13:07 +00:00
|
|
|
# Reduce argument lists to empty ()
|
|
|
|
# fold round brackets recursively: (t(*v)(t),t) -> (t{}{},t) -> {}
|
|
|
|
while(/\(.*\)/s) {
|
|
|
|
s/\([^\(\)]+\)/\{\}/gs;
|
|
|
|
s/\(\s*\*\s*(\w+)\s*\{\}\s*\)/$1/gs; #(*f{}) -> f
|
|
|
|
}
|
|
|
|
# pretend as we didn't use curly braces: {} -> ()
|
|
|
|
s/\{\}/\(\)/gs;
|
|
|
|
|
|
|
|
s/STACK_OF\(\)/void/gs;
|
2008-05-31 21:20:53 +00:00
|
|
|
s/LHASH_OF\(\)/void/gs;
|
2006-01-02 12:13:07 +00:00
|
|
|
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
print STDERR "DEBUG: \$_ = \"$_\"\n" if $debug;
|
2000-09-07 08:43:08 +00:00
|
|
|
if (/^\#INFO:([^:]*):(.*)$/) {
|
|
|
|
$plats = $1;
|
|
|
|
$algs = $2;
|
2001-09-26 15:06:45 +00:00
|
|
|
print STDERR "DEBUG: found info on platforms ($plats) and algorithms ($algs)\n" if $debug;
|
2000-09-07 08:43:08 +00:00
|
|
|
next;
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
} elsif (/^\s*OPENSSL_EXTERN\s.*?(\w+(\{[0-9]+\})?)(\[[0-9]*\])*\s*$/) {
|
2000-09-07 08:43:08 +00:00
|
|
|
$s = $1;
|
|
|
|
$k = "VARIABLE";
|
2001-09-26 15:06:45 +00:00
|
|
|
print STDERR "DEBUG: found external variable $s\n" if $debug;
|
2006-01-02 12:13:07 +00:00
|
|
|
} elsif (/TYPEDEF_\w+_OF/s) {
|
1999-04-26 00:23:10 +00:00
|
|
|
next;
|
2006-01-02 12:13:07 +00:00
|
|
|
} elsif (/(\w+)\s*\(\).*/s) { # first token prior [first] () is
|
|
|
|
$s = $1; # a function name!
|
2001-09-26 15:06:45 +00:00
|
|
|
print STDERR "DEBUG: found function $s\n" if $debug;
|
1999-04-26 00:23:10 +00:00
|
|
|
} elsif (/\(/ and not (/=/)) {
|
|
|
|
print STDERR "File $file: cannot parse: $_;\n";
|
2000-09-07 08:43:08 +00:00
|
|
|
next;
|
|
|
|
} else {
|
|
|
|
next;
|
|
|
|
}
|
|
|
|
|
|
|
|
$syms{$s} = 1;
|
|
|
|
$kind{$s} = $k;
|
|
|
|
|
|
|
|
$p = $plats;
|
|
|
|
$a = $algs;
|
|
|
|
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
$platform{$s} =
|
|
|
|
&reduce_platforms((defined($platform{$s})?$platform{$s}.',':"").$p);
|
2000-09-07 08:43:08 +00:00
|
|
|
$algorithm{$s} .= ','.$a;
|
|
|
|
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
if (defined($variant{$s})) {
|
2001-03-02 12:14:54 +00:00
|
|
|
foreach $v (split /;/,$variant{$s}) {
|
|
|
|
(my $r, my $p, my $k) = split(/:/,$v);
|
|
|
|
my $ip = join ',',map({ /^!(.*)$/ ? $1 : "!".$_ } split /,/, $p);
|
|
|
|
$syms{$r} = 1;
|
|
|
|
if (!defined($k)) { $k = $kind{$s}; }
|
|
|
|
$kind{$r} = $k."(".$s.")";
|
|
|
|
$algorithm{$r} = $algorithm{$s};
|
|
|
|
$platform{$r} = &reduce_platforms($platform{$s}.",".$p.",".$p);
|
|
|
|
$platform{$s} = &reduce_platforms($platform{$s}.','.$ip.','.$ip);
|
|
|
|
print STDERR "DEBUG: \$variant{\"$s\"} = ",$v,"; \$r = $r; \$p = ",$platform{$r},"; \$a = ",$algorithm{$r},"; \$kind = ",$kind{$r},"\n" if $debug;
|
|
|
|
}
|
1999-04-26 00:23:10 +00:00
|
|
|
}
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
print STDERR "DEBUG: \$s = $s; \$p = ",$platform{$s},"; \$a = ",$algorithm{$s},"; \$kind = ",$kind{$s},"\n" if $debug;
|
1998-12-21 10:52:47 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2000-09-07 08:43:08 +00:00
|
|
|
# Prune the returned symbols
|
1999-04-26 00:23:10 +00:00
|
|
|
|
2000-09-07 08:43:08 +00:00
|
|
|
delete $syms{"bn_dump1"};
|
2015-01-12 22:29:26 +00:00
|
|
|
$platform{"BIO_s_log"} .= ",!WIN32,!macintosh";
|
2000-09-07 08:43:08 +00:00
|
|
|
|
2001-02-22 13:24:17 +00:00
|
|
|
$platform{"PEM_read_NS_CERT_SEQ"} = "VMS";
|
|
|
|
$platform{"PEM_write_NS_CERT_SEQ"} = "VMS";
|
|
|
|
$platform{"PEM_read_P8_PRIV_KEY_INFO"} = "VMS";
|
|
|
|
$platform{"PEM_write_P8_PRIV_KEY_INFO"} = "VMS";
|
|
|
|
|
2000-09-07 08:43:08 +00:00
|
|
|
# Info we know about
|
|
|
|
|
|
|
|
push @ret, map { $_."\\".&info_string($_,"EXIST",
|
|
|
|
$platform{$_},
|
|
|
|
$kind{$_},
|
|
|
|
$algorithm{$_}) } keys %syms;
|
|
|
|
|
2000-12-29 00:05:14 +00:00
|
|
|
if (keys %unknown_algorithms) {
|
|
|
|
print STDERR "WARNING: mkdef.pl doesn't know the following algorithms:\n";
|
|
|
|
print STDERR "\t",join("\n\t",keys %unknown_algorithms),"\n";
|
|
|
|
}
|
2000-09-07 08:43:08 +00:00
|
|
|
return(@ret);
|
|
|
|
}
|
|
|
|
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
# Param: string of comma-separated platform-specs.
|
|
|
|
sub reduce_platforms
|
|
|
|
{
|
|
|
|
my ($platforms) = @_;
|
2000-09-07 08:43:08 +00:00
|
|
|
my $pl = defined($platforms) ? $platforms : "";
|
|
|
|
my %p = map { $_ => 0 } split /,/, $pl;
|
|
|
|
my $ret;
|
|
|
|
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
print STDERR "DEBUG: Entered reduce_platforms with \"$platforms\"\n"
|
|
|
|
if $debug;
|
2000-09-07 08:43:08 +00:00
|
|
|
# We do this, because if there's code like the following, it really
|
|
|
|
# means the function exists in all cases and should therefore be
|
|
|
|
# everywhere. By increasing and decreasing, we may attain 0:
|
|
|
|
#
|
|
|
|
# ifndef WIN16
|
|
|
|
# int foo();
|
|
|
|
# else
|
|
|
|
# int _fat foo();
|
|
|
|
# endif
|
|
|
|
foreach $platform (split /,/, $pl) {
|
|
|
|
if ($platform =~ /^!(.*)$/) {
|
|
|
|
$p{$1}--;
|
|
|
|
} else {
|
|
|
|
$p{$platform}++;
|
1998-12-21 10:52:47 +00:00
|
|
|
}
|
1999-04-26 00:23:10 +00:00
|
|
|
}
|
2000-09-07 08:43:08 +00:00
|
|
|
foreach $platform (keys %p) {
|
|
|
|
if ($p{$platform} == 0) { delete $p{$platform}; }
|
1998-12-21 10:52:47 +00:00
|
|
|
}
|
|
|
|
|
2000-09-07 08:43:08 +00:00
|
|
|
delete $p{""};
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
|
2001-03-02 12:14:54 +00:00
|
|
|
$ret = join(',',sort(map { $p{$_} < 0 ? "!".$_ : $_ } keys %p));
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
print STDERR "DEBUG: Exiting reduce_platforms with \"$ret\"\n"
|
|
|
|
if $debug;
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
2016-01-28 19:17:19 +00:00
|
|
|
sub info_string
|
|
|
|
{
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
(my $symbol, my $exist, my $platforms, my $kind, my $algorithms) = @_;
|
|
|
|
|
|
|
|
my %a = defined($algorithms) ?
|
|
|
|
map { $_ => 1 } split /,/, $algorithms : ();
|
|
|
|
my $k = defined($kind) ? $kind : "FUNCTION";
|
|
|
|
my $ret;
|
|
|
|
my $p = &reduce_platforms($platforms);
|
|
|
|
|
2000-09-07 08:43:08 +00:00
|
|
|
delete $a{""};
|
1998-12-21 10:52:47 +00:00
|
|
|
|
2000-09-07 08:43:08 +00:00
|
|
|
$ret = $exist;
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
$ret .= ":".$p;
|
2000-09-07 08:43:08 +00:00
|
|
|
$ret .= ":".$k;
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
$ret .= ":".join(',',sort keys %a);
|
2000-09-07 08:43:08 +00:00
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
2016-01-28 19:17:19 +00:00
|
|
|
sub maybe_add_info
|
|
|
|
{
|
2000-09-07 08:43:08 +00:00
|
|
|
(my $name, *nums, my @symbols) = @_;
|
|
|
|
my $sym;
|
|
|
|
my $new_info = 0;
|
2000-11-14 13:20:10 +00:00
|
|
|
my %syms=();
|
2000-09-07 08:43:08 +00:00
|
|
|
|
|
|
|
foreach $sym (@symbols) {
|
|
|
|
(my $s, my $i) = split /\\/, $sym;
|
|
|
|
if (defined($nums{$s})) {
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
$i =~ s/^(.*?:.*?:\w+)(\(\w+\))?/$1/;
|
2015-12-15 13:06:26 +00:00
|
|
|
(my $n, my $vers, my $dummy) = split /\\/, $nums{$s};
|
2000-09-07 08:43:08 +00:00
|
|
|
if (!defined($dummy) || $i ne $dummy) {
|
2015-12-15 13:06:26 +00:00
|
|
|
$nums{$s} = $n."\\".$vers."\\".$i;
|
2000-09-07 08:43:08 +00:00
|
|
|
$new_info++;
|
2001-02-21 14:12:03 +00:00
|
|
|
print STDERR "DEBUG: maybe_add_info for $s: \"$dummy\" => \"$i\"\n" if $debug;
|
2000-09-07 08:43:08 +00:00
|
|
|
}
|
|
|
|
}
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
$syms{$s} = 1;
|
2000-11-14 13:20:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
my @s=sort { &parse_number($nums{$a},"n") <=> &parse_number($nums{$b},"n") } keys %nums;
|
|
|
|
foreach $sym (@s) {
|
2015-12-15 13:06:26 +00:00
|
|
|
(my $n, my $vers, my $i) = split /\\/, $nums{$sym};
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
if (!defined($syms{$sym}) && $i !~ /^NOEXIST:/) {
|
2000-11-14 13:20:10 +00:00
|
|
|
$new_info++;
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
print STDERR "DEBUG: maybe_add_info for $sym: -> undefined\n" if $debug;
|
2000-11-14 13:20:10 +00:00
|
|
|
}
|
2000-09-07 08:43:08 +00:00
|
|
|
}
|
|
|
|
if ($new_info) {
|
2016-01-28 19:17:19 +00:00
|
|
|
print STDERR "$name: $new_info old symbols have updated info\n";
|
2000-09-17 15:41:24 +00:00
|
|
|
if (!$do_rewrite) {
|
|
|
|
print STDERR "You should do a rewrite to fix this.\n";
|
|
|
|
}
|
2000-09-07 08:43:08 +00:00
|
|
|
} else {
|
|
|
|
}
|
1999-04-26 00:23:10 +00:00
|
|
|
}
|
1998-12-21 10:52:47 +00:00
|
|
|
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
# Param: string of comma-separated keywords, each possibly prefixed with a "!"
|
|
|
|
sub is_valid
|
|
|
|
{
|
|
|
|
my ($keywords_txt,$platforms) = @_;
|
|
|
|
my (@keywords) = split /,/,$keywords_txt;
|
2005-04-19 23:54:44 +00:00
|
|
|
my ($falsesum, $truesum) = (0, 1);
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
|
|
|
|
# Param: one keyword
|
|
|
|
sub recognise
|
|
|
|
{
|
|
|
|
my ($keyword,$platforms) = @_;
|
|
|
|
|
|
|
|
if ($platforms) {
|
|
|
|
# platforms
|
|
|
|
if ($keyword eq "VMS" && $VMS) { return 1; }
|
|
|
|
if ($keyword eq "WIN32" && $W32) { return 1; }
|
2016-06-26 11:40:15 +00:00
|
|
|
if ($keyword eq "_WIN32" && $W32) { return 1; }
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
if ($keyword eq "WINNT" && $NT) { return 1; }
|
|
|
|
# Special platforms:
|
|
|
|
# EXPORT_VAR_AS_FUNCTION means that global variables
|
2017-02-28 19:00:42 +00:00
|
|
|
# will be represented as functions.
|
|
|
|
if ($keyword eq "EXPORT_VAR_AS_FUNCTION" && $W32) {
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
return 1;
|
|
|
|
}
|
2008-03-12 21:14:28 +00:00
|
|
|
if ($keyword eq "ZLIB" && $zlib) { return 1; }
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
return 0;
|
|
|
|
} else {
|
|
|
|
# algorithms
|
2016-01-07 03:19:09 +00:00
|
|
|
if ($disabled_algorithms{$keyword} == 1) { return 0;}
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
|
|
|
|
# Nothing recognise as true
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach $k (@keywords) {
|
|
|
|
if ($k =~ /^!(.*)$/) {
|
|
|
|
$falsesum += &recognise($1,$platforms);
|
|
|
|
} else {
|
2005-04-19 23:54:44 +00:00
|
|
|
$truesum *= &recognise($k,$platforms);
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
print STDERR "DEBUG: [",$#keywords,",",$#keywords < 0,"] is_valid($keywords_txt) => (\!$falsesum) && $truesum = ",(!$falsesum) && $truesum,"\n" if $debug;
|
|
|
|
return (!$falsesum) && $truesum;
|
|
|
|
}
|
|
|
|
|
1999-12-24 17:26:33 +00:00
|
|
|
sub print_test_file
|
|
|
|
{
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
(*OUT,my $name,*nums,my $testall,my @symbols)=@_;
|
2000-01-07 03:17:47 +00:00
|
|
|
my $n = 1; my @e; my @r;
|
2000-09-07 08:43:08 +00:00
|
|
|
my $sym; my $prev = ""; my $prefSSLeay;
|
|
|
|
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
(@e)=grep(/^SSLeay(\{[0-9]+\})?\\.*?:.*?:.*/,@symbols);
|
|
|
|
(@r)=grep(/^\w+(\{[0-9]+\})?\\.*?:.*?:.*/ && !/^SSLeay(\{[0-9]+\})?\\.*?:.*?:.*/,@symbols);
|
2000-09-07 08:43:08 +00:00
|
|
|
@symbols=((sort @e),(sort @r));
|
|
|
|
|
|
|
|
foreach $sym (@symbols) {
|
|
|
|
(my $s, my $i) = $sym =~ /^(.*?)\\(.*)$/;
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
my $v = 0;
|
|
|
|
$v = 1 if $i=~ /^.*?:.*?:VARIABLE/;
|
|
|
|
my $p = ($i =~ /^[^:]*:([^:]*):/,$1);
|
|
|
|
my $a = ($i =~ /^[^:]*:[^:]*:[^:]*:([^:]*)/,$1);
|
|
|
|
if (!defined($nums{$s})) {
|
|
|
|
print STDERR "Warning: $s does not have a number assigned\n"
|
|
|
|
if(!$do_update);
|
|
|
|
} elsif (is_valid($p,1) && is_valid($a,0)) {
|
|
|
|
my $s2 = ($s =~ /^(.*?)(\{[0-9]+\})?$/, $1);
|
|
|
|
if ($prev eq $s2) {
|
|
|
|
print OUT "\t/* The following has already appeared previously */\n";
|
|
|
|
print STDERR "Warning: Symbol '",$s2,"' redefined. old=",($nums{$prev} =~ /^(.*?)\\/,$1),", new=",($nums{$s2} =~ /^(.*?)\\/,$1),"\n";
|
|
|
|
}
|
|
|
|
$prev = $s2; # To warn about duplicates...
|
|
|
|
|
2015-12-15 13:06:26 +00:00
|
|
|
(my $nn, my $vers, my $ni) = split /\\/, $nums{$s2};
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
if ($v) {
|
|
|
|
print OUT "\textern int $s2; /* type unknown */ /* $nn $ni */\n";
|
2000-08-17 21:26:22 +00:00
|
|
|
} else {
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
print OUT "\textern int $s2(); /* type unknown */ /* $nn $ni */\n";
|
2000-08-17 21:26:22 +00:00
|
|
|
}
|
1999-12-24 17:26:33 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-01-28 19:17:19 +00:00
|
|
|
sub get_version
|
|
|
|
{
|
2016-01-11 23:17:12 +00:00
|
|
|
return $config{version};
|
2003-11-28 14:51:30 +00:00
|
|
|
}
|
|
|
|
|
1998-12-21 10:52:47 +00:00
|
|
|
sub print_def_file
|
1999-04-26 00:23:10 +00:00
|
|
|
{
|
2000-09-07 08:43:08 +00:00
|
|
|
(*OUT,my $name,*nums,my @symbols)=@_;
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
my $n = 1; my @e; my @r; my @v; my $prev="";
|
2002-07-17 13:27:43 +00:00
|
|
|
my $liboptions="";
|
2003-11-28 14:51:30 +00:00
|
|
|
my $libname = $name;
|
|
|
|
my $http_vendor = 'www.openssl.org/';
|
|
|
|
my $version = get_version();
|
|
|
|
my $what = "OpenSSL: implementation of Secure Socket Layer";
|
|
|
|
my $description = "$what $version, $name - http://$http_vendor";
|
2015-12-14 09:22:58 +00:00
|
|
|
my $prevsymversion = "", $prevprevsymversion = "";
|
2016-01-07 19:49:53 +00:00
|
|
|
# For VMS
|
|
|
|
my $prevnum = 0;
|
2016-01-12 00:07:46 +00:00
|
|
|
my $symvtextcount = 0;
|
2016-01-07 19:49:53 +00:00
|
|
|
|
|
|
|
if ($W32)
|
|
|
|
{ $libname.="32"; }
|
1998-12-21 10:52:47 +00:00
|
|
|
|
2016-03-17 16:53:11 +00:00
|
|
|
if ($W32)
|
2016-01-07 19:49:53 +00:00
|
|
|
{
|
|
|
|
print OUT <<"EOF";
|
1998-12-21 10:52:47 +00:00
|
|
|
;
|
1999-01-31 17:30:18 +00:00
|
|
|
; Definition file for the DLL version of the $name library from OpenSSL
|
1998-12-21 10:52:47 +00:00
|
|
|
;
|
|
|
|
|
2003-11-28 14:51:30 +00:00
|
|
|
LIBRARY $libname $liboptions
|
1998-12-21 10:52:47 +00:00
|
|
|
|
|
|
|
EOF
|
|
|
|
|
2015-12-14 09:22:58 +00:00
|
|
|
print "EXPORTS\n";
|
2016-01-07 19:49:53 +00:00
|
|
|
}
|
|
|
|
elsif ($VMS)
|
|
|
|
{
|
|
|
|
print OUT <<"EOF";
|
2016-01-11 21:33:35 +00:00
|
|
|
CASE_SENSITIVE=YES
|
2016-01-07 19:49:53 +00:00
|
|
|
SYMBOL_VECTOR=(-
|
|
|
|
EOF
|
2016-01-12 00:07:46 +00:00
|
|
|
$symvtextcount = 16; # length of "SYMBOL_VECTOR=(-"
|
2016-01-07 19:49:53 +00:00
|
|
|
}
|
1998-12-21 10:52:47 +00:00
|
|
|
|
2015-12-14 09:22:58 +00:00
|
|
|
(@r)=grep(/^\w+(\{[0-9]+\})?\\.*?:.*?:FUNCTION/,@symbols);
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
(@v)=grep(/^\w+(\{[0-9]+\})?\\.*?:.*?:VARIABLE/,@symbols);
|
2016-01-07 19:49:53 +00:00
|
|
|
if ($VMS) {
|
|
|
|
# VMS needs to have the symbols on slot number order
|
|
|
|
@symbols=(map { $_->[1] }
|
|
|
|
sort { $a->[0] <=> $b->[0] }
|
|
|
|
map { (my $s, my $i) = $_ =~ /^(.*?)\\(.*)$/;
|
|
|
|
die "Error: $s doesn't have a number assigned\n"
|
|
|
|
if !defined($nums{$s});
|
|
|
|
(my $n, my @rest) = split /\\/, $nums{$s};
|
|
|
|
[ $n, $_ ] } (@e, @r, @v));
|
|
|
|
} else {
|
|
|
|
@symbols=((sort @e),(sort @r), (sort @v));
|
|
|
|
}
|
1998-12-21 10:52:47 +00:00
|
|
|
|
2015-12-14 09:22:58 +00:00
|
|
|
my ($baseversion, $currversion) = get_openssl_version();
|
|
|
|
my $thisversion;
|
|
|
|
do {
|
|
|
|
if (!defined($thisversion)) {
|
|
|
|
$thisversion = $baseversion;
|
1999-04-26 00:23:10 +00:00
|
|
|
} else {
|
2015-12-14 09:22:58 +00:00
|
|
|
$thisversion = get_next_version($thisversion);
|
|
|
|
}
|
|
|
|
foreach $sym (@symbols) {
|
|
|
|
(my $s, my $i) = $sym =~ /^(.*?)\\(.*)$/;
|
|
|
|
my $v = 0;
|
|
|
|
$v = 1 if $i =~ /^.*?:.*?:VARIABLE/;
|
|
|
|
if (!defined($nums{$s})) {
|
|
|
|
die "Error: $s does not have a number assigned\n"
|
|
|
|
if(!$do_update);
|
|
|
|
} else {
|
|
|
|
(my $n, my $symversion, my $dummy) = split /\\/, $nums{$s};
|
|
|
|
next if $symversion ne $thisversion;
|
|
|
|
my %pf = ();
|
|
|
|
my $p = ($i =~ /^[^:]*:([^:]*):/,$1);
|
|
|
|
my $a = ($i =~ /^[^:]*:[^:]*:[^:]*:([^:]*)/,$1);
|
|
|
|
if (is_valid($p,1) && is_valid($a,0)) {
|
|
|
|
my $s2 = ($s =~ /^(.*?)(\{[0-9]+\})?$/, $1);
|
|
|
|
if ($prev eq $s2) {
|
|
|
|
print STDERR "Warning: Symbol '",$s2,
|
|
|
|
"' redefined. old=",($nums{$prev} =~ /^(.*?)\\/,$1),
|
|
|
|
", new=",($nums{$s2} =~ /^(.*?)\\/,$1),"\n";
|
|
|
|
}
|
|
|
|
$prev = $s2; # To warn about duplicates...
|
|
|
|
if($linux) {
|
|
|
|
if ($symversion ne $prevsymversion) {
|
|
|
|
if ($prevsymversion ne "") {
|
|
|
|
if ($prevprevsymversion ne "") {
|
|
|
|
print OUT "} OPENSSL_"
|
|
|
|
."$prevprevsymversion;\n\n";
|
|
|
|
} else {
|
|
|
|
print OUT "};\n\n";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
print OUT "OPENSSL_$symversion {\n global:\n";
|
|
|
|
$prevprevsymversion = $prevsymversion;
|
|
|
|
$prevsymversion = $symversion;
|
|
|
|
}
|
|
|
|
print OUT " $s2;\n";
|
2016-01-07 19:49:53 +00:00
|
|
|
} elsif ($VMS) {
|
|
|
|
while(++$prevnum < $n) {
|
2016-01-30 06:14:58 +00:00
|
|
|
my $symline=" ,SPARE -\n ,SPARE -\n";
|
|
|
|
if ($symvtextcount + length($symline) - 2 > 1024) {
|
2016-01-07 19:49:53 +00:00
|
|
|
print OUT ")\nSYMBOL_VECTOR=(-\n";
|
2016-01-12 00:07:46 +00:00
|
|
|
$symvtextcount = 16; # length of "SYMBOL_VECTOR=(-"
|
2016-01-07 19:49:53 +00:00
|
|
|
}
|
2016-01-30 06:14:58 +00:00
|
|
|
if ($symvtextcount == 16) {
|
|
|
|
# Take away first comma
|
|
|
|
$symline =~ s/,//;
|
2016-01-12 00:07:46 +00:00
|
|
|
}
|
2016-01-30 06:14:58 +00:00
|
|
|
print OUT $symline;
|
|
|
|
$symvtextcount += length($symline) - 2;
|
2016-01-07 19:49:53 +00:00
|
|
|
}
|
|
|
|
(my $s_uc = $s) =~ tr/a-z/A-Z/;
|
2016-01-12 02:42:56 +00:00
|
|
|
my $symtype=
|
|
|
|
$v ? "DATA" : "PROCEDURE";
|
|
|
|
my $symline=
|
|
|
|
($s_uc ne $s
|
2016-01-30 06:14:58 +00:00
|
|
|
? " ,$s_uc/$s=$symtype -\n ,$s=$symtype -\n"
|
|
|
|
: " ,$s=$symtype -\n ,SPARE -\n");
|
|
|
|
if ($symvtextcount + length($symline) - 2 > 1024) {
|
2016-01-07 19:49:53 +00:00
|
|
|
print OUT ")\nSYMBOL_VECTOR=(-\n";
|
2016-01-12 00:07:46 +00:00
|
|
|
$symvtextcount = 16; # length of "SYMBOL_VECTOR=(-"
|
2016-01-07 19:49:53 +00:00
|
|
|
}
|
2016-01-30 06:14:58 +00:00
|
|
|
if ($symvtextcount == 16) {
|
|
|
|
# Take away first comma
|
|
|
|
$symline =~ s/,//;
|
2016-01-12 00:07:46 +00:00
|
|
|
}
|
2016-01-30 06:14:58 +00:00
|
|
|
print OUT $symline;
|
|
|
|
$symvtextcount += length($symline) - 2;
|
2016-03-17 16:53:11 +00:00
|
|
|
} elsif($v) {
|
2016-05-09 21:50:43 +00:00
|
|
|
printf OUT " %s%-39s DATA\n",
|
|
|
|
($W32)?"":"_",$s2;
|
2015-12-14 09:22:58 +00:00
|
|
|
} else {
|
2016-05-09 21:50:43 +00:00
|
|
|
printf OUT " %s%s\n",
|
|
|
|
($W32)?"":"_",$s2;
|
2015-12-14 09:22:58 +00:00
|
|
|
}
|
2000-12-16 01:19:24 +00:00
|
|
|
}
|
2000-09-11 17:31:05 +00:00
|
|
|
}
|
1998-12-21 10:52:47 +00:00
|
|
|
}
|
2015-12-14 09:22:58 +00:00
|
|
|
} while ($thisversion ne $currversion);
|
|
|
|
if ($linux) {
|
|
|
|
if ($prevprevsymversion ne "") {
|
|
|
|
print OUT " local: *;\n} OPENSSL_$prevprevsymversion;\n\n";
|
|
|
|
} else {
|
|
|
|
print OUT " local: *;\n};\n\n";
|
|
|
|
}
|
2016-01-07 19:49:53 +00:00
|
|
|
} elsif ($VMS) {
|
|
|
|
print OUT ")\n";
|
|
|
|
(my $libvmaj, my $libvmin, my $libvedit) =
|
|
|
|
$currversion =~ /^(\d+)_(\d+)_(\d+)$/;
|
|
|
|
# The reason to multiply the edit number with 100 is to make space
|
|
|
|
# for the possibility that we want to encode the patch letters
|
|
|
|
print OUT "GSMATCH=LEQUAL,",($libvmaj * 100 + $libvmin),",",($libvedit * 100),"\n";
|
|
|
|
}
|
1999-04-26 00:23:10 +00:00
|
|
|
printf OUT "\n";
|
|
|
|
}
|
1998-12-21 10:52:47 +00:00
|
|
|
|
|
|
|
sub load_numbers
|
1999-04-26 00:23:10 +00:00
|
|
|
{
|
|
|
|
my($name)=@_;
|
|
|
|
my(@a,%ret);
|
2015-12-14 09:22:58 +00:00
|
|
|
my $prevversion;
|
1998-12-21 10:52:47 +00:00
|
|
|
|
1999-02-11 01:39:30 +00:00
|
|
|
$max_num = 0;
|
2000-09-07 08:43:08 +00:00
|
|
|
$num_noinfo = 0;
|
|
|
|
$prev = "";
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
$prev_cnt = 0;
|
1999-02-11 01:39:30 +00:00
|
|
|
|
2015-12-14 09:22:58 +00:00
|
|
|
my ($baseversion, $currversion) = get_openssl_version();
|
|
|
|
|
1998-12-21 10:52:47 +00:00
|
|
|
open(IN,"<$name") || die "unable to open $name:$!\n";
|
1999-04-26 00:23:10 +00:00
|
|
|
while (<IN>) {
|
Perl's chop / chomp considered bad, use a regexp instead
Once upon a time, there was chop, which somply chopped off the last
character of $_ or a given variable, and it was used to take off the
EOL character (\n) of strings.
... but then, you had to check for the presence of such character.
So came chomp, the better chop which checks for \n before chopping it
off. And this worked well, as long as Perl made internally sure that
all EOLs were converted to \n.
These days, though, there seems to be a mixture of perls, so lines
from files in the "wrong" environment might have \r\n as EOL, or just
\r (Mac OS, unless I'm misinformed).
So it's time we went for the more generic variant and use s|\R$||, the
better chomp which recognises all kinds of known EOLs and chops them
off.
A few chops were left alone, as they are use as surgical tools to
remove one last slash or one last comma.
NOTE: \R came with perl 5.10.0. It means that from now on, our
scripts will fail with any older version.
Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-02-11 20:47:30 +00:00
|
|
|
s|\R$||; # Better chomp
|
1998-12-21 10:52:47 +00:00
|
|
|
s/#.*$//;
|
|
|
|
next if /^\s*$/;
|
|
|
|
@a=split;
|
2000-09-07 08:43:08 +00:00
|
|
|
if (defined $ret{$a[0]}) {
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
# This is actually perfectly OK
|
|
|
|
#print STDERR "Warning: Symbol '",$a[0],"' redefined. old=",$ret{$a[0]},", new=",$a[1],"\n";
|
2000-09-07 08:43:08 +00:00
|
|
|
}
|
|
|
|
if ($max_num > $a[1]) {
|
|
|
|
print STDERR "Warning: Number decreased from ",$max_num," to ",$a[1],"\n";
|
|
|
|
}
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
elsif ($max_num == $a[1]) {
|
2000-09-07 08:43:08 +00:00
|
|
|
# This is actually perfectly OK
|
|
|
|
#print STDERR "Warning: Symbol ",$a[0]," has same number as previous ",$prev,": ",$a[1],"\n";
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
if ($a[0] eq $prev) {
|
|
|
|
$prev_cnt++;
|
|
|
|
$a[0] .= "{$prev_cnt}";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$prev_cnt = 0;
|
2000-09-07 08:43:08 +00:00
|
|
|
}
|
|
|
|
if ($#a < 2) {
|
|
|
|
# Existence will be proven later, in do_defs
|
|
|
|
$ret{$a[0]}=$a[1];
|
|
|
|
$num_noinfo++;
|
|
|
|
} else {
|
2015-12-14 09:22:58 +00:00
|
|
|
#Sanity check the version number
|
|
|
|
if (defined $prevversion) {
|
|
|
|
check_version_lte($prevversion, $a[2]);
|
|
|
|
}
|
|
|
|
check_version_lte($a[2], $currversion);
|
|
|
|
$prevversion = $a[2];
|
|
|
|
$ret{$a[0]}=$a[1]."\\".$a[2]."\\".$a[3]; # \\ is a special marker
|
2000-09-07 08:43:08 +00:00
|
|
|
}
|
1999-02-11 01:39:30 +00:00
|
|
|
$max_num = $a[1] if $a[1] > $max_num;
|
2000-09-07 08:43:08 +00:00
|
|
|
$prev=$a[0];
|
|
|
|
}
|
|
|
|
if ($num_noinfo) {
|
|
|
|
print STDERR "Warning: $num_noinfo symbols were without info.";
|
|
|
|
if ($do_rewrite) {
|
|
|
|
printf STDERR " The rewrite will fix this.\n";
|
|
|
|
} else {
|
|
|
|
printf STDERR " You should do a rewrite to fix this.\n";
|
|
|
|
}
|
1999-04-26 00:23:10 +00:00
|
|
|
}
|
1998-12-21 10:52:47 +00:00
|
|
|
close(IN);
|
|
|
|
return(%ret);
|
1999-04-26 00:23:10 +00:00
|
|
|
}
|
1999-02-11 01:39:30 +00:00
|
|
|
|
2000-09-07 08:43:08 +00:00
|
|
|
sub parse_number
|
|
|
|
{
|
|
|
|
(my $str, my $what) = @_;
|
2015-12-15 13:06:26 +00:00
|
|
|
(my $n, my $v, my $i) = split(/\\/,$str);
|
2000-09-07 08:43:08 +00:00
|
|
|
if ($what eq "n") {
|
|
|
|
return $n;
|
|
|
|
} else {
|
|
|
|
return $i;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
sub rewrite_numbers
|
|
|
|
{
|
|
|
|
(*OUT,$name,*nums,@symbols)=@_;
|
|
|
|
my $thing;
|
|
|
|
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
my @r = grep(/^\w+(\{[0-9]+\})?\\.*?:.*?:\w+\(\w+\)/,@symbols);
|
2000-09-07 08:43:08 +00:00
|
|
|
my $r; my %r; my %rsyms;
|
|
|
|
foreach $r (@r) {
|
|
|
|
(my $s, my $i) = split /\\/, $r;
|
|
|
|
my $a = $1 if $i =~ /^.*?:.*?:\w+\((\w+)\)/;
|
|
|
|
$i =~ s/^(.*?:.*?:\w+)\(\w+\)/$1/;
|
|
|
|
$r{$a} = $s."\\".$i;
|
|
|
|
$rsyms{$s} = 1;
|
|
|
|
}
|
|
|
|
|
2000-11-14 13:20:10 +00:00
|
|
|
my %syms = ();
|
|
|
|
foreach $_ (@symbols) {
|
|
|
|
(my $n, my $i) = split /\\/;
|
|
|
|
$syms{$n} = 1;
|
|
|
|
}
|
|
|
|
|
2001-09-26 15:06:45 +00:00
|
|
|
my @s=sort {
|
|
|
|
&parse_number($nums{$a},"n") <=> &parse_number($nums{$b},"n")
|
|
|
|
|| $a cmp $b
|
|
|
|
} keys %nums;
|
2000-09-07 08:43:08 +00:00
|
|
|
foreach $sym (@s) {
|
2015-12-15 13:06:26 +00:00
|
|
|
(my $n, my $vers, my $i) = split /\\/, $nums{$sym};
|
2000-09-07 08:43:08 +00:00
|
|
|
next if defined($i) && $i =~ /^.*?:.*?:\w+\(\w+\)/;
|
|
|
|
next if defined($rsyms{$sym});
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
print STDERR "DEBUG: rewrite_numbers for sym = ",$sym,": i = ",$i,", n = ",$n,", rsym{sym} = ",$rsyms{$sym},"syms{sym} = ",$syms{$sym},"\n" if $debug;
|
2000-11-14 13:20:10 +00:00
|
|
|
$i="NOEXIST::FUNCTION:"
|
|
|
|
if !defined($i) || $i eq "" || !defined($syms{$sym});
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
my $s2 = $sym;
|
|
|
|
$s2 =~ s/\{[0-9]+\}$//;
|
2015-12-15 13:06:26 +00:00
|
|
|
printf OUT "%s%-39s %d\t%s\t%s\n","",$s2,$n,$vers,$i;
|
2000-09-07 08:43:08 +00:00
|
|
|
if (exists $r{$sym}) {
|
|
|
|
(my $s, $i) = split /\\/,$r{$sym};
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
my $s2 = $s;
|
|
|
|
$s2 =~ s/\{[0-9]+\}$//;
|
2015-12-15 13:06:26 +00:00
|
|
|
printf OUT "%s%-39s %d\t%s\t%s\n","",$s2,$n,$vers,$i;
|
2000-09-07 08:43:08 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1999-02-11 01:39:30 +00:00
|
|
|
sub update_numbers
|
1999-04-26 00:23:10 +00:00
|
|
|
{
|
2000-09-07 08:43:08 +00:00
|
|
|
(*OUT,$name,*nums,my $start_num, my @symbols)=@_;
|
|
|
|
my $new_syms = 0;
|
2015-12-15 13:06:26 +00:00
|
|
|
my $basevers;
|
|
|
|
my $vers;
|
|
|
|
|
|
|
|
($basevers, $vers) = get_openssl_version();
|
2000-09-07 08:43:08 +00:00
|
|
|
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
my @r = grep(/^\w+(\{[0-9]+\})?\\.*?:.*?:\w+\(\w+\)/,@symbols);
|
2000-09-07 08:43:08 +00:00
|
|
|
my $r; my %r; my %rsyms;
|
|
|
|
foreach $r (@r) {
|
|
|
|
(my $s, my $i) = split /\\/, $r;
|
|
|
|
my $a = $1 if $i =~ /^.*?:.*?:\w+\((\w+)\)/;
|
|
|
|
$i =~ s/^(.*?:.*?:\w+)\(\w+\)/$1/;
|
|
|
|
$r{$a} = $s."\\".$i;
|
|
|
|
$rsyms{$s} = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach $sym (@symbols) {
|
|
|
|
(my $s, my $i) = $sym =~ /^(.*?)\\(.*)$/;
|
|
|
|
next if $i =~ /^.*?:.*?:\w+\(\w+\)/;
|
|
|
|
next if defined($rsyms{$sym});
|
|
|
|
die "ERROR: Symbol $sym had no info attached to it."
|
|
|
|
if $i eq "";
|
|
|
|
if (!exists $nums{$s}) {
|
|
|
|
$new_syms++;
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
my $s2 = $s;
|
|
|
|
$s2 =~ s/\{[0-9]+\}$//;
|
2015-12-15 13:06:26 +00:00
|
|
|
printf OUT "%s%-39s %d\t%s\t%s\n","",$s2, ++$start_num,$vers,$i;
|
2000-09-07 08:43:08 +00:00
|
|
|
if (exists $r{$s}) {
|
2000-09-20 14:47:04 +00:00
|
|
|
($s, $i) = split /\\/,$r{$s};
|
Introduce the possibility to access global variables through
functions on platform were that's the best way to handle exporting
global variables in shared libraries. To enable this functionality,
one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
"OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
is normally done by Configure or something similar).
To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
in the source file (foo.c) like this:
OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
OPENSSL_IMPLEMENT_GLOBAL(double,bar);
To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
OPENSSL_DECLARE_GLOBAL(int,foo);
#define foo OPENSSL_GLOBAL_REF(foo)
OPENSSL_DECLARE_GLOBAL(double,bar);
#define bar OPENSSL_GLOBAL_REF(bar)
The #defines are very important, and therefore so is including the
header file everywere where the defined globals are used.
The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
of ASN.1 items, but that structure is a bt different.
The largest change is in util/mkdef.pl which has been enhanced with
better and easier to understand logic to choose which symbols should
go into the Windows .def files as well as a number of fixes and code
cleanup (among others, algorithm keywords are now sorted
lexicographically to avoid constant rewrites).
2001-03-02 10:38:19 +00:00
|
|
|
$s =~ s/\{[0-9]+\}$//;
|
2015-12-15 13:06:26 +00:00
|
|
|
printf OUT "%s%-39s %d\t%s\t%s\n","",$s, $start_num,$vers,$i;
|
2000-09-07 08:43:08 +00:00
|
|
|
}
|
1999-02-11 01:39:30 +00:00
|
|
|
}
|
1999-04-26 00:23:10 +00:00
|
|
|
}
|
2000-09-07 08:43:08 +00:00
|
|
|
if($new_syms) {
|
2016-01-28 19:17:19 +00:00
|
|
|
print STDERR "$name: Added $new_syms new symbols\n";
|
1999-02-11 01:39:30 +00:00
|
|
|
} else {
|
2016-01-28 19:17:19 +00:00
|
|
|
print STDERR "$name: No new symbols added\n";
|
2000-09-07 08:43:08 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
sub check_existing
|
|
|
|
{
|
|
|
|
(*nums, my @symbols)=@_;
|
|
|
|
my %existing; my @remaining;
|
|
|
|
@remaining=();
|
|
|
|
foreach $sym (@symbols) {
|
|
|
|
(my $s, my $i) = $sym =~ /^(.*?)\\(.*)$/;
|
|
|
|
$existing{$s}=1;
|
|
|
|
}
|
|
|
|
foreach $sym (keys %nums) {
|
|
|
|
if (!exists $existing{$sym}) {
|
|
|
|
push @remaining, $sym;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(@remaining) {
|
|
|
|
print STDERR "The following symbols do not seem to exist:\n";
|
|
|
|
foreach $sym (@remaining) {
|
|
|
|
print STDERR "\t",$sym,"\n";
|
|
|
|
}
|
1999-02-11 01:39:30 +00:00
|
|
|
}
|
1999-04-26 00:23:10 +00:00
|
|
|
}
|
2000-09-07 08:43:08 +00:00
|
|
|
|
2014-12-17 13:17:26 +00:00
|
|
|
sub count_parens
|
|
|
|
{
|
|
|
|
my $line = shift(@_);
|
|
|
|
|
|
|
|
my $open = $line =~ tr/\(//;
|
|
|
|
my $close = $line =~ tr/\)//;
|
|
|
|
|
|
|
|
return $open - $close;
|
|
|
|
}
|
|
|
|
|
2015-12-14 09:22:58 +00:00
|
|
|
#Parse opensslv.h to get the current version number. Also work out the base
|
|
|
|
#version, i.e. the lowest version number that is binary compatible with this
|
|
|
|
#version
|
|
|
|
sub get_openssl_version()
|
|
|
|
{
|
2016-01-29 23:03:58 +00:00
|
|
|
my $fn = catfile($config{sourcedir},"include","openssl","opensslv.h");
|
|
|
|
open (IN, "$fn") || die "Can't open opensslv.h";
|
2015-12-14 09:22:58 +00:00
|
|
|
|
|
|
|
while(<IN>) {
|
|
|
|
if (/OPENSSL_VERSION_TEXT\s+"OpenSSL (\d\.\d\.)(\d[a-z]*)(-| )/) {
|
|
|
|
my $suffix = $2;
|
2016-01-14 19:22:36 +00:00
|
|
|
(my $baseversion = $1) =~ s/\./_/g;
|
2015-12-14 09:22:58 +00:00
|
|
|
close IN;
|
|
|
|
return ($baseversion."0", $baseversion.$suffix);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
die "Can't find OpenSSL version number\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
#Given an OpenSSL version number, calculate the next version number. If the
|
|
|
|
#version number gets to a.b.czz then we go to a.b.(c+1)
|
|
|
|
sub get_next_version()
|
|
|
|
{
|
|
|
|
my $thisversion = shift;
|
|
|
|
|
|
|
|
my ($base, $letter) = $thisversion =~ /^(\d_\d_\d)([a-z]{0,2})$/;
|
|
|
|
|
|
|
|
if ($letter eq "zz") {
|
|
|
|
my $lastnum = substr($base, -1);
|
|
|
|
return substr($base, 0, length($base)-1).(++$lastnum);
|
|
|
|
}
|
|
|
|
return $base.get_next_letter($letter);
|
|
|
|
}
|
|
|
|
|
|
|
|
#Given the letters off the end of an OpenSSL version string, calculate what
|
|
|
|
#the letters for the next release would be.
|
|
|
|
sub get_next_letter()
|
|
|
|
{
|
|
|
|
my $thisletter = shift;
|
|
|
|
my $baseletter = "";
|
|
|
|
my $endletter;
|
|
|
|
|
|
|
|
if ($thisletter eq "") {
|
|
|
|
return "a";
|
|
|
|
}
|
|
|
|
if ((length $thisletter) > 1) {
|
|
|
|
($baseletter, $endletter) = $thisletter =~ /([a-z]+)([a-z])/;
|
|
|
|
} else {
|
|
|
|
$endletter = $thisletter;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($endletter eq "z") {
|
|
|
|
return $thisletter."a";
|
|
|
|
} else {
|
|
|
|
return $baseletter.(++$endletter);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#Check if a version is less than or equal to the current version. Its a fatal
|
|
|
|
#error if not. They must also only differ in letters, or the last number (i.e.
|
|
|
|
#the first two numbers must be the same)
|
|
|
|
sub check_version_lte()
|
|
|
|
{
|
|
|
|
my ($testversion, $currversion) = @_;
|
|
|
|
my $lentv;
|
|
|
|
my $lencv;
|
|
|
|
my $cvbase;
|
|
|
|
|
|
|
|
my ($cvnums) = $currversion =~ /^(\d_\d_\d)[a-z]*$/;
|
|
|
|
my ($tvnums) = $testversion =~ /^(\d_\d_\d)[a-z]*$/;
|
|
|
|
|
|
|
|
#Die if we can't parse the version numbers or they don't look sane
|
|
|
|
die "Invalid version number: $testversion and $currversion\n"
|
|
|
|
if (!defined($cvnums) || !defined($tvnums)
|
|
|
|
|| length($cvnums) != 5
|
|
|
|
|| length($tvnums) != 5);
|
|
|
|
|
|
|
|
#If the base versions (without letters) don't match check they only differ
|
|
|
|
#in the last number
|
|
|
|
if ($cvnums ne $tvnums) {
|
|
|
|
die "Invalid version number: $testversion "
|
|
|
|
."for current version $currversion\n"
|
2016-10-15 22:13:29 +00:00
|
|
|
if (substr($cvnums, 0, 4) ne substr($tvnums, 0, 4));
|
2015-12-14 09:22:58 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
#If we get here then the base version (i.e. the numbers) are the same - they
|
|
|
|
#only differ in the letters
|
|
|
|
|
|
|
|
$lentv = length $testversion;
|
|
|
|
$lencv = length $currversion;
|
|
|
|
|
|
|
|
#If the testversion has more letters than the current version then it must
|
|
|
|
#be later (or malformed)
|
|
|
|
if ($lentv > $lencv) {
|
|
|
|
die "Invalid version number: $testversion "
|
|
|
|
."is greater than $currversion\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
#Get the last letter from the current version
|
|
|
|
my ($cvletter) = $currversion =~ /([a-z])$/;
|
|
|
|
if (defined $cvletter) {
|
|
|
|
($cvbase) = $currversion =~ /(\d_\d_\d[a-z]*)$cvletter$/;
|
|
|
|
} else {
|
|
|
|
$cvbase = $currversion;
|
|
|
|
}
|
|
|
|
die "Unable to parse version number $currversion" if (!defined $cvbase);
|
|
|
|
my $tvbase;
|
|
|
|
my ($tvletter) = $testversion =~ /([a-z])$/;
|
|
|
|
if (defined $tvletter) {
|
|
|
|
($tvbase) = $testversion =~ /(\d_\d_\d[a-z]*)$tvletter$/;
|
|
|
|
} else {
|
|
|
|
$tvbase = $testversion;
|
|
|
|
}
|
|
|
|
die "Unable to parse version number $testversion" if (!defined $tvbase);
|
|
|
|
|
|
|
|
if ($lencv > $lentv) {
|
|
|
|
#If current version has more letters than testversion then testversion
|
|
|
|
#minus the final letter must be a substring of the current version
|
|
|
|
die "Invalid version number $testversion "
|
|
|
|
."is greater than $currversion or is invalid\n"
|
|
|
|
if (index($cvbase, $tvbase) != 0);
|
|
|
|
} else {
|
|
|
|
#If both versions have the same number of letters then they must be
|
|
|
|
#equal up to the last letter, and the last letter in testversion must
|
|
|
|
#be less than or equal to the last letter in current version.
|
|
|
|
die "Invalid version number $testversion "
|
|
|
|
."is greater than $currversion\n"
|
|
|
|
if (($cvbase ne $tvbase) && ($tvletter gt $cvletter));
|
|
|
|
}
|
|
|
|
}
|
2016-01-09 13:40:02 +00:00
|
|
|
|
|
|
|
sub do_deprecated()
|
|
|
|
{
|
|
|
|
my ($decl, $plats, $algs) = @_;
|
2016-01-09 22:11:18 +00:00
|
|
|
$decl =~ /^\s*(DEPRECATEDIN_\d+_\d+_\d+)\s*\((.*)\)\s*$/
|
|
|
|
or die "Bad DEPRECTEDIN: $decl\n";
|
2016-01-09 13:40:02 +00:00
|
|
|
my $info1 .= "#INFO:";
|
|
|
|
$info1 .= join(',', @{$plats}) . ":";
|
|
|
|
my $info2 = $info1;
|
|
|
|
$info1 .= join(',',@{$algs}, $1) . ";";
|
|
|
|
$info2 .= join(',',@{$algs}) . ";";
|
|
|
|
return $info1 . $2 . ";" . $info2;
|
|
|
|
}
|