mirror of
https://github.com/openssl/openssl.git
synced 2025-03-19 19:50:42 +08:00
Build: make it possible to assign macro definitions for specific outputs
Sometimes, some specific program or object file might need an extra macro definition of its own. This allows that to be easily done. Reviewed-by: Paul Dale <paul.dale@oracle.com> (Merged from https://github.com/openssl/openssl/pull/7553)
This commit is contained in:
parent
c1da4b2afe
commit
b96ab5e6d0
@ -467,6 +467,10 @@ include paths the build of their source files should use:
|
||||
|
||||
INCLUDE[foo]=include
|
||||
|
||||
It's also possible to specify C macros that should be defined:
|
||||
|
||||
DEFINE[foo]=FOO BAR=1
|
||||
|
||||
In some cases, one might want to generate some source files from
|
||||
others, that's done as follows:
|
||||
|
||||
|
@ -41,9 +41,10 @@ end products. There are variants for them with '_NO_INST' as suffix
|
||||
(PROGRAM_NO_INST etc) to specify end products that shouldn't get
|
||||
installed.
|
||||
|
||||
The variables SOURCE, DEPEND and INCLUDE are indexed by a produced
|
||||
file, and their values are the source used to produce that particular
|
||||
produced file, extra dependencies, and include directories needed.
|
||||
The variables SOURCE, DEPEND, INCLUDE and DEFINE are indexed by a
|
||||
produced file, and their values are the source used to produce that
|
||||
particular produced file, extra dependencies, include directories
|
||||
needed, or C macros to be defined.
|
||||
|
||||
All their values in all the build.info throughout the source tree are
|
||||
collected together and form a set of programs, libraries, engines and
|
||||
|
@ -85,6 +85,7 @@
|
||||
deps => $unified_info{depends}->{$src},
|
||||
incs => [ @{$unified_info{includes}->{$obj}},
|
||||
@{$unified_info{includes}->{$bin}} ],
|
||||
defs => $unified_info{defines}->{$obj},
|
||||
%opts);
|
||||
foreach (@{$unified_info{depends}->{$src}}) {
|
||||
dogenerate($_, $obj, $bin, %opts);
|
||||
@ -107,6 +108,7 @@
|
||||
deps => $unified_info{depends}->{$obj},
|
||||
incs => [ @{$unified_info{includes}->{$obj}},
|
||||
@{$unified_info{includes}->{$bin}} ],
|
||||
defs => $unified_info{defines}->{$obj},
|
||||
%opts);
|
||||
foreach ((@{$unified_info{sources}->{$obj}},
|
||||
@{$unified_info{depends}->{$obj}})) {
|
||||
|
31
Configure
31
Configure
@ -1722,6 +1722,7 @@ if ($builder eq "unified") {
|
||||
my %sources = ();
|
||||
my %shared_sources = ();
|
||||
my %includes = ();
|
||||
my %defines = ();
|
||||
my %depends = ();
|
||||
my %renames = ();
|
||||
my %sharednames = ();
|
||||
@ -1837,6 +1838,9 @@ if ($builder eq "unified") {
|
||||
qr/^\s*INCLUDE\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/
|
||||
=> sub { push @{$includes{$1}}, tokenize($2)
|
||||
if !@skip || $skip[$#skip] > 0 },
|
||||
qr/^\s*DEFINE\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/
|
||||
=> sub { push @{$defines{$1}}, tokenize($2)
|
||||
if !@skip || $skip[$#skip] > 0 },
|
||||
qr/^\s*DEPEND\[((?:\\.|[^\\\]])*)\]\s*=\s*(.*)\s*$/
|
||||
=> sub { push @{$depends{$1}}, tokenize($2)
|
||||
if !@skip || $skip[$#skip] > 0 },
|
||||
@ -2169,6 +2173,27 @@ EOF
|
||||
unless grep { $_ eq $ib } @{$unified_info{includes}->{$ddest}->{build}};
|
||||
}
|
||||
}
|
||||
|
||||
foreach (keys %defines) {
|
||||
my $dest = $_;
|
||||
my $ddest = cleanfile($sourced, $_, $blddir);
|
||||
|
||||
# If the destination doesn't exist in source, it can only be
|
||||
# a generated file in the build tree.
|
||||
if (! -f $ddest) {
|
||||
$ddest = cleanfile($buildd, $_, $blddir);
|
||||
if ($unified_info{rename}->{$ddest}) {
|
||||
$ddest = $unified_info{rename}->{$ddest};
|
||||
}
|
||||
}
|
||||
foreach (@{$defines{$dest}}) {
|
||||
m|^([^=]*)(=.*)?$|;
|
||||
die "0 length macro name not permitted\n" if $1 eq "";
|
||||
die "$1 defined more than once\n"
|
||||
if defined $unified_info{defines}->{$ddest}->{$1};
|
||||
$unified_info{defines}->{$ddest}->{$1} = $2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
my $ordinals_text = join(', ', sort keys %ordinals);
|
||||
@ -2311,6 +2336,12 @@ EOF
|
||||
}
|
||||
}
|
||||
}
|
||||
# Defines
|
||||
foreach my $dest (sort keys %{$unified_info{defines}}) {
|
||||
$unified_info{defines}->{$dest}
|
||||
= [ map { $_.$unified_info{defines}->{$dest}->{$_} }
|
||||
sort keys %{$unified_info{defines}->{$dest}} ];
|
||||
}
|
||||
# Includes
|
||||
foreach my $dest (sort keys %{$unified_info{includes}}) {
|
||||
if (defined($unified_info{includes}->{$dest}->{build})) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user