mirror of
https://github.com/openssl/openssl.git
synced 2024-12-15 06:01:37 +08:00
e805c2d6d3
Added functionality to use static libraries as source for other libraries. When done this way, the target library will use the object files from the sourced static libraries, making the sourced libraries work as "containers" for object files. We also need to make sure that the Unix Makefile template knows how to deal with shared libraries and modules that depend on static libraries. That's new situation we haven't had before. Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/10088)
99 lines
3.6 KiB
Perl
99 lines
3.6 KiB
Perl
package platform::BASE;
|
|
|
|
use strict;
|
|
use warnings;
|
|
use Carp;
|
|
|
|
# Assume someone set @INC right before loading this module
|
|
use configdata;
|
|
|
|
# Globally defined "platform specific" extensions, available for uniformity
|
|
sub depext { '.d' }
|
|
|
|
# Functions to convert internal file representations to platform specific
|
|
# ones. Note that these all depend on extension functions that MUST be
|
|
# defined per platform.
|
|
#
|
|
# Currently known internal or semi-internal extensions are:
|
|
#
|
|
# .a For libraries that are made static only.
|
|
# Internal libraries only.
|
|
# .o For object files.
|
|
# .s, .S Assembler files. This is an actual extension on Unix
|
|
# .res Resource file. This is an actual extension on Windows
|
|
|
|
sub binname { return $_[1] } # Name of executable binary
|
|
sub dsoname { return $_[1] } # Name of dynamic shared object (DSO)
|
|
sub sharedname { return __isshared($_[1]) ? $_[1] : undef } # Name of shared lib
|
|
sub staticname { return __base($_[1], '.a') } # Name of static lib
|
|
|
|
# Convenience function to convert the shlib version to an acceptable part
|
|
# of a file or directory name. By default, we consider it acceptable as is.
|
|
sub shlib_version_as_filename { return $config{shlib_version} }
|
|
|
|
# Convenience functions to convert the possible extension of an input file name
|
|
sub bin { return $_[0]->binname($_[1]) . $_[0]->binext() }
|
|
sub dso { return $_[0]->dsoname($_[1]) . $_[0]->dsoext() }
|
|
sub sharedlib { return __concat($_[0]->sharedname($_[1]), $_[0]->shlibext()) }
|
|
sub staticlib { return $_[0]->staticname($_[1]) . $_[0]->libext() }
|
|
|
|
# More convenience functions for intermediary files
|
|
sub def { return __base($_[1], '.ld') . $_[0]->defext() }
|
|
sub obj { return __base($_[1], '.o') . $_[0]->objext() }
|
|
sub res { return __base($_[1], '.res') . $_[0]->resext() }
|
|
sub dep { return __base($_[1], '.o') . $_[0]->depext() } # <- objname
|
|
sub asm { return __base($_[1], '.S', '.s') . $_[0]->asmext() }
|
|
|
|
# Another set of convenience functions for standard checks of certain
|
|
# internal extensions and conversion from internal to platform specific
|
|
# extension. Note that the latter doesn't deal with libraries because
|
|
# of ambivalence
|
|
sub isdef { return $_[1] =~ m|\.ld$|; }
|
|
sub isobj { return $_[1] =~ m|\.o$|; }
|
|
sub isres { return $_[1] =~ m|\.res$|; }
|
|
sub isasm { return $_[1] =~ m|\.[Ss]$|; }
|
|
sub isstaticlib { return $_[1] =~ m|\.a$|; }
|
|
sub convertext {
|
|
if ($_[0]->isdef($_[1])) { return $_[0]->def($_[1]); }
|
|
if ($_[0]->isobj($_[1])) { return $_[0]->obj($_[1]); }
|
|
if ($_[0]->isres($_[1])) { return $_[0]->res($_[1]); }
|
|
if ($_[0]->isasm($_[1])) { return $_[0]->asm($_[1]); }
|
|
if ($_[0]->isstaticlib($_[1])) { return $_[0]->staticlib($_[1]); }
|
|
return $_[1];
|
|
}
|
|
|
|
# Helpers ############################################################
|
|
|
|
# __base EXPR, LIST
|
|
# This returns the given path (EXPR) with the matching suffix from LIST stripped
|
|
sub __base {
|
|
my $path = shift;
|
|
foreach (@_) {
|
|
if ($path =~ m|\Q${_}\E$|) {
|
|
return $`;
|
|
}
|
|
}
|
|
return $path;
|
|
}
|
|
|
|
# __isshared EXPR
|
|
# EXPR is supposed to be a library name. This will return true if that library
|
|
# can be assumed to be a shared library, otherwise false
|
|
sub __isshared {
|
|
return !($disabled{shared} || $_[0] =~ /\.a$/);
|
|
}
|
|
|
|
# __concat LIST
|
|
# Returns the concatenation of all elements of LIST if none of them is
|
|
# undefined. If one of them is undefined, returns undef instead.
|
|
sub __concat {
|
|
my $result = '';
|
|
foreach (@_) {
|
|
return undef unless defined $_;
|
|
$result .= $_;
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
1;
|