#!/bin/sh # Writes out all of the exported symbols to a file. # This is needed on AIX as symbols are not exported # by an executable by default and need to be listed # specifically for export so that they can be used # by native add-ons. # # The raw symbol data is obtained by using nm on # the .a files which make up the node executable. # # -Xany processes symbols for both 32-bit and # 64-bit (the default is for 32-bit only). # # -g selects only exported symbols. # # -C, -B and -p ensure that the output is in a # format that can be easily parsed and converted # into the required symbol. # # -C suppresses the demangling of C++ names. # -B writes the output in BSD format. # -p displays the info in a standard portable # output format. # # 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 - Global bss symbol. # # The final sort allows removal of any duplicates. # # Symbols for the gtest libraries are excluded 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