ex_libs => add("-lsocket -lnsl -ldl"),
dso_scheme => "dlfcn",
thread_scheme => "pthreads",
- shared_target => "self",
+ shared_target => "solaris",
shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)",
shared_ldflag => "-Wl,-Bsymbolic",
shared_defflag => "-Wl,-M,",
lflags => "-Wl,-bsvr4",
thread_scheme => "pthreads",
dso_scheme => "dlfcn",
- shared_target => "self",
+ shared_target => "aix",
module_ldflags => "-Wl,-G,-bsymbolic,-bexpall",
shared_ldflag => "-Wl,-G,-bsymbolic",
shared_defflag => "-Wl,-bE:",
lib_defines => add("L_ENDIAN"),
dso_cflags => "/Zi /Fddso.pdb",
bin_cflags => "/Zi /Fdapp.pdb",
+ # def_flag made to empty string so a .def file gets generated
+ shared_defflag => '',
shared_ldflag => "/dll",
shared_target => "win-shared", # meaningless except it gives Configure a hint
thread_scheme => "winthreads",
dso_cflags => "",
ex_libs => add(sub { return vms_info()->{zlib} || (); }),
shared_target => "vms-shared",
+ # def_flag made to empty string so a .opt file gets generated
+ shared_defflag => '',
dso_scheme => "vms",
thread_scheme => "pthreads",
assembler files used when compiling with
assembler implementations.
shared_target => The shared library building method used.
- This is a target found in Makefile.shared.
+ This serves multiple purposes:
+ - as index for targets found in shared_info.pl.
+ - as linker script generation selector.
+ To serve both purposes, the index for shared_info.pl
+ should end with '-shared', and this suffix will be
+ removed for use as a linker script generation
+ selector. Note that the latter is only used if
+ 'shared_defflag' is defined.
build_scheme => The scheme used to build up a Makefile.
In its simplest form, the value is a string
with the name of the build scheme.
{- output_on() if $disabled{makedepend}; "" -}
GENERATED_MANDATORY={- join(", ", map { "-\n\t".$_ } @{$unified_info{depends}->{""}} ) -}
GENERATED={- # common0.tmpl provides @generated
- join(", ", map { (my $x = $_) =~ s|\.[sS]$|.asm|; "-\n\t".$x }
+ join(", ", map { my $x = $_;
+ $x =~ s|\.[sS]$|.asm|;
+ $x =~ s|\.ld$|.OPT|;
+ "-\n\t".$x }
@generated) -}
INSTALL_LIBS={- join(", ", map { "-\n\t".$_.".OLB" } @install_libs) -}
sub generatesrc {
my %args = @_;
- (my $target = $args{src}) =~ s/\.[sS]$/.asm/;
my $generator = join(" ", @{$args{generator}});
my $generator_incs = join("", map { ' "-I'.$_.'"' } @{$args{generator_incs}});
my $deps = join(", -\n\t\t", @{$args{generator_deps}}, @{$args{deps}});
- if ($target !~ /\.asm$/) {
+ if ($args{src} =~ /\.ld$/) {
+ (my $target = $args{src}) =~ s/\.ld$/.OPT/;
+ my $mkdef = sourcefile('util', 'mkdef.pl');
+ return <<"EOF";
+$target : $args{generator}->[0] $deps
+ \$(PERL) $mkdef $args{generator}->[1] "VMS" > $target
+EOF
+ } elsif ($target !~ /\.[sS]$/) {
+ my $target = $args{src};
if ($args{generator}->[0] =~ m|^.*\.in$|) {
my $dofile = abs2rel(rel2abs(catfile($config{sourcedir},
"util", "dofile.pl")),
EOF
}
} else {
+ (my $target = $args{src}) =~ s/\.[sS]$/.asm/;
if ($args{generator}->[0] =~ /\.pl$/) {
$generator = '$(PERL)'.$generator_incs.' '.$generator;
} elsif ($args{generator}->[0] =~ /\.S$/) {
my @objs = map { (my $x = $_) =~ s|\.o$|.OBJ|; $x }
grep { $_ =~ m|\.o$| }
@{$args{objs}};
- my @defs = grep { $_ =~ /\.opt$/ } @{$args{objs}};
+ my @defs = map { (my $x = $_) =~ s|\.ld$|.OPT|; $x }
+ grep { $_ =~ /\.ld$/ }
+ @{$args{objs}};
my @deps = compute_lib_depends(@{$args{deps}});
die "More than one symbol vector" if scalar @defs > 1;
my $deps = join(", -\n\t\t", @objs, @defs, @deps);
'mingw-shared' => sub {
return {
%{$shared_info{'cygwin-shared'}},
- # def_flag made to empty string so it still generates
+ # def_flag made to empty string so it still generates
# something
shared_defflag => '',
};
## {- join("\n## ", @autowarntext) -}
{-
our $objext = $target{obj_extension} || ".o";
+ our $defext = $target{def_extension} || ".ld";
our $depext = $target{dep_extension} || ".d";
our $exeext = $target{exe_extension} || "";
our $libext = $target{lib_extension} || ".a";
{- output_on() if $disabled{makedepend}; "" -}
GENERATED_MANDATORY={- join(" ", @{$unified_info{depends}->{""}}) -}
GENERATED={- # common0.tmpl provides @generated
- join(" ", @generated ) -}
+ join(" ", map { my $x = $_;
+ $x =~ s|\.ld$|$defext|;
+ $x }
+ @generated ) -}
INSTALL_LIBS={- join(" ", map { lib($_) } @{$unified_info{install}->{libraries}}) -}
INSTALL_SHLIBS={- join(" ", map { shlib($_) } @{$unified_info{install}->{libraries}}) -}
fi; \
done
$(RM) $(LIBS)
- $(RM) *.map
+ $(RM) *.{- $defext -}
clean: libclean
$(RM) $(PROGRAMS) $(TESTPROGS) $(ENGINES) $(SCRIPTS)
my $incs = join("", map { " -I".$_ } @{$args{incs}});
my $deps = join(" ", @{$args{generator_deps}}, @{$args{deps}});
- if ($args{src} !~ /\.[sS]$/) {
+ if ($args{src} =~ /\.ld$/) {
+ (my $target = $args{src}) =~ s/\.ld$/${defext}/;
+ (my $mkdef_os = $target{shared_target}) =~ s|-shared$||;
+ return <<"EOF";
+$target: $args{generator}->[0] $deps
+ \$(PERL) \$(SRCDIR)/util/mkdef.pl $args{generator}->[1] $mkdef_os > $target
+EOF
+ } elsif ($args{src} !~ /\.[sS]$/) {
if ($args{generator}->[0] =~ m|^.*\.in$|) {
my $dofile = abs2rel(rel2abs(catfile($config{sourcedir},
"util", "dofile.pl")),
(my $l = $f) =~ s/^lib//;
" -l$l" } @{$args{deps}});
my @objs = map { (my $x = $_) =~ s|\.o$||; "$x$objext" }
- grep { $_ !~ m/\.(?:def|map)$/ }
+ grep { $_ !~ m/\.ld$/ }
+ @{$args{objs}};
+ my @defs = map { (my $x = $_) =~ s|\.ld$||; "$x$defext" }
+ grep { $_ =~ /\.ld$/ }
@{$args{objs}};
- my @defs = grep { $_ =~ /\.(?:def|map)$/ } @{$args{objs}};
my @deps = compute_lib_depends(@{$args{deps}});
die "More than one exported symbol map" if scalar @defs > 1;
my $objs = join(" ", @objs);
(my $l = $f) =~ s/^lib//;
" -l$l" } @{$args{deps}});
my @objs = map { (my $x = $_) =~ s|\.o$||; "$x$objext" }
- grep { $_ !~ m/\.(?:def|map)$/ }
+ grep { $_ !~ m/\.ld$/ }
@{$args{objs}};
my @deps = compute_lib_depends(@{$args{deps}});
my $objs = join(" ", @objs);
our $objext = $target{obj_extension} || ".obj";
our $resext = $target{res_extension} || ".res";
our $depext = $target{dep_extension} || ".d";
+ our $defext = $target{dep_extension} || ".def";
our $exeext = $target{exe_extension} || ".exe";
our $libext = $target{lib_extension} || ".lib";
our $shlibext = $target{shared_extension} || ".dll";
{- output_on() if $disabled{makedepend}; "" -}
GENERATED_MANDATORY={- join(" ", @{$unified_info{depends}->{""}} ) -}
GENERATED={- # common0.tmpl provides @generated
- join(" ", map { (my $x = $_) =~ s|\.[sS]$|.asm|; $x }
+ join(" ", map { my $x = $_;
+ $x =~ s|\.[sS]$|.asm|;
+ $x =~ s|\.ld$|$defext|;
+ $x }
@generated) -}
INSTALL_LIBS={- join(" ", map { quotify1(lib($_)) } @{$unified_info{install}->{libraries}}) -}
sub generatesrc {
my %args = @_;
- (my $target = $args{src}) =~ s/\.[sS]$/.asm/;
my ($gen0, @gens) = @{$args{generator}};
my $generator = '"'.$gen0.'"'.join('', map { " $_" } @gens);
my $generator_incs = join("", map { " -I \"$_\"" } @{$args{generator_incs}});
my $deps = @{$args{deps}} ?
'"'.join('" "', @{$args{generator_deps}}, @{$args{deps}}).'"' : '';
- if ($target !~ /\.asm$/) {
+ if ($args{src} =~ /\.ld$/) {
+ (my $target = $args{src}) =~ s/\.ld$/$defext/;
+ my $mkdef = abs2rel(rel2abs(catfile($config{sourcedir},
+ "util", "mkdef.pl")),
+ rel2abs($config{builddir}));
+ return <<"EOF";
+$target: $args{generator}->[0] $deps
+ \$(PERL) $mkdef $args{generator}->[1] 32 > $target
+EOF
+ } elsif ($args{src} !~ /\.[sS]$/) {
+ my $target = $args{src};
if ($args{generator}->[0] =~ m|^.*\.in$|) {
my $dofile = abs2rel(rel2abs(catfile($config{sourcedir},
"util", "dofile.pl")),
EOF
}
} else {
+ (my $target = $args{src}) =~ s/\.[sS]$/.asm/;
if ($args{generator}->[0] =~ /\.pl$/) {
$generator = '"$(PERL)"'.$generator_incs.' '.$generator;
} elsif ($args{generator}->[0] =~ /\.S$/) {
my @objs = map { (my $x = $_) =~ s|\.o$|$objext|; $x }
grep { $_ =~ m/\.(?:o|res)$/ }
@{$args{objs}};
- my @defs = grep { $_ =~ /\.def$/ } @{$args{objs}};
+ my @defs = map { (my $x = $_) =~ s|\.ld$||; "$x$defext" }
+ grep { $_ =~ /\.ld$/ }
+ @{$args{objs}};
my @deps = compute_lib_depends(@{$args{deps}});
die "More than one exported symbols list" if scalar @defs > 1;
my $linklibs = join("", map { "$_\n" } @deps);
$target{exe_extension}=".exe" if ($config{target} eq "DJGPP"
|| $config{target} =~ /^(?:Cygwin|mingw)/);
$target{exe_extension}=".pm" if ($config{target} =~ /vos/);
-
+$target{def_extension}=".ld";
+$target{def_extension}=".def" if $config{target} =~ /^mingw|VC-/;
+$target{def_extension}=".opt" if $config{target} =~ /^vms/;
($target{shared_extension_simple}=$target{shared_extension})
=~ s|\.\$\(SHLIB_VERSION_NUMBER\)||
unless defined($target{shared_extension_simple});
my $o = cleanfile($buildd, $o, $blddir);
$unified_info{shared_sources}->{$ddest}->{$o} = -1;
$unified_info{sources}->{$o}->{$s} = -1;
- } elsif ($s =~ /\.(def|map|opt)$/) {
- # We also recognise .def / .map / .opt files
+ } elsif ($s =~ /\.ld$/) {
+ # We also recognise linker scripts (or corresponding)
# We know they are generated files
- my $def = cleanfile($buildd, $s, $blddir);
- $unified_info{shared_sources}->{$ddest}->{$def} = 1;
+ my $ld = cleanfile($buildd, $s, $blddir);
+ $unified_info{shared_sources}->{$ddest}->{$ld} = 1;
} else {
die "unrecognised source file type for shared library: $s\n";
}
}
}
- # Go through all object files and change their names to something that
+ # Go through all intermediary files and change their names to something that
# reflects what they will be built for. Note that for some source files,
# this leads to duplicate object files because they are used multiple times.
# the goal is to rename all object files according to this scheme:
map { keys %{$unified_copy{$_}->{$prod}} }
@src;
foreach (keys %prod_sources) {
- # Only affect object or resource files, the others
- # simply get a new value (+1 instead of -1)
+ # Only affect object files and resource files,
+ # the others simply get a new value
+ # (+1 instead of -1)
if ($_ =~ /\.(o|res)$/) {
(my $prodname = $prod) =~ s|\.a$||;
my $newobj =
GENERATE[crypto/include/internal/dso_conf.h]=crypto/include/internal/dso_conf.h.in
IF[{- defined $target{shared_defflag} -}]
- IF[{- $config{target} =~ /^mingw/ -}]
- GENERATE[libcrypto.def]=util/mkdef.pl crypto 32
- DEPEND[libcrypto.def]=util/libcrypto.num
- GENERATE[libssl.def]=util/mkdef.pl ssl 32
- DEPEND[libssl.def]=util/libssl.num
+ SHARED_SOURCE[libcrypto]=libcrypto.ld
+ SHARED_SOURCE[libssl]=libssl.ld
- SHARED_SOURCE[libcrypto]=libcrypto.def
- SHARED_SOURCE[libssl]=libssl.def
- ELSIF[{- $config{target} =~ /^aix/ -}]
- GENERATE[libcrypto.map]=util/mkdef.pl crypto aix
- DEPEND[libcrypto.map]=util/libcrypto.num
- GENERATE[libssl.map]=util/mkdef.pl ssl aix
- DEPEND[libssl.map]=util/libssl.num
-
- SHARED_SOURCE[libcrypto]=libcrypto.map
- SHARED_SOURCE[libssl]=libssl.map
- ELSE
- GENERATE[libcrypto.map]=util/mkdef.pl crypto linux
- DEPEND[libcrypto.map]=util/libcrypto.num
- GENERATE[libssl.map]=util/mkdef.pl ssl linux
- DEPEND[libssl.map]=util/libssl.num
-
- SHARED_SOURCE[libcrypto]=libcrypto.map
- SHARED_SOURCE[libssl]=libssl.map
- ENDIF
-ENDIF
-# VMS and VC don't have parametrised .def / .symvec generation, so they get
-# special treatment, since we know they do use these files
-IF[{- $config{target} =~ /^VC-/ -}]
- GENERATE[libcrypto.def]=util/mkdef.pl crypto 32
- DEPEND[libcrypto.def]=util/libcrypto.num
- GENERATE[libssl.def]=util/mkdef.pl ssl 32
- DEPEND[libssl.def]=util/libssl.num
-
- SHARED_SOURCE[libcrypto]=libcrypto.def
- SHARED_SOURCE[libssl]=libssl.def
-ELSIF[{- $config{target} =~ /^vms/ -}]
- GENERATE[libcrypto.opt]=util/mkdef.pl crypto "VMS"
- DEPEND[libcrypto.opt]=util/libcrypto.num
- GENERATE[libssl.opt]=util/mkdef.pl ssl "VMS"
- DEPEND[libssl.opt]=util/libssl.num
-
- SHARED_SOURCE[libcrypto]=libcrypto.opt
- SHARED_SOURCE[libssl]=libssl.opt
+ GENERATE[libcrypto.ld]=util/libcrypto.num crypto
+ GENERATE[libssl.ld]=util/libssl.num ssl
ENDIF
IF[{- $config{target} =~ /^(?:Cygwin|mingw|VC-)/ -}]
$debug=1 if $_ eq "debug";
$trace=1 if $_ eq "trace";
$verbose=1 if $_ eq "verbose";
- $W32=1 if $_ eq "32";
die "win16 not supported" if $_ eq "16";
- if($_ eq "NT") {
+ if ($_ eq "32" || $_ eq "mingw") {
+ $W32=1;
+ } elsif ($_ eq "NT") {
$W32 = 1;
$NT = 1;
- } elsif ($_ eq "linux") {
+ } elsif ($_ eq "linux" || $_ eq "solaris") {
$linux=1;
$UNIX=1;
} elsif ($_ eq "aix") {