Commit b96ab5e6 authored by Richard Levitte's avatar Richard Levitte
Browse files

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: default avatarPaul Dale <paul.dale@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/7553)
parent c1da4b2a
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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:

+4 −3
Original line number Diff line number Diff line
@@ -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
+2 −0
Original line number Diff line number Diff line
@@ -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 −0
Original line number Diff line number Diff line
@@ -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})) {