1234567891011121314151617181920212223242526272829303132333435363738 |
- #!/usr/bin/perl
- #
- # spacesyms-c-gen.pl
- #
- # Output a C file that contains symbols matching the shell glob
- # sym{defaultver,longver,shortver}{nospace,SPACE}{default,hidden,protected,internal}
- # with symbol visibility matching the final element and at least one relocation
- # against each symbol.
- #
- # When used together with spacesyms-o-map.pl and spacesyms.map, makes a shared
- # object that contains symbols that covers all cases of:
- #
- # 1) has a short, long or Base version,
- # 2) has or does not have a space in the symbol name,
- # 3) default, hidden, protected or internal visibility.
- use strict;
- use warnings;
- my @symbols;
- foreach my $version (qw(defaultver longver shortver)) {
- foreach my $space (qw(nospace SPACE)) {
- foreach my $visibility (qw(default hidden protected internal)) {
- my $symbol = "sym$version$space$visibility";
- push @symbols, $symbol;
- print "void $symbol(void) __attribute__((visibility(\"$visibility\")));\n";
- print "void $symbol(void) {}\n";
- }
- }
- }
- print "void (*funcs[])(void) = {\n";
- foreach my $symbol (@symbols) {
- print "$symbol,\n";
- }
- print "};\n";
|