summaryrefslogtreecommitdiff
path: root/tools/create_expfile.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tools/create_expfile.sh')
-rwxr-xr-xtools/create_expfile.sh48
1 files changed, 48 insertions, 0 deletions
diff --git a/tools/create_expfile.sh b/tools/create_expfile.sh
new file mode 100755
index 0000000000..ff4420a9e8
--- /dev/null
+++ b/tools/create_expfile.sh
@@ -0,0 +1,48 @@
+#!/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
+
+# 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