1 package platform::BASE;
7 # Assume someone set @INC right before loading this module
10 # Globally defined "platform specific" extensions, available for uniformity
13 # Functions to convert internal file representations to platform specific
14 # ones. Note that these all depend on extension functions that MUST be
15 # defined per platform.
17 # Currently known internal or semi-internal extensions are:
19 # .a For libraries that are made static only.
20 # Internal libraries only.
21 # .o For object files.
22 # .s, .S Assembler files. This is an actual extension on Unix
23 # .res Resource file. This is an actual extension on Windows
25 sub binname { return $_[1] } # Name of executable binary
26 sub dsoname { return $_[1] } # Name of dynamic shared object (DSO)
27 sub sharedname { return __isshared($_[1]) ? $_[1] : undef } # Name of shared lib
28 sub staticname { return __base($_[1], '.a') } # Name of static lib
30 # Convenience function to convert the shlib version to an acceptable part
31 # of a file or directory name.
32 sub shlib_version_as_filename { return $_[1] }
34 # Convenience functions to convert the possible extension of an input file name
35 sub bin { return $_[0]->binname($_[1]) . $_[0]->binext() }
36 sub dso { return $_[0]->dsoname($_[1]) . $_[0]->dsoext() }
37 sub sharedlib { return __concat($_[0]->sharedname($_[1]), $_[0]->shlibext()) }
38 sub staticlib { return $_[0]->staticname($_[1]) . $_[0]->libext() }
40 # More convenience functions for intermediary files
41 sub def { return __base($_[1], '.ld') . $_[0]->defext() }
42 sub obj { return __base($_[1], '.o') . $_[0]->objext() }
43 sub res { return __base($_[1], '.res') . $_[0]->resext() }
44 sub dep { return __base($_[1], '.o') . $_[0]->depext() } # <- objname
45 sub asm { return __base($_[1], '.S', '.s') . $_[0]->asmext() }
47 # Another set of convenience functions for standard checks of certain
48 # internal extensions and conversion from internal to platform specific
49 # extension. Note that the latter doesn't deal with libraries because
51 sub isdef { return $_[1] =~ m|\.ld$|; }
52 sub isobj { return $_[1] =~ m|\.o$|; }
53 sub isres { return $_[1] =~ m|\.res$|; }
54 sub isasm { return $_[1] =~ m|\.[Ss]$|; }
56 if ($_[0]->isdef($_[1])) { return $_[0]->def($_[1]); }
57 if ($_[0]->isobj($_[1])) { return $_[0]->obj($_[1]); }
58 if ($_[0]->isres($_[1])) { return $_[0]->res($_[1]); }
59 if ($_[0]->isasm($_[1])) { return $_[0]->asm($_[1]); }
63 # Helpers ############################################################
66 # This returns the given path (EXPR) with the matching suffix from LIST stripped
70 if ($path =~ m|\Q${_}\E$|) {
78 # EXPR is supposed to be a library name. This will return true if that library
79 # can be assumed to be a shared library, otherwise false
81 return !($disabled{shared} || $_[0] =~ /\.a$/);
85 # Returns the concatenation of all elements of LIST if none of them is
86 # undefined. If one of them is undefined, returns undef instead.
90 return undef unless defined $_;