+ map { platform->sharedname($_) // () }
+ grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
+ @{$unified_info{libraries}};
+ our @install_engines =
+ grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
+ && $unified_info{attributes}->{modules}->{$_}->{engine} }
+ @{$unified_info{modules}};
+ our @install_modules =
+ grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
+ && !$unified_info{attributes}->{modules}->{$_}->{engine}
+ && !$unified_info{attributes}->{modules}->{$_}->{fips} }
+ @{$unified_info{modules}};
+ our @install_fipsmodules =
+ grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
+ && $unified_info{attributes}->{modules}->{$_}->{fips} }
+ @{$unified_info{modules}};
+ our @install_programs =
+ grep { !$unified_info{attributes}->{programs}->{$_}->{noinst} }
+ @{$unified_info{programs}};
+ our @install_bin_scripts =
+ grep { !$unified_info{attributes}->{scripts}->{$_}->{noinst}
+ && !$unified_info{attributes}->{scripts}->{$_}->{misc} }
+ @{$unified_info{scripts}};
+ our @install_misc_scripts =
+ grep { !$unified_info{attributes}->{scripts}->{$_}->{noinst}
+ && $unified_info{attributes}->{scripts}->{$_}->{misc} }
+ @{$unified_info{scripts}};
+
+ # Configured flags
+
+ our @cnf_asflags = ($target{asflags} || (), @{$config{asflags}});
+ our @cnf_defines = (@{$target{defines}}, @{$config{defines}});
+ our @cnf_includes = (@{$target{includes}}, @{$config{includes}});
+ our @cnf_cppflags = ($target{cppflags} || (), @{$config{cppflags}});
+ our @cnf_cflags = ($target{cflags} || (), @{$config{cflags}});
+ our @cnf_cxxflags = ($target{cxxflags} || (), @{$config{cxxflags}});
+ our @cnf_ldflags = ($target{lflags} || (), @{$config{lflags}});
+ our @cnf_ex_libs = (map{ ",$_" } @{$target{ex_libs}}, @{$config{ex_libs}});
+
+ # Variables starting with $lib_ are used to build library object files
+ # and shared libraries.
+ # Variables starting with $dso_ are used to build DSOs and their object files.
+ # Variables starting with $bin_ are used to build programs and their object
+ # files.
+
+ # The following array is special and is treated separately from the rest of
+ # the lib_ variables.
+ our @lib_cppincludes = (@{$target{lib_includes}}, @{$target{shared_includes}},
+ @{$config{lib_includes}}, @{$config{shared_includes}},
+ @cnf_includes);
+
+ our $lib_cppdefines =
+ join(',', @{$target{lib_defines}}, @{$target{shared_defines}},
+ @{$config{lib_defines}}, @{$config{shared_defines}},
+ @cnf_defines,
+ 'OPENSSLDIR="""$(OPENSSLDIR_C)"""',
+ 'ENGINESDIR="""$(ENGINESDIR_C)"""',
+ 'MODULESDIR="""$(MODULESDIR_C)"""'
+ )
+ . '$(DEFINES)'
+ . "'extradefines'";
+ our $lib_asflags =
+ join(' ', $target{lib_asflags} || (), @{$config{lib_asflags}},
+ @cnf_asflags, '$(ASFLAGS)');
+ our $lib_cppflags =
+ join('', $target{lib_cppflags} || (), $target{shared_cppflags} || (),
+ @{$config{lib_cppflags}}, @{$config{shared_cppflag}},
+ @cnf_cppflags, '/DEFINE=('.$lib_cppdefines.')', '$(CPPFLAGS)');
+ my @lib_cflags = ( $target{lib_cflags} // () );
+ my @lib_cflags_no_inst = ( $target{no_inst_lib_cflags} // @lib_cflags );
+ my @lib_cflags_cont = ( $target{shared_cflag} || (),
+ @{$config{lib_cflags}}, @{$config{shared_cflag}},
+ @cnf_cflags, '$(CFLAGS)');
+ our $lib_cflags = join('', @lib_cflags, @lib_cflags_cont );
+ our $lib_cflags_no_inst = join('', @lib_cflags_no_inst, @lib_cflags_cont );
+ our $lib_ldflags =
+ join('', $target{lib_lflags} || (), $target{shared_ldflag} || (),
+ @{$config{lib_lflags}}, @{$config{shared_ldflag}},
+ @cnf_ldflags, '$(LDFLAGS)');
+ our $lib_ex_libs = join('', @cnf_ex_libs, '$(EX_LIBS)');
+
+ # The following array is special and is treated separately from the rest of
+ # the dso_ variables.
+ our @dso_cppincludes = (@{$target{dso_includes}}, @{$target{module_includes}},
+ @{$config{dso_includes}}, @{$config{module_includes}},
+ @cnf_includes);
+
+ our $dso_cppdefines =
+ join(',', @{$target{dso_defines}}, @{$target{module_defines}},
+ @{$config{dso_defines}}, @{$config{module_defines}},
+ @cnf_defines,
+ )
+ . '$(DEFINES)'
+ . "'extradefines'";
+ our $dso_asflags =
+ join(' ', $target{dso_asflags} || (), $target{module_asflags} || (),
+ @{$config{dso_asflags}}, @{$config{module_asflags}},
+ @cnf_asflags, '$(ASFLAGS)');
+ our $dso_cppflags =
+ join('', $target{dso_cppflags} || (), $target{module_cppflags} || (),
+ @{$config{dso_cppflags}}, @{$config{module_cppflag}},
+ @cnf_cppflags,
+ '/DEFINE=('.$dso_cppdefines.')',
+ '$(CPPFLAGS)');
+ my @dso_cflags = ( $target{dso_cflags} // () );
+ my @dso_cflags_no_inst = ( $target{no_inst_dso_cflags} // @dso_cflags );
+ my @dso_cflags_cont = ( $target{module_cflag} || (),
+ @{$config{dso_cflags}}, @{$config{module_cflag}},
+ @cnf_cflags, '$(CFLAGS)');
+ our $dso_cflags = join('', @dso_cflags, @dso_cflags_cont );
+ our $dso_cflags_no_inst = join('', @dso_cflags_no_inst, @dso_cflags_cont );
+ our $dso_ldflags =
+ join('', $target{dso_lflags} || (), $target{module_ldflag} || (),
+ @{$config{dso_lflags}}, @{$config{module_ldflag}},
+ @cnf_ldflags, '$(LDFLAGS)');
+ our $dso_ex_libs = join('', @cnf_ex_libs, '$(EX_LIBS)');
+
+ # The following array is special and is treated separately from the rest of
+ # the bin_ variables.
+ our @bin_cppincludes = (@{$target{bin_includes}},
+ @{$config{bin_includes}},
+ @cnf_includes);
+
+ our $bin_cppdefines =
+ join(',', @{$target{bin_defines}},
+ @{$config{bin_defines}},
+ @cnf_defines,
+ )
+ . '$(DEFINES)'
+ . "'extradefines'";
+ our $bin_asflags =
+ join(' ', $target{bin_asflags} || (),
+ @{$config{bin_asflags}},
+ @cnf_asflags, '$(ASFLAGS)');
+ our $bin_cppflags =
+ join('', $target{bin_cppflags} || (),
+ @{$config{bin_cppflags}},
+ @cnf_cppflags,
+ '/DEFINE=('.$bin_cppdefines.')',
+ '$(CPPFLAGS)');
+ my @bin_cflags = ( $target{bin_cflags} // () );
+ my @bin_cflags_no_inst = ( $target{no_inst_bin_cflags} // @bin_cflags );
+ my @bin_cflags_cont = ( @{$config{bin_cflags}},
+ @cnf_cflags, '$(CFLAGS)');
+ our $bin_cflags = join('', @bin_cflags, @bin_cflags_cont );
+ our $bin_cflags_no_inst = join('', @bin_cflags_no_inst, @bin_cflags_cont );
+ our $bin_ldflags =
+ join('', $target{bin_lflags} || (),
+ @{$config{bin_lflags}},
+ @cnf_ldflags, '$(LDFLAGS)');
+ our $bin_ex_libs = join('', @cnf_ex_libs, '$(EX_LIBS)');
+
+ # These are horrible hacks, but are needed because recursive inclusion of
+ # files in different directories does not work well with VMS C. We try to
+ # help by specifying extra relative directories. They must always be in Unix
+ # format, relative to the directory where the .c file is located. The logic
+ # is that any inclusion, merged with one of these relative directories, will
+ # find the requested inclusion file.
+ # In the regexps, it's advisable to always start the file name with .*?, as
+ # the C source to OBJ file translation adds stuff at the beginning of the,
+ # name, such as [.ssl]bio_ssl.c -> [.ssl]libssl-shlib-bio_ssl.OBJ
+ foreach (grep /\[\.crypto\.async\.arch\].*?\.o$/, keys %{$unified_info{sources}}) {
+ my $obj = platform->obj($_);
+ push @{$unified_info{includes_extra}->{$obj}}, qw(../);
+ }
+ foreach (grep /\[\.crypto\.ec\.curve448\].*?\.o$/, keys %{$unified_info{sources}}) {
+ my $obj = platform->obj($_);
+ push @{$unified_info{includes_extra}->{$obj}}, qw(./arch_32 ./arch64);
+ }
+ foreach (grep /\[\.crypto\.ec\.curve448.arch_(?:32|64)\].*?\.o$/, keys %{$unified_info{sources}}) {
+ my $obj = platform->obj($_);
+ push @{$unified_info{includes_extra}->{$obj}}, qw(../);
+ }
+ foreach (grep /\[\.ssl\].*?\.o$/, keys %{$unified_info{sources}}) {
+ my $obj = platform->obj($_);
+ # Most of the files in [.ssl] include "ssl_local.h" which includes things
+ # like "record/record.h". Adding "./" as an inclusion directory helps
+ # making this sort of header from these directories.
+ push @{$unified_info{includes_extra}->{$obj}}, qw(./);
+
+ # Additionally, an increasing amount of files in [.ssl] include
+ # "quic/quic_local.h", which in turn includes "../ssl_local.h". Adding
+ # "./quic" as an inclusion directory helps making this sort of header
+ # from these directories.
+ push @{$unified_info{includes_extra}->{$obj}}, qw(./quic);