#!/bin/sh | |
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
# file Copyright.txt or https://cmake.org/licensing for details. | |
# This script is internal to CMake and meant only to be | |
# invoked by CMake-generated build systems on AIX. | |
usage='usage: ExportImportList -o <out-file> [-l <lib>] [-n] [--] <objects>...' | |
die() { | |
echo "$@" 1>&2; exit 1 | |
} | |
# Process command-line arguments. | |
out='' | |
lib='' | |
no_objects='' | |
while test "$#" != 0; do | |
case "$1" in | |
-l) shift; lib="$1" ;; | |
-o) shift; out="$1" ;; | |
-n) no_objects='1' ;; | |
--) shift; break ;; | |
-*) die "$usage" ;; | |
*) break ;; | |
esac | |
shift | |
done | |
test -n "$out" || die "$usage" | |
# Build a temporary file that atomically replaces the output later. | |
out_tmp="$out.tmp$$" | |
trap 'rm -f "$out_tmp"' EXIT INT TERM | |
> "$out_tmp" | |
# Collect symbols exported from all object files. | |
if test -z "$no_objects"; then | |
for f in "$@"; do | |
dump -tov -X 32_64 "$f" | | |
awk ' | |
BEGIN { | |
V["EXPORTED"]=" export" | |
V["PROTECTED"]=" protected" | |
} | |
/^\[[0-9]+\]\tm +[^ ]+ +\.(text|data|bss) +[^ ]+ +(extern|weak) +(EXPORTED|PROTECTED| ) / { | |
if (!match($NF,/^(\.|__sinit|__sterm|__[0-9]+__)/)) { | |
print $NF V[$(NF-1)] | |
} | |
} | |
' | |
done >> "$out_tmp" | |
fi | |
# Generate the export/import file. | |
{ | |
if test -n "$lib"; then | |
echo "#! $lib" | |
fi | |
sort -u "$out_tmp" | |
} > "$out" |