File: get-library-symbols.pl

package info (click to toggle)
plplot 5.10.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 26,280 kB
  • ctags: 13,512
  • sloc: ansic: 83,001; xml: 27,081; ada: 18,878; cpp: 15,966; tcl: 11,651; python: 7,075; f90: 7,058; ml: 6,974; java: 6,665; perl: 5,029; sh: 2,210; makefile: 199; lisp: 75; sed: 25; fortran: 7
file content (71 lines) | stat: -rwxr-xr-x 1,562 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#! /usr/bin/env perl
 
# Get symbols exported by the PLplot library and output only those that are
# included in the public header file.
#
# Rafael Laboissiere <rafael@users.sf.net> on Sun May 23 16:24:02 CEST 2004
# This file is part of PLplot and released under the terms of the GNU GPL.
# No warranties.

my $nargin = scalar @ARGV;

die "Usage:\n  $0 library.so header.h [n_columns]\n"
  if ($nargin != 2 and $nargin != 3);

my ($library, $header, $columns) = @ARGV;
$columns ||= 2;

die "$0: n_columns must be >= 1"
  if $columns < 1;

open (HEADER, "< $header")
  or die "$0: cannot open file $header";
my @hlines = <HEADER>;
close HEADER;

my @extsym = `nm "$library"`
  or die "$0: cannot get external symbols of library $library";

my @symbols = ();

my $maxlen = 0;

map {    
  my $s = $_;
  if (grep {/$s/} @hlines) {
    push (@symbols, $s);
    my $len = length ($s);
    $maxlen = $len 
      if $len > $maxlen;
  }
} sort map {
  chomp;
  my $s = (split (" "))[2];
  $s =~ s/^c_//;
  $s;
} grep {/ T /} @extsym;

if ($columns == 1) {

  # Simple output if one column requested
  print join ("\n", @symbols);

} else {
    
  my $nsym = scalar @symbols;
  my $percol = $nsym / $columns;
  $percol = int ($percol) + 1
    if $percol != int ($percol);
  for (my $i = 0; $i < $percol; $i++) {
    for (my $j = 0; $j < $columns; $j++) {
      my $k = $j * $percol + $i;
      if ($k < $nsym) {
        my $sym = $symbols[$k];
        print $sym;
	print (" " x ($maxlen - length ($sym) + 2))
	  if $j < $columns - 1;
      }
    }
    print "\n";
  }
}