2015-09-29 16:22:00 +02:00
|
|
|
#!/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
|
2016-08-26 16:07:29 +02:00
|
|
|
echo "#!." > $2.tmp
|
2015-09-29 16:22:00 +02:00
|
|
|
|
|
|
|
# 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 }
|
|
|
|
}' \
|
2016-08-26 16:07:29 +02:00
|
|
|
| sort -u >> $2.tmp
|
|
|
|
|
|
|
|
mv -f $2.tmp $2
|