mirror of
https://github.com/samba-team/samba.git
synced 2025-01-26 10:04:02 +03:00
tdb: add scripts to extract library symbols (exports file) from headers
Michael (cherry picked from samba commit 006fd0c43c7c403b8671dfc46e5ee31e92480e1f) Signed-off-by: Stefan Metzmacher <metze@samba.org> (This used to be ctdb commit aed864dceaf6ec1e6e6066a587c708b485901200)
This commit is contained in:
parent
eb9d367843
commit
53336a9cb1
76
ctdb/lib/tdb/script/mksyms.awk
Normal file
76
ctdb/lib/tdb/script/mksyms.awk
Normal file
@ -0,0 +1,76 @@
|
||||
#
|
||||
# mksyms.awk
|
||||
#
|
||||
# Extract symbols to export from C-header files.
|
||||
# output in version-script format for linking shared libraries.
|
||||
#
|
||||
# Copyright (C) 2008 Micheal Adam <obnox@samba.org>
|
||||
#
|
||||
BEGIN {
|
||||
inheader=0;
|
||||
current_file="";
|
||||
print "#"
|
||||
print "# This file is automatically generated with \"make symbols\". DO NOT EDIT "
|
||||
print "#"
|
||||
print "{"
|
||||
print "\tglobal:"
|
||||
}
|
||||
|
||||
END {
|
||||
print""
|
||||
print "\tlocal: *;"
|
||||
print "};"
|
||||
}
|
||||
|
||||
{
|
||||
if (FILENAME!=current_file) {
|
||||
print "\t\t# The following definitions come from",FILENAME
|
||||
current_file=FILENAME
|
||||
}
|
||||
if (inheader) {
|
||||
if (match($0,"[)][ \t]*[;][ \t]*$")) {
|
||||
inheader = 0;
|
||||
}
|
||||
next;
|
||||
}
|
||||
}
|
||||
|
||||
/^static/ || /^[ \t]*typedef/ || !/^[a-zA-Z\_]/ {
|
||||
next;
|
||||
}
|
||||
|
||||
/^extern[ \t]+[^()]+[;][ \t]*$/ {
|
||||
gsub(/[^ \t]+[ \t]+/, "");
|
||||
sub(/[;][ \t]*$/, "");
|
||||
printf "\t\t%s;\n", $0;
|
||||
next;
|
||||
}
|
||||
|
||||
# look for function headers:
|
||||
{
|
||||
gotstart = 0;
|
||||
if ($0 ~ /^[A-Za-z_][A-Za-z0-9_]+/) {
|
||||
gotstart = 1;
|
||||
}
|
||||
if(!gotstart) {
|
||||
next;
|
||||
}
|
||||
}
|
||||
|
||||
/[_A-Za-z0-9]+[ \t]*[(].*[)][ \t]*;[ \t]*$/ {
|
||||
sub(/[(].*$/, "");
|
||||
gsub(/[^ \t]+[ \t]+/, "");
|
||||
gsub(/^[*]/, "");
|
||||
printf "\t\t%s;\n",$0;
|
||||
next;
|
||||
}
|
||||
|
||||
/[_A-Za-z0-9]+[ \t]*[(]/ {
|
||||
inheader=1;
|
||||
sub(/[(].*$/, "");
|
||||
gsub(/[^ \t]+[ \t]+/, "");
|
||||
gsub(/^[*]/, "");
|
||||
printf "\t\t%s;\n",$0;
|
||||
next;
|
||||
}
|
||||
|
45
ctdb/lib/tdb/script/mksyms.sh
Executable file
45
ctdb/lib/tdb/script/mksyms.sh
Executable file
@ -0,0 +1,45 @@
|
||||
#! /bin/sh
|
||||
|
||||
#
|
||||
# mksyms.sh
|
||||
#
|
||||
# Extract symbols to export from C-header files.
|
||||
# output in version-script format for linking shared libraries.
|
||||
#
|
||||
# This is the shell wrapper for the mksyms.awk core script.
|
||||
#
|
||||
# Copyright (C) 2008 Micheal Adam <obnox@samba.org>
|
||||
#
|
||||
|
||||
LANG=C; export LANG
|
||||
LC_ALL=C; export LC_ALL
|
||||
LC_COLLATE=C; export LC_COLLATE
|
||||
|
||||
if [ $# -lt 2 ]
|
||||
then
|
||||
echo "Usage: $0 awk output_file header_files"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
awk="$1"
|
||||
shift
|
||||
|
||||
symsfile="$1"
|
||||
shift
|
||||
symsfile_tmp="$symsfile.$$.tmp~"
|
||||
|
||||
proto_src="`echo $@ | tr ' ' '\n' | sort | uniq `"
|
||||
|
||||
echo creating $symsfile
|
||||
|
||||
mkdir -p `dirname $symsfile`
|
||||
|
||||
${awk} -f `dirname $0`/mksyms.awk $proto_src > $symsfile_tmp
|
||||
|
||||
if cmp -s $symsfile $symsfile_tmp 2>/dev/null
|
||||
then
|
||||
echo "$symsfile unchanged"
|
||||
rm $symsfile_tmp
|
||||
else
|
||||
mv $symsfile_tmp $symsfile
|
||||
fi
|
Loading…
x
Reference in New Issue
Block a user