提交 d201dbc9 编写于 作者: R Richard Levitte

Ignore ORDINALS in build.info files, and remove its documentation

Following the changes that removed Makefile.shared, we also changed
the generation of .def / .map / .opt files from ordinals more
explicit, removing the need to the "magic" ORDINALS declaration.
Reviewed-by: NRich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/4993)
上级 cfc32a1e
...@@ -399,15 +399,6 @@ support build static libraries and DLLs at the same time, so using ...@@ -399,15 +399,6 @@ support build static libraries and DLLs at the same time, so using
static libraries on Windows can only be done when configured static libraries on Windows can only be done when configured
'no-shared'. 'no-shared'.
For some libraries, we maintain files with public symbols and their
slot in a transfer vector (important on some platforms). It can be
declared like this:
ORDINALS[libcrypto]=crypto
The value is not the name of the file in question, but rather the
argument to util/mkdef.pl that indicates which file to use.
One some platforms, shared libraries come with a name that's different One some platforms, shared libraries come with a name that's different
from their static counterpart. That's declared as follows: from their static counterpart. That's declared as follows:
...@@ -645,8 +636,7 @@ They are all expected to return a string with the lines they produce. ...@@ -645,8 +636,7 @@ They are all expected to return a string with the lines they produce.
libobj2shlib(shlib => "PATH/TO/shlibfile", libobj2shlib(shlib => "PATH/TO/shlibfile",
lib => "PATH/TO/libfile", lib => "PATH/TO/libfile",
objs => [ "PATH/TO/objectfile", ... ], objs => [ "PATH/TO/objectfile", ... ],
deps => [ "PATH/TO/otherlibfile", ... ], deps => [ "PATH/TO/otherlibfile", ... ]);
ordinals => [ "word", "/PATH/TO/ordfile" ]);
'lib' has the intended library file name *without* 'lib' has the intended library file name *without*
extension, libobj2shlib is expected to add that. extension, libobj2shlib is expected to add that.
...@@ -655,11 +645,7 @@ They are all expected to return a string with the lines they produce. ...@@ -655,11 +645,7 @@ They are all expected to return a string with the lines they produce.
libraries (also *without* extension) this library libraries (also *without* extension) this library
needs to be linked with. 'objs' has the list of needs to be linked with. 'objs' has the list of
object files (also *without* extension) to build object files (also *without* extension) to build
this library. 'ordinals' MAY be present, and when this library.
it is, its value is an array where the word is
"crypto" or "ssl" and the file is one of the ordinal
files util/libeay.num or util/ssleay.num in the
source directory.
This function has a choice; it can use the This function has a choice; it can use the
corresponding static library as input to make the corresponding static library as input to make the
......
...@@ -41,10 +41,9 @@ end products. There are variants for them with '_NO_INST' as suffix ...@@ -41,10 +41,9 @@ end products. There are variants for them with '_NO_INST' as suffix
(PROGRAM_NO_INST etc) to specify end products that shouldn't get (PROGRAM_NO_INST etc) to specify end products that shouldn't get
installed. installed.
The variables SOURCE, DEPEND, INCLUDE and ORDINALS are indexed by a The variables SOURCE, DEPEND and INCLUDE are indexed by a produced
produced file, and their values are the source used to produce that file, and their values are the source used to produce that particular
particular produced file, extra dependencies, include directories produced file, extra dependencies, and include directories needed.
needed, and ordinal files (explained further below.
All their values in all the build.info throughout the source tree are All their values in all the build.info throughout the source tree are
collected together and form a set of programs, libraries, engines and collected together and form a set of programs, libraries, engines and
...@@ -57,18 +56,15 @@ dependencies. ...@@ -57,18 +56,15 @@ dependencies.
# build.info # build.info
LIBS=libcrypto libssl LIBS=libcrypto libssl
ORDINALS[libcrypto]=crypto
ORDINALS[libssl]=ssl
INCLUDE[libcrypto]=include INCLUDE[libcrypto]=include
INCLUDE[libssl]=include INCLUDE[libssl]=include
DEPEND[libssl]=libcrypto DEPEND[libssl]=libcrypto
This is the top directory build.info file, and it tells us that two This is the top directory build.info file, and it tells us that two
libraries are to be built, there are some ordinals to be used to libraries are to be built, the include directory 'include/' shall be
declare what symbols in those libraries are seen as public, the used throughout when building anything that will end up in each
include directory 'include/' shall be used throughout when building library, and that the library 'libssl' depend on the library
anything that will end up in each library, and that the library 'libcrypto' to function properly.
'libssl' depend on the library 'libcrypto' to function properly.
# apps/build.info # apps/build.info
PROGRAMS=openssl PROGRAMS=openssl
...@@ -150,11 +146,9 @@ When Configure digests these build.info files, the accumulated ...@@ -150,11 +146,9 @@ When Configure digests these build.info files, the accumulated
information comes down to this: information comes down to this:
LIBS=libcrypto libssl LIBS=libcrypto libssl
ORDINALS[libcrypto]=crypto
SOURCE[libcrypto]=crypto/aes.c crypto/evp.c crypto/cversion.c SOURCE[libcrypto]=crypto/aes.c crypto/evp.c crypto/cversion.c
DEPEND[crypto/cversion.o]=crypto/buildinf.h DEPEND[crypto/cversion.o]=crypto/buildinf.h
INCLUDE[libcrypto]=include INCLUDE[libcrypto]=include
ORDINALS[libssl]=ssl
SOURCE[libssl]=ssl/tls.c SOURCE[libssl]=ssl/tls.c
INCLUDE[libssl]=include INCLUDE[libssl]=include
DEPEND[libssl]=libcrypto DEPEND[libssl]=libcrypto
...@@ -187,9 +181,9 @@ PROGRAMS may be used to declare programs only. ...@@ -187,9 +181,9 @@ PROGRAMS may be used to declare programs only.
ENGINES may be used to declare engines only. ENGINES may be used to declare engines only.
The indexes for SOURCE and ORDINALS must only be end product files, The indexes for SOURCE must only be end product files, such as
such as libraries, programs or engines. The values of SOURCE libraries, programs or engines. The values of SOURCE variables must
variables must only be source files (possibly generated) only be source files (possibly generated).
INCLUDE and DEPEND shows a relationship between different files INCLUDE and DEPEND shows a relationship between different files
(usually produced files) or between files and directories, such as a (usually produced files) or between files and directories, such as a
...@@ -236,12 +230,6 @@ indexes: ...@@ -236,12 +230,6 @@ indexes:
libraries => a list of libraries. These are directly inferred from libraries => a list of libraries. These are directly inferred from
the LIBS variable in build.info files. the LIBS variable in build.info files.
ordinals => a hash table containing 'file' => [ 'word', 'ordfile' ]
pairs. 'file' and 'word' are directly inferred from
the ORDINALS variables in build.info files, while the
file 'ofile' comes from internal knowledge in
Configure.
programs => a list of programs. These are directly inferred from programs => a list of programs. These are directly inferred from
the PROGRAMS variable in build.info files. the PROGRAMS variable in build.info files.
...@@ -359,19 +347,6 @@ section above would be digested into a %unified_info table: ...@@ -359,19 +347,6 @@ section above would be digested into a %unified_info table:
"libcrypto", "libcrypto",
"libssl", "libssl",
], ],
"ordinals" =>
{
"libcrypto" =>
[
"crypto",
"util/libcrypto.num",
],
"libssl" =>
[
"ssl",
"util/libssl.num",
],
},
"programs" => "programs" =>
[ [
"apps/openssl", "apps/openssl",
...@@ -530,8 +505,7 @@ etc. ...@@ -530,8 +505,7 @@ etc.
libobj2shlib(shlib => "PATH/TO/shlibfile", libobj2shlib(shlib => "PATH/TO/shlibfile",
lib => "PATH/TO/libfile", lib => "PATH/TO/libfile",
objs => [ "PATH/TO/objectfile", ... ], objs => [ "PATH/TO/objectfile", ... ],
deps => [ "PATH/TO/otherlibfile", ... ], deps => [ "PATH/TO/otherlibfile", ... ]);
ordinals => [ "word", "/PATH/TO/ordfile" ]);
'lib' has the intended library file name *without* 'lib' has the intended library file name *without*
extension, libobj2shlib is expected to add that. extension, libobj2shlib is expected to add that.
...@@ -540,11 +514,7 @@ etc. ...@@ -540,11 +514,7 @@ etc.
libraries (also *without* extension) this library libraries (also *without* extension) this library
needs to be linked with. 'objs' has the list of needs to be linked with. 'objs' has the list of
object files (also *without* extension) to build object files (also *without* extension) to build
this library. 'ordinals' MAY be present, and when this library.
it is, its value is an array where the word is
"crypto" or "ssl" and the file is one of the ordinal
files util/libcrypto.num or util/libssl.num in the
source directory.
This function has a choice; it can use the This function has a choice; it can use the
corresponding static library as input to make the corresponding static library as input to make the
...@@ -617,8 +587,7 @@ following calls: ...@@ -617,8 +587,7 @@ following calls:
libobj2shlib(shlib => "libcrypto", libobj2shlib(shlib => "libcrypto",
lib => "libcrypto", lib => "libcrypto",
objs => [ "crypto/aes", "crypto/evp", "crypto/cversion" ], objs => [ "crypto/aes", "crypto/evp", "crypto/cversion" ],
deps => [ ] deps => [ ]);
ordinals => [ "crypto", "util/libcrypto.num" ]);
obj2lib(lib => "libcrypto" obj2lib(lib => "libcrypto"
objs => [ "crypto/aes", "crypto/evp", "crypto/cversion" ]); objs => [ "crypto/aes", "crypto/evp", "crypto/cversion" ]);
......
...@@ -1503,6 +1503,7 @@ if ($builder eq "unified") { ...@@ -1503,6 +1503,7 @@ if ($builder eq "unified") {
$config{build_infos} = [ ]; $config{build_infos} = [ ];
my %ordinals = ();
foreach (@build_infos) { foreach (@build_infos) {
my $sourced = catdir($srcdir, $_->[0]); my $sourced = catdir($srcdir, $_->[0]);
my $buildd = catdir($blddir, $_->[0]); my $buildd = catdir($blddir, $_->[0]);
...@@ -1524,7 +1525,6 @@ if ($builder eq "unified") { ...@@ -1524,7 +1525,6 @@ if ($builder eq "unified") {
my @intermediates = (); my @intermediates = ();
my @rawlines = (); my @rawlines = ();
my %ordinals = ();
my %sources = (); my %sources = ();
my %shared_sources = (); my %shared_sources = ();
my %includes = (); my %includes = ();
...@@ -1818,27 +1818,6 @@ EOF ...@@ -1818,27 +1818,6 @@ EOF
if @doubles; if @doubles;
} }
foreach (keys %ordinals) {
my $dest = $_;
my $ddest = cleanfile($buildd, $_, $blddir);
if ($unified_info{rename}->{$ddest}) {
$ddest = $unified_info{rename}->{$ddest};
}
foreach (@{$ordinals{$dest}}) {
my %known_ordinals =
(
crypto =>
cleanfile($sourced, catfile("util", "libcrypto.num"), $blddir),
ssl =>
cleanfile($sourced, catfile("util", "libssl.num"), $blddir)
);
my $o = $known_ordinals{$_};
die "Ordinals for $ddest defined more than once\n"
if $unified_info{ordinals}->{$ddest};
$unified_info{ordinals}->{$ddest} = [ $_, $o ];
}
}
foreach (keys %sources) { foreach (keys %sources) {
my $dest = $_; my $dest = $_;
my $ddest = cleanfile($buildd, $_, $blddir); my $ddest = cleanfile($buildd, $_, $blddir);
...@@ -1993,6 +1972,14 @@ EOF ...@@ -1993,6 +1972,14 @@ EOF
} }
} }
my $ordinals_text = join(', ', sort keys %ordinals);
warn <<"EOF" if $ordinals_text;
WARNING: ORDINALS were specified for $ordinals_text
They are ignored and should be replaced with a combination of GENERATE,
DEPEND and SHARED_SOURCE.
EOF
### Make unified_info a bit more efficient ### Make unified_info a bit more efficient
# One level structures # One level structures
foreach (("programs", "libraries", "engines", "scripts", "extra", "overrides")) { foreach (("programs", "libraries", "engines", "scripts", "extra", "overrides")) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册