File: mangle.pl

package info (click to toggle)
insighttoolkit 3.20.1%2Bgit20120521-3
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 80,652 kB
  • sloc: cpp: 458,133; ansic: 196,223; fortran: 28,000; python: 3,839; tcl: 1,811; sh: 1,184; java: 583; makefile: 430; csh: 220; perl: 193; xml: 20
file content (92 lines) | stat: -rw-r--r-- 3,176 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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#
#  NrrdIO: stand-alone code for basic nrrd functionality
#  Copyright (C) 2005  Gordon Kindlmann
#  Copyright (C) 2004, 2003, 2002, 2001, 2000, 1999, 1998  University of Utah
# 
#  This software is provided 'as-is', without any express or implied
#  warranty.  In no event will the authors be held liable for any
#  damages arising from the use of this software.
# 
#  Permission is granted to anyone to use this software for any
#  purpose, including commercial applications, and to alter it and
#  redistribute it freely, subject to the following restrictions:
# 
#  1. The origin of this software must not be misrepresented; you must
#     not claim that you wrote the original software. If you use this
#     software in a product, an acknowledgment in the product
#     documentation would be appreciated but is not required.
# 
#  2. Altered source versions must be plainly marked as such, and must
#     not be misrepresented as being the original software.
# 
#  3. This notice may not be removed or altered from any source distribution.
#
#
# generates (to stdout) a header file intended to be included into
# source files where there is a concern of name-space collision induced
# by linking to two different version of NrrdIO
#

if (0 != $#ARGV) {
    die "usage: perl mangle.pl <prefix>\n";
}
$prefix = $ARGV[0];

# there's probably a proper way to detect if the compiler is putting
# an underscore in front of all the symbols, but this works to detect
# what happens on macs
if (exists $ENV{OSTYPE} and "darwin" eq $ENV{OSTYPE}) {
    $mac = 1;
} else {
    $mac = 0;
}

print "#ifndef __${prefix}_NrrdIO_mangle_h\n";
print "#define __${prefix}_NrrdIO_mangle_h\n";
print "\n";
print "/*\n";
print "\n";
print "This header file mangles all symbols exported from the\n";
print "NrrdIO library. It is included in all files while building\n";
print "the NrrdIO library.  Due to namespace pollution, no NrrdIO\n";
print "headers should be included in .h files in ITK.\n";
print "\n";
print "This file was created via the mangle.pl script in the\n";
print "NrrdIO distribution:\n";
print "\n";
print "  perl mangle.pl ${prefix} > ${prefix}_NrrdIO_mangle.h\n";
print "\n";
print "This uses nm to list all text (T), data (D) symbols, as well\n";
print "read-only (R) things (seen on Linux) and \"other\" (S) things\n";
print "(seen on Mac).  On Macs, the preceeding underscore is removed.\n";
print "*/\n";
print "Also ensures that a few others starting with nrrd are included, and\n";
print "prevents variables ending with .N* where N is some number, from inclusion.\n";
print "\n";
open(NM, "nm libNrrdIO.a |");
while (<NM>) {
    if (m/.* .* .*\.[0-9]/) {
        next;
    }
    if (m/ [TBDRStb] /) {
        s|.* [TBDRStb] (.*)|$1|g;
        if ($mac) {
            s|^_||g;
        }
        chop;
        $sym = $_;
        print "#define ${sym} ${prefix}_${sym}\n";
    } else {
      if (m/nrrd/) {
          s|.* . (.*nrrd*)|$1|g;
          if ($mac) {
            s|^_||g;
          }
          chop;
          $sym = $_;
          print "#define ${sym} ${prefix}_${sym}\n";
        }
    }
}
close(NM);
print "#endif  /* __${prefix}_NrrdIO_mangle_h */ \n";