summaryrefslogtreecommitdiff
path: root/tools/create_expfile.sh
blob: e27ed777571dc41613c6fcd2364960c6b8ce5b4b (plain)
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
#!/bin/sh
# This script writes out all the exported symbols to a file
# AIX needs this as sybmols are not exported by an
# executable by default and we need to list
# them specifically in order to export them
# so that they can be used by native add-ons
#
# The raw symbol data is objtained by using nm on
# the .a files which make up the node executable
#
# -Xany makes sure we get symbols on both
# 32 bit and 64 bit as by default we'd only get those
# for 32 bit
#
# -g selects only exported symbols
#
# -C, -B and -p ensure the output is in a format we
# can easily parse and convert into the symbol we need
#
# -C suppresses the demangling of C++ names
# -B gives us output in BSD format
# -p displays the info in a standard portable output format
#
# We only include symbols if they are of the
# following types and don't start with a dot.
#
# T - Global text symbol
# D - Global data symbol
# B - Gobal bss symbol.
#
# the final sort allows us to remove any duplicates
#
# We need to exclude gtest libraries as they are not
# linked into the node executable
#
echo "Searching $1 to write out expfile to $2"

# this special sequence must be at the start of the exp file
echo "#!." > $2.tmp

# pull the symbols from the .a files
find $1 -name "*.a" | grep -v gtest \
  | xargs nm -Xany -BCpg \
  | awk '{
      if ((($2 == "T") || ($2 == "D") || ($2 == "B")) &&
          (substr($3,1,1) != ".")) { print $3 }
    }' \
  | sort -u >> $2.tmp

mv -f $2.tmp $2